Мониторим бэкапы на ресурсах SMB с помощью Zabbix

В предыдущей статье я рассказал, как можно с помощью 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 нам сообщал о том, что файл отсутствует:

Как и обычно, можно по желанию добавить графики, чтобы мониторить размер файлов.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *