Bareos и Zabbix, мониторинг
Так как постоянно заглядывать в консоль Bareos-a или на вэб-интерфейс не всегда удается, а контролировать выполнение заданий резервного копирования надо, то решено было всё это дело возложить на могучие плечи Zabbixa.
Проведя поисковые мероприятия на предмет готовых решений, все они были отвергнуты, ввиду либо сложностей (работа с БД) либо требований (скрипты на питоне с кучей зависимостей), был написан скрипт на bash использующий для добычи информации родную bconsole (консоль управления bareos).
/usr/local/bin/bareos_get_jobs.sh
#!/bin/bash
# Usage: bareos_get_jobs.sh "job_type"
# where "job_type" must be:
# custom type:
# all - list of all jobs
# notrun - active but don't running jobs
# standart type:
# T - Completed successfully
# E - Terminated with errors
# e - Non-fatal error
# f - Fatal error
# W - Terminated with warnings
# and match more (see bareos docs)
# Дату используем вчерашнюю
DATE=`date --date="yesterday" +%Y-%m-%d`
JOB_STATUS="${1}"
# получаем список job-ов
echo show jobs | bconsole | grep -i "^ name =" | cut -d '"' -f 2 | while read LINE; do
if [[ $JOB_STATUS = "all" ]]
then
echo "$LINE"
else
# в зависимости от опций соответственно реагируем
if [[ $JOB_STATUS != "notrun" ]]; then
# так как один job может выполняться несколько раз в день то и вывод будет содержать несколько строк
# поэтому добавлен ещё один цикл
echo list job=\"$LINE\" | bconsole -c /etc/bareos/bconsole.conf | grep $DATE | cut -d"|" -f10 | grep "${JOB_STATUS}" | while read RES; do
if [[ -n $RES ]]
then
echo "Date:${DATE} Job:\"${LINE}\" status:${RES}"
fi
done
else
RES=`echo list job=\"$LINE\" | bconsole -c /etc/bareos/bconsole.conf | grep $DATE`
if [[ -z $RES ]]
then
echo "Date:${DATE} Job:\"${LINE}\" status:${RES}"
fi
fi
fi
done
Скрипт на вход принимает параметры ввиде стандартного статуса задания (job status), список берём из документации (http://doc.bareos.org/master/html/bareos-manual-main-reference.html#x1-574000G.1.1), или пары моих: «all» — для вывода списка всех задач (job) или «notrun» — для вывода не выполненных задач.
Далее в цикле на каждую задачу получаем журнал выполненных работ с датами и статусами и обрабатываем этот вывод.
На выходе скрипта будет список задач соответствующего статуса.
Для того, чтобы забикс мог это дело мониторить, устаналиваем zabbix-agent и создаём файлик /etc/zabbix/zabbixagentd.d/userparameterbareos.conf следующего содержания:
UserParameter=bareos.director.run[*],netstat -nlt | grep $1 | wc -l
UserParameter=bareos.file_daemon.run[*],netstat -nlt | grep $1 | wc -l
UserParameter=bareos.storage_daemon.run[*],netstat -nlt | grep $1 | wc -l
UserParameter=bareos.jobs[*],/usr/local/bin/bareos_get_jobs.sh $1 | wc -l
И перезапускаем службу забикс-агента.
Попутно операциям с bconsole, как уже мог заметить пытливый читатель, netstat-ом отслеживаются запущены ли соответсвующие демоны. Для корректной работы на сервере с bareos должны присутствовать: netstat и требуемые стандартные утилиты (date, grep, cut, …). На этом низкоуровневая настройка завершена. Далее берём вот этот шаблон и экспортируем его в zabbix. Затем настраиваем соответствующий узел и видим подобную картинку:
Все файлы можно взять одним архивом
Обновление:
Одним из пытливых читателей было замечено, что шаблон не добавляется в zabbix из windows броузера (во всяком случае я к данному выводу пришел). При добавлении вываливается ошибка:
Error in query [INSERT INTO items (name,type,snmp_community,snmp_oid,delay,history,trends,status,value_type,units,snmpv3_contextname,snmpv3_securityname,snmpv3_securitylevel,snmpv3_authprotocol,snmpv3_authpassphrase,snmpv3_privprotocol,snmpv3_privpassphrase,params,ipmi_sensor,authtype,username,password,publickey,privatekey,port,description,inventory_link,logtimefmt,jmx_endpoint,key_,trapper_hosts,hostid,master_itemid,flags,itemid) VALUES ('Bareos Jobs Error','7','','','3600','90d','365d','0','3','','','','0','0','','0','','','','0','','','','','','E - Job Terminated with errors','0','','','bareos.jobs[E]','','10289',NULL,'0','38932')] [Duplicate entry '10289-bareos.jobs[E]' for key 'items_1']
Ошибка при выполнении SQL запроса "INSERT INTO items (name,type,snmp_community,snmp_oid,delay,history,trends,status,value_type,units,snmpv3_contextname,snmpv3_securityname,snmpv3_securitylevel,snmpv3_authprotocol,snmpv3_authpassphrase,snmpv3_privprotocol,snmpv3_privpassphrase,params,ipmi_sensor,authtype,username,password,publickey,privatekey,port,description,inventory_link,logtimefmt,jmx_endpoint,key_,trapper_hosts,hostid,master_itemid,flags,itemid) VALUES ('Bareos Jobs Error','7','','','3600','90d','365d','0','3','','','','0','0','','0','','','','0','','','','','','E - Job Terminated with errors','0','','','bareos.jobs[E]','','10289',NULL,'0','38932')".
Так как у меня в шаблоне два ключа bareos.jobs[E] и bareos.jobs[е] различаются только регистром буквы Е. И отчего-то забикс принимает их за одно и тоже. Исправить это можно, поменяв название одного из ключей в файле шаблона и скрипте.