Необходимо мониторить выполнение бекапа, а именно
1. Проверять,что бекап запускается согласно расписанию раз в сутки
2. В логе выполнения бекапа отсутствует слово failed, которое добавляется в лог в случае не успешного выполнения какого-либо из этапов бекапа
Для реализации этой задачи создадим шаблон,который будет применять к хостам, на которых нужно мониторить выполнение бекапа.
Если таких хостов только один, то вместо создания шаблона можно создать непосредственно только элемент данных и триггер, для хоста, на котором нужно мониторить выполнение бекапа
Создаем шаблон, проверяющий, что бекап был запущен по расписанию(раз в сутки)
1 2 3 |
Configuration->Template-Create Template Template name: My Template Backup-database started Application->Name: Backup |
Создаем элемент данных, который будет проверять время модификации лог-файла выполнения бекапа /var/log/backup.log
1 2 3 4 |
Items-> Create item-> В поле Key указано два параметра Файл,время модификации котрого нужно мониторить /var/log/backup.log Какой параметр файла нужно мониторить – modify-время изменения файла |
Создаем триггер, который будет срабатывать, если разница между текущим временем и временем изменением файла превысит сутки (86400 секунд)
Добавляем шаблон к указанному хосту и проверяем значение элемента во вкладке Latest data фильтруя по нужному хосту и имени приложения Backup
Для проверки срабатывания триггера изменим время модификации файла на пару суток назад
Проверим текущее время изменения файла
1 |
# ls -l /var/log/backup.log |
1 |
-rw-rw-r-- 1 root root 6885 Aug 28 02:35 /var/log/backup.log |
Изменим на 26 августа 02:35
1 |
# touch -m -d '2016-08-26 02:35' /var/log/backup.log |
После чего проверим,что тригер сработал с уровнем важности Warning
Вернем время модификации на исходное
1 |
# touch -m -d '2016-08-28 02:35' /var/log/backup.log |
После чего проверим,что тригер вернулся в состояние OK
После тестирования изменим интервал проверки с 60 секунд до 86400 секунд т.к бекап выполняется раз в сутки и чаще нет необходимости проверять время модификации файла
Создаем шаблон, проверяющий наличие ошибок при выполнении бекапа
В скрипте, с помощью которого выполняется бекап, предусмотрено логирование всех неуспешных операций с выводом в лог-файл /var/log/backup.log слова failed
1 2 3 |
Configuration->Template-Create Template Template name: My Template Backup-databases completed Application->Name: Backup |
Создаем элемент данных, в котором укажем какой лог-файл нужно мониторить — /var/log/backup.log
1 2 3 4 |
Имя: Backup-databases completed successfully Тип проверки: Zabbix agent (active) Key: log[/var/log/backup.log] Тип информации Log |
Создаем триггер, который будет срабатывать при появлении слова failed в файле /var/log/backup.log
1 |
Имя: Backup-database was completed successfully on {HOST.NAME} |
Функция
Уровень важности: Warning
В итоге получается
Найти строку V в последних полученных данных от элемента My Template Backup-database completed:log[/var/log/backup.log]если строка присутствует (N = 1, т.е. found) – то триггер срабатывает
Добавляем шаблон к указанному хосту и проверяем значение элемента во вкладке Latest data фильтруя по нужному хосту и имени приложения Backup
После тестирования изменим интервал проверки с 60 секунд до 86400 секунд т.к бекап выполняется раз в сутки и чаще нет необходимости проверять
Альтернативным способом проверки лог-файла являетс проверка типа Zabbix trapper
1.Выполняем по cron скрипт на Zabbix-клиенте(раз в сутки передаем информацию на Zabbix-сервер)
1 |
# nano /etc/cron.d/zabbix-sender |
1 |
10 6 * * * root /bin/bash /usr/local/scripts/zabbix_sender.sh > /dev/null |
Например, мониторинг создания бекапов баз данных и результатов проверки malware
1 |
# nano /usr/local/scripts/zabbix_sender.sh |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
#!/bin/bash HOSTNAME=$(hostname -f) TIMESTAMP=`date +%s` ZABBIX_DIR=/etc/zabbix CLAMSCAN_LOG_FILE="/var/log/clamav/manual_clamscan.log" CLAMSCAN_NUMBER=$( tail -n 10 ${CLAMSCAN_LOG_FILE} | grep 'Infected files' | awk '{print $3}' | grep -v 0 | wc -l) if [ "${CLAMSCAN_NUMBER}" -ne "0" ] then CLAMSCAN_ANSWER="$HOSTNAME malware_detected $TIMESTAMP true" else CLAMSCAN_ANSWER="$HOSTNAME malware_detected $TIMESTAMP false" fi echo "${CLAMSCAN_ANSWER}" | zabbix_sender -c $ZABBIX_DIR/zabbix_agentd.conf -i - -T -vv >/dev/null 2>&1 BACKUP_LOG_FILE="/var/log/backup.log" BACKUP_NUMBER=$( tail -n 3 ${BACKUP_LOG_FILE} | grep 'failed' | wc -l) if [ "${BACKUP_NUMBER}" -eq "0" ] then BACKUP_ANSWER="$HOSTNAME backup_databases_completed $TIMESTAMP true" else BACKUP_ANSWER="$HOSTNAME backup_databases_completed $TIMESTAMP false" fi echo "${BACKUP_ANSWER}" | zabbix_sender -c $ZABBIX_DIR/zabbix_agentd.conf -i - -T -vv >/dev/null 2>&1 |
1 |
# chmod +x /usr/local/scripts/zabbix_sender.sh |
Опции используемые в zabbix_sender
1 |
-c |
– расположение конфигурационного файла Zabbix-агента, откуда zabbix_sender будет получать значение параметров Hostname, ServerActive and SourceIP
Важен формат, в котором нужно передавать параметры/данные для zabbix_sender
1 |
<hostname> <key> <timestamp> <value> |
1 |
<hostname> |
— имя хоста должно совпадать с именем, указанным в WEB-интерфейсе Zabbix
1 |
<key> |
— имя отслеживаемого параметра/ключа, которое соответствует имени параметра/ключа в элементе данных Zabbix-шаблона создаваемого на Zabbix-сервере
1 |
<timestamp> |
— временная метка в формате Unix-time
1 |
<value> |
— значение ключа
Больше информации доступно по
1 |
# man zabbix_sender |
По результатам выполнения скрипта на Zabbix-сервер будет передаваться строка,например,вида
Если бекап завершился успешно
1 |
zabbix-client-server-name backup_databases_completed 1482934752 true |
Если при выполнении бекапа произошла ошибка/ошибки
1 |
zabbix-client-server-name backup_databases_completed 1482934752 false |
Если вирусы были найдены на сервере
1 |
zabbix-client-server-name malware_detected 1482934752 true |
Если вирусов не обнаружено
1 |
zabbix-client-server-name malware_detected 1482934752 false |
2. На Zabbix-сервере создаем шаблоны в которых создаем элемент данных типа Zabbix trapper c именем ключа, которое соответствует имени передаваемое через zabbix_sender
Триггеры имеют вид
Если Zabbix-сервер получил от Zabbix-агента слова false(что сигнализирует о выполнении бекапа с ошибкой)
Если Zabbix-сервер получил от Zabbix-агента слова true(что сигнализирует о обнаружении вирусов на клиенте)
3.Применяем шаблоны к хосту
Проверка с командной строки
1 |
# echo 'zabbix-client-server-name backup_databases 1482934752 true' | zabbix_sender -c /etc/zabbix/zabbix_agentd.conf -i - -T -vv |
1 |
# echo 'zabbix-client-server-name backup_database_completed 1482934752 true' | zabbix_sender -c /etc/zabbix/zabbix_agentd.conf -i - -T -vv |
1 |
# bash -x /usr/local/scripts/zabbix_sender.sh |
4.Проверяем наличие данных в Latest Data для хоста
Источник:
https://www.zabbix.com/documentation/2.4/ru/manual/config/items/itemtypes/log_items
http://serveradmin.ru/monitoring-bekapov-s-pomoshhyu-zabbix/
https://serveradmin.ru/monitoring-log-fayla-v-zabbix/
https://rtfm.co.ua/zabbix-sozdanie-elementa-dannyx-item-dlya-nablyudeniya-za-log-fajlom-i-dobavlenie-triggera/