Мониторим бэкапы на дисках iSCSI с помощью Zabbix

Озадачил я себя однажды задачей автоматизированной проверки бэкапов с помощью Zabbix. Сложность в том, что разные серверы бэкапятся по-разному — какие-то кладут свои бэкапы на виртуальные диски, подключенные по iSCSI, другие складывают бэкапы на сетевые шары по SMB. Также и сами бэкапы выполняются разными средствами — это и tar архивы, и Система архивации Windows, и Veeam Agent и т.п. Пошуршал в поисковиках, нашёл пару статей, но, как обычно, всё было немножко «не  то». Но на их основе я разработал скрипты, которые проверяют дату создания файлов, расположенных на iSCSI и SMB и передают данные Заббиксу в формате JSON. Настроив в Заббиксе соответствующие элементы данных и тригеры мы будем получать уведомления о том, что с файлами бэкапов что-то не то, а именно —  последние Х часов не был создан файл, а значит надо идти и смотреть что у нас сломалось. Некоторый минус системы в том, что скрипты, собирающие данные о файлах бэкапов совершенно не обращают внимание на то, что это за файл, проверяется только дата создания файлов с определёнными расширениями. Однако мне этого пока достаточно. В этой статье я напишу, как был реализован мониторинг бэкапов, расположенных на дисках iSCSI.

Итак, что мы имеем:

  1. Zabbix 3.4
  2. Сетевое хранилище QNAP
  3. Несколько серверов, к которым подключены цели iSCSI, расположенные на сетевом хранилище, куда и выполняются бэкапы в разных форматах

Что мы мониторим: Файлы *.vhd *.zip *.bkf *.part *.gz на целях iSCSI на сетевом хранилище, созданные в последние 24 часа. На каждой цели может быть несколько файлов, собираем данные по всем таким файлам. Позднее в Zabbix можно добавить только то количество файлов для мониторинга, которое необходимо.

Первым делом я нарисовал скрипт, который подключается к целям iSCSI на сетевом хранилище и проверяет там все файлы с указанными в переменной расширениями. Список целей берётся из файла iscsitargets.list:

192.168.1.1:3260;iqn.2004-04.com.qnap:ts-853pro:iscsi.server1.e952bc 
192.168.1.1:3260;iqn.2004-04.com.qnap:ts-853pro:iscsi.server2.e952bc 
192.168.1.1:3260;iqn.2004-04.com.qnap:ts-853pro:iscsi.server3.e952bc 
192.168.1.1:3260;iqn.2004-04.com.qnap:ts-853pro:iscsi.server4.e952bc 
192.168.1.1:3260;iqn.2004-04.com.qnap:ts-853pro:iscsi.server5.e952bc

Файл имеет простой формат: до знака «;» надо указать сервер:порт, после знака «;» — имя цели iscsi.

Далее сам скрипт MonBackupsISCSIJSON.sh:

#!/bin/bash 
# объявляем переменные 
# Указываем файл со списком iscsi таргетов, к которым будем подключаться 
MNT_iSCSI_TARGET=/etc/zabbix/scripts/iscsitargets.list 
# Указываем каталог, к которому будем монтировать iscsi таргет, каталог должен быть создан заранее 
ISCSI_MNT_PATH='/mnt/NAS1_iSCSI' 
# В регекс пишем какие типы файлов будем искать 
FILE_REGEX='.*\(vhd\|zip\|bkf\|part\|gz\).*' 
# Куда выводим данные по найденым файлам 
LOG_FILE=/etc/zabbix/scripts/backupsISCSI.json 
# Здесь надо указать правильное устройство, которое создаётся при подключении к цели iscsi 
DEV=/dev/sdb1 

#работаем 
rm $LOG_FILE 
iscsi_target=`cat $MNT_iSCSI_TARGET` 
echo '{' >> $LOG_FILE 
for TARGET_NAME in ${iscsi_target} 
do 
address=`echo $TARGET_NAME | cut -d ";" -f1` 
target=`echo $TARGET_NAME | cut -d ";" -f2` 
iscsiadm -m node -T $target -p $address -l 
sleep 2 
mount $DEV $ISCSI_MNT_PATH -t auto 
sizeF=`find $ISCSI_MNT_PATH -type f -mmin -1440 -regex $FILE_REGEX -exec ls -l '{}' ';' | cut -d " " -f5` 
if [[ "$sizeF" = "" ]] 
then 
sizeF=0
fi 
SER_NAME=(`echo $target | rev | cut -d'.' -f 2 | rev`) 
echo '"'$SER_NAME'": {' >> $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 $ISCSI_MNT_PATH 
iscsiadm -m node -T $target -p $address -u 
done 
sed '$s/,$//' -i $LOG_FILE 
echo '}' >> $LOG_FILE

Запуск скрипта надо добавить в crontab и выполнять его раз в сутки после выполнения всех бэкапов. Можно его выполнять и регулярно, скажем, каждый час, но тогда он будет давать не совсем корректные данные, когда новый файл бэкапа ещё создан не полностью и имеет нулевой размер или меньше, чем у предыдущего. В таком случае Zabbix будет сигнализировать о проблеме, хотя её на самом деле нет.

После работы скрипта получаем лог-файл в формате json:

{
"server1": {
"BckpFile1": 4081377107,
"BckpFile2": 6717521151,
"BckpFile3": 73519145472,
"BckpFile4": 54542336
},
"server2": {
"BckpFile1": 192741541888
},
"server3": {
"BckpFile1": 58737664,
"BckpFile2": 25860086272
},
"server4": {
"BckpFile1": 56640000,
"BckpFile2": 63416744448
},
"server5": {
"BckpFile1": 56640000,
"BckpFile2": 25872672256,
"BckpFile3": 78505364480,
"BckpFile4": 191957644800,
"BckpFile5": 311566855680,
"BckpFile6": 27523554304,
"BckpFile7": 34364036608
}
}

Для того, чтобы Zabbix мог получить эти данные, нам потребуется ещё один скрипт, очень простой.

analizeISCSIJSON.sh:

#!/bin/bash 

LOG_PATH=/etc/zabbix/scripts/backupsISCSI.json 

cat $LOG_PATH

Теперь прикручиваем всё это к Заббиксу. Создадим файл пользовательских параметров /etc/zabbix/zabbix_agent.d/userparameter_iscsiBackupsJSON.conf:

UserParameter=checkBackupISCSI.JSON,/etc/zabbix/scripts/analizeISCSIJSON.sh

Чтобы Заббикс скушал новый параметр, надо его перезапустить.

Теперь переходим к Веб-интерфейсу и начинаем настраивать мониторинг. Сначала надо создать «Элемент данных»:

Затем создаём зависимые элементы данных на каждый сервер и на каждый файл, размер которого мы хотим контролировать:

Добавляем предобработку:

Важно, в именах ключей и параметрах соблюдать строчные и прописные буквы!

Остаётся к каждому зависимому элементу данных добавить триггер, чтобы Zabbix нам сообщал о том, что файл отсутствует:

На этом настройка мониторинга бэкапов на целях iSCSI заканчивается.

Если есть желание, можно добавить графики, чтобы отслеживать рост файлов бэкапов.

В другой статье я расскажу об аналогичном решении по мониторингу бэкапов, расположенных на SMB ресурсах.

 

 

 

 

 

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

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