В предыдущей статье я рассказал, как можно с помощью Zabbix проверять бэкапы, расположенные на iSCSI дисках. В этой статье я расскажу, как можно аналогично контролировать бэкапы, находящиеся на SMB ресурсах (в простонародье «на шАрах»). Принцип работы остаётся тем же, что и в случае с iSCSI дисками, только несколько изменён скрипт, который собирает данные и выводит их в файл в формате JSON.
Итак, делаем файл smbtargets.list:
192.168.1.1/Share;Backup Server1;Server1 192.168.1.1/Share;Backup Server2;Server2
Формат файла следующий: разделитель столбцов «;», первые два столбца по сути путь к папке с бэкапами сервера, имя которого мы произвольно задаём в третьем столбце. Путь, указанный в первом столбце монтируется скриптом к файловой системе, а по пути во втором столбце производится поиск файлов. Имя сервера в третьем столбце записывается в лог-файл и потом передаётся Заббиксу.
Скрипт сбора данных MonBackupsSMBJSON.sh:
#!/bin/bash # объявляем переменные # куда будм монтировать шару CIFS_SHARE_PATH='/mnt/NAS1_SMB' # откуда брать списо проверяемых ресурсов MNT_SMB_TARGET=/etc/zabbix/scripts/smbtargets.list # имя и пароль пользователя шары CIFS_USER='user' CIFS_PASSWORD='password' # по каким расширениям ищем файлы FILE_REGEX='.*\(vib\|vbk\|gz\|zip\|bkf\|vhd\).*' # в какой файл выводим данные LOG_FILE=/etc/zabbix/scripts/backupsSMB.json # работаем OLD_IFS=$IFS IFS=$'\n' rm $LOG_FILE SMB_TARGET=`cat $MNT_SMB_TARGET` echo '{' >> $LOG_FILE for TARGET_NAME in ${SMB_TARGET} do servershare=`echo $TARGET_NAME | cut -d ";" -f 1` path=`echo $TARGET_NAME | cut -d ";" -f 2` servername=`echo $TARGET_NAME | cut -d ";" -f 3` mount.cifs //$servershare $CIFS_SHARE_PATH -o user=$CIFS_USER,password=$CIFS_PASSWORD sleep 1 sizeF=`find "$CIFS_SHARE_PATH/$path" -type f -mmin -1440 -iregex $FILE_REGEX -exec ls -l '{}' ';'| cut -d "$ if [[ "$sizeF" = "" ]] then sizeF=0 fi echo '"'$servername'": {' >> $LOG_FILE count=0 for VAL in ${sizeF[@]} do (( count++ )) echo '"BckpFile'$count'": '$VAL',' >> $LOG_FILE done sed '$s/,$//' -i $LOG_FILE echo '},' >> $LOG_FILE umount $CIFS_SHARE_PATH done sed '$s/,$//' -i $LOG_FILE echo '}' >> $LOG_FILE set $IFS=$OLD_IFS
Запуск скрипта надо добавить в crontab и выполнять его раз в сутки после выполнения всех бэкапов. Например в 7 утра каждый день. Можно его выполнять и чаще, скажем, каждый час, но тогда он будет давать не совсем корректные данные, когда новый файл бэкапа ещё создан не полностью и имеет нулевой размер или меньше, чем у предыдущего. В таком случае Zabbix будет сигнализировать о проблеме, хотя её на самом деле нет.
На выходе получаем файл в формате JSON:
{ "Server1": { "BckpFile1": 4639506432 }, "Server2": { "BckpFile1": 177360896 } }
Ну и скрипт передачи этих данных Заббиксу analizeSMBJSON.sh:
#!/bin/bash LOG_PATH=/etc/zabbix/scripts/backupsSMB.json cat $LOG_PATH
Далее настраиваем сам Zabbix. Добавляем файл пользовательских параметров /etc/zabbix/zabbix_agent.d/userparameter_smbBackupsJSON.conf:
UserParameter=checkBackupSMB.JSON,/etc/zabbix/scripts/analizeSMBJSON.sh
После добавления файла пользовательских параметров Zabbix надо перезагрузить.
Переходим к Веб-интерфейсу и настраиваем мониторинг, аналогично как это делали в статье про проверку бэкапов на ресурсах iSCSI. Сначала надо создать «Элемент данных»:
Затем надо создать зависимые элементы данных на каждый сервер и на каждый файл, размер которого мы хотим контролировать:
Добавляем предобработку:
Не забывайте, что в именах ключей и параметрах важно соблюдать строчные и прописные буквы!
Дальше к каждому зависимому элементу данных добавляем триггер, чтобы Zabbix нам сообщал о том, что файл отсутствует:
Как и обычно, можно по желанию добавить графики, чтобы мониторить размер файлов.