Настройка проверки создания бэкапов на удаленном файловом сервере NAS с помощью системы мониторинга Zabbix (установку и настройку Zabbix описывал здесь).
Использовалась статья:
Zabbix. Мониторинг резервного копирования Linux серверов.
(только вместо команды: “ cut -d " " -f 2 ” использую: “ head -n 1 | awk '{print $7}' “)
Сами бекапы создаются с помощью backup-manager.
1) Создаем скрипты:
1.1) Скрипт с непосредственной проверкой файлов бэкапов на FTP-сервере и записью лог-файла для дальнейшего анализа:
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 28 29 |
$ nano /scripts/zabbix/test_backups.sh #!/bin/bash CIFS_SHARE_PATH='/mnt/Backup' # каталог куда примонтировать файловый сервер по SMB MNT_SERVER='SERVER_IP' # здесь нужно указать IP файлового сервера MNT_SERVER_PATH='/Backup' # здесь нужно указать каталог, где создаются подкаталоги с бэкапами CIFS_USER='USER' # имя учетки для входа по SMB CIFS_PASSWORD='PASSWORD' DIR_SERV=(/Conf /Cluster /PostgreSQL /Logs) # подкаталоги с бэкапами LOG_FILE=/usr/local/bin/zabbix/test_backups.log # куда будет падать результат LAST_MINETS=720 # 12 часов # монтируем хранилище с бэкапами mount -t cifs -o user=$CIFS_USER,password=$CIFS_PASSWORD,sec=ntlm,vers=1\.0 //$MNT_SERVER$MNT_SERVER_PATH $CIFS_SHARE_PATH # удаляем предыдущий log файл rm $LOG_FILE # Проверяем был ли создан backup за последние N часов по каждому из списка серверов for SER_NAME in ${DIR_SERV[@]} do sizeF=`find $CIFS_SHARE_PATH$SER_NAME -type f -mmin -$LAST_MINETS -name "*.gz" -ls | head -n 1 | awk '{print $7}'` if [[ "$sizeF" = "" ]] then sizeF=0 fi echo $CIFS_SHARE_PATH$SER_NAME $sizeF echo $SER_NAME $sizeF >> $LOG_FILE done umount $CIFS_SHARE_PATH |
Будут создаваться вот такие логи:
1 2 3 4 5 |
$ nano /scripts/zabbix/test_backups.log /Conf 1250186 /Cluster 5333499017 /PostgreSQL 16090801083 /Logs 1601083 |
1.2) Скрипт, который будет запускать zabbix-agent для чтения лог-файла когда ему вздумается. Скрипт парсит нужную ему строку и колонку для получения размера (в байтах) конкретного бэкапа:
1 2 3 |
$ nano /scripts/zabbix/analyze_test_backups.sh cat /usr/local/bin/zabbix/test_backups.log | grep $1 | head -n 1 | awk '{print $2}' |
2) Добавляем выполнение скрипта (1.1) в crontab:
1 |
0 7 * * 2-6 /usr/local/bin/zabbix/test_backups.sh |
Запуск в 2 часа ночи со вторника по субботу.
3) В /etc/zabbix/zabbix_agentd.conf в раздел с параметром UserParameter (или в конец файла) добавляем:
1 2 3 4 |
UserParameter=test.backups.conf,/usr/local/bin/zabbix/analyze_test_backups.sh /Conf UserParameter=test.backups.cluster,/usr/local/bin/zabbix/analyze_test_backups.sh /Cluster UserParameter=test.backups.postgresql,/usr/local/bin/zabbix/analyze_test_backups.sh /PostgreSQL UserParameter=test.backups.logs,/usr/local/bin/zabbix/analyze_test_backups.sh /Logs |
Формат:
1 |
UserParameter=<key>,<shell command> |
Т.е. агент при своем выполнении будет запускать скрипт (1.2) и полученный размер бэкапа класть в нужный элемент данных zabbix по ключу.
4) Перезапускаем zabbix-agent:
1 |
$ service zabbix-agent restart |
Заходим в веб-админку zabbix:
1) Настройка – Узлы сети – Выбираем узел
2) Создаем Элемент данных
Имя: Test backup /logs
Тип: Zabbix агент
Ключ: test.backups.logs
Интерфейс узла сети: IP:10050
Тип информации: Числовой (с плавающей точкой)
Единица измерения: b
Интервал обновления: 30s
Пользовательские интервалы:
Тип: Переменный Интервал: 1800s
Период: 2-6,07:00-07:35
Период хранения истории: 1w
Период хранения динамики изменений: 365d
Отображение значения: Как есть
Группа элементов данных: Backups
Активировано: Да
3) Создаем Триггер:
Имя: Backup /logs is missing
Важность: Высокая
Выражение: {1C-SRV:test.backups.logs.last()}=0
Генерация ОК событий: Выражение
Режим генерации событий ПРОБЛЕМА : Одиночная
ОК событие закрывает: Все проблемы
Активировано: Да
4) Идем в Мониторинг – Последние данные.
Элемент Backups -> “Test backup /logs” будет неактивен, т.к. agent ничего не передал по ключу test.backups.logs, т.к. скрипт /usr/local/bin/zabbix/analyze_test_backups.sh ничего не вернул, т.к. в /usr/local/bin/zabbix/test_backups.log ничего нет !
Запустим вручную /usr/local/bin/zabbix/test_backups.sh , чтобы принудительно прочитать размер бэкапов логов, не дожидаясь выполнения ночного задания cron. Да, бэкапов логов еще нет, но пусть запишет хотя бы 0 !
1 2 3 |
$ /usr/local/bin/zabbix/test_backups.sh ... /1C-SRV/Logs 0 |
Теперь “Test backup /logs” должен активироваться.