Приветствую, Habr!
Относительно недавно компания, в которой я работаю, начала предлагать Veeam как основное средство резервного копирования. И все бы ничего, но еще в процессе ознакомления выяснилось следующее:
Исходя из этого получается, что если организация пользуется только Linux, то никаких вам отчетов не видать. Либо покупаем и ставим Windows, а уже в нем устанавливаем и настраиваем все, что требуется, и получаем оттуда полную информацию о результатах работы Veeam agent (Linux). Либо ходим на каждую машину и смотрим, как там прошел очередной «рабочий день» агента.
И вот настал тот день, когда нашлась маленькая организация, которая использует только Linux и которой очень нужно делать резервные копии и желательно бесплатно. А вот ежедневно следить за тем, как там отработал агент, хочется централизованно, а не массовыми набегами на серверы.
Для решения этого вопроса пришлось идти в FAQ на сайте Veeam и читать, что мы можем получить, используя консоль и доступные команды veeam agent. Из прочитанного родился небольшой Bash скрипт, который смотрит результат выполнения последнего задания, а за одно, свободное место в сетевой папке, предназначенной для хранения резервных копий.
Собственно, скриптом этим я и хочу поделиться. Сразу предупреждаю, я не силен в скриптописании, поэтому критика и предложения приветствуются.
В результате работы скрипта будет подготовлен отчет следующего содержания:
В зависимости от выбранного способа, отчет будет отправлен либо на почту, либо в Telegram (мой случай):
Остается добавить задачу в crontab, например, каждый день в 9 утра
0 9 * * * /scripts/check_veeam_backup.sh > /dev/null # Daily check at 9am
Теперь скрипт отрабатывает каждое утро и к моменту начала рабочего дня под рукой есть вся информация о работе агентов и доступном месте на сервере резервного копирования.
В скрипте не все гладко, особенно с именем пользователя и паролем для монтирования сетевой папки, доступ к которой есть только у специального пользователя. Но если разрешить этому пользователю только чтение, то есть явный плюс. Ваши резервные копии никогда не потрутся этим пользователем даже случайно.
Относительно недавно компания, в которой я работаю, начала предлагать Veeam как основное средство резервного копирования. И все бы ничего, но еще в процессе ознакомления выяснилось следующее:
- инструменты Veeam заточены под Windows, включая развертывание централизованного репозитория;
- под Linux есть только Veeam agent;
Исходя из этого получается, что если организация пользуется только Linux, то никаких вам отчетов не видать. Либо покупаем и ставим Windows, а уже в нем устанавливаем и настраиваем все, что требуется, и получаем оттуда полную информацию о результатах работы Veeam agent (Linux). Либо ходим на каждую машину и смотрим, как там прошел очередной «рабочий день» агента.
И вот настал тот день, когда нашлась маленькая организация, которая использует только Linux и которой очень нужно делать резервные копии и желательно бесплатно. А вот ежедневно следить за тем, как там отработал агент, хочется централизованно, а не массовыми набегами на серверы.
Для решения этого вопроса пришлось идти в FAQ на сайте Veeam и читать, что мы можем получить, используя консоль и доступные команды veeam agent. Из прочитанного родился небольшой Bash скрипт, который смотрит результат выполнения последнего задания, а за одно, свободное место в сетевой папке, предназначенной для хранения резервных копий.
Собственно, скриптом этим я и хочу поделиться. Сразу предупреждаю, я не силен в скриптописании, поэтому критика и предложения приветствуются.
check_veeam_backup.sh
#!/bin/bash
# PARAMETRS
HOST=`hostname`
REPORT_NAME_FORMAT="%d-%m-%Y"
CURRENT_DATE_FORMAT="%d.%m.%Y"
CURRENT_TIME_FORMAT="%H:%M:%S"
REPORT_FILE=report_$(date +$REPORT_NAME_FORMAT).log
#TOKEN="000000000:XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
#RECIP_ID="00000000"
REPOSITORY=" "
MOUNT_POINT=" "
# MOUNT_USER=" "
# MOUNT_PASSWORD=" "
# Get Veeam job list
JOB_LIST=($(awk 'NR>1 {print$1}' <<< "$(veeamconfig job list)"))
JOB_RESULT_PATH="/var/log/veeam/Backup/"
echo -e "\nStart check on $(date +$CURRENT_DATE_FORMAT) at $(date +$CURRENT_TIME_FORMAT)\n" >> $REPORT_FILE
# Check result Veeam backup job
for JOB in $JOB_LIST
do
echo ------------------------------------------------------ >> $REPORT_FILE
echo Check Schedule job name: $JOB from Host: $HOST >> $REPORT_FILE
echo -e "------------------------------------------------------\n" >> $REPORT_FILE
echo -e "$(veeamconfig schedule show --jobName $JOB)\n" >> $REPORT_FILE
echo ------------------------------------------------------ >> $REPORT_FILE
echo Check latest session Job name: $JOB from Host: $HOST >> $REPORT_FILE
echo -e "------------------------------------------------------\n" >> $REPORT_FILE
LAST_JOB_RESULT=$(ls -t $JOB_RESULT_PATH/$JOB | head -n1 | cut -c 25-)
veeamconfig session info --id $LAST_JOB_RESULT >> $REPORT_FILE
done
echo ------------------------------------------------------ >> $REPORT_FILE
echo Stop check on $(date +$CURRENT_DATE_FORMAT) at $(date +$CURRENT_TIME_FORMAT) >> $REPORT_FILE
echo "\n" >> $REPORT_FILE
# if the repository owner is not root
# mount -t cifs -o user=$MOUNT_USER,password=$MOUNT_PASSWORD $REPOSITORY $MOUNT_POINT
mount -t cifs $REPOSITORY $MOUNT_POINT
echo ------------------------------------------------------ >> $REPORT_FILE
echo -e "Check files in backup repository:\n" >> $REPORT_FILE
ls -h $MOUNT_POINT >> $REPORT_FILE
echo ------------------------------------------------------ >> $REPORT_FILE
echo -e "Check free space on backup repository:\n" >> $REPORT_FILE
echo -e "$(df -h $MOUNT_POINT)\n" >> $REPORT_FILE
echo -e "------------------------------------------------------\n\n\n" >> $REPORT_FILE
sleep 30
umount $MOUNT_POINT
SEND_RESULT="$(echo -e "$(cat ${REPORT_FILE})")"
# Send result to telegram
# Uncomment the next line to send results to telegram
# curl --silent --data "html&text=$SEND_RESULT" https://api.telegram.org/bot$TOKEN/sendMessage?chat_id=$RECIP_ID&parse_mode=
# Send result to email
# Uncomment the next line to send the results by email and replace <your_mail@yuor_domain>
# mail -s "Report $HOST - $(date +$CURRENT_DATE_FORMAT)" your_mail@yuor_domen < $REPORT_FILE
# if you want delete report file, uncomment next line
# rm -rf $REPORT_FILE #Delete log file
В результате работы скрипта будет подготовлен отчет следующего содержания:
Start check on 10.09.2019 at 14:13:30
------------------------------------------------------
Check Schedule job name: HP from Host: hp
------------------------------------------------------
Every day
At: 23:00
Run automatically: enabled
------------------------------------------------------
Check latest session Job name: HP from Host: hp
------------------------------------------------------
Backup session
ID: {555ebf40-2fb9-47cc-baf0-7192c0ae896e}
Job name: HP
Job ID: {435117d7-ace8-4009-9c51-b00e8174c252}
State: Success
Start time: 2019-09-06 22:43:19
End time: 2019-09-07 00:02:14
------------------------------------------------------
Stop check on 10.09.2019 at 14:13:30
------------------------------------------------------
Check files in backup repository:
media media
------------------------------------------------------
Check free space on backup repository:
Файловая система Размер Использовано Дост Использовано% Cмонтировано в
//share/backup 1,8T 96G 1,7T 6% /media/backup_repository
------------------------------------------------------
В зависимости от выбранного способа, отчет будет отправлен либо на почту, либо в Telegram (мой случай):
Остается добавить задачу в crontab, например, каждый день в 9 утра
0 9 * * * /scripts/check_veeam_backup.sh > /dev/null # Daily check at 9am
Теперь скрипт отрабатывает каждое утро и к моменту начала рабочего дня под рукой есть вся информация о работе агентов и доступном месте на сервере резервного копирования.
В скрипте не все гладко, особенно с именем пользователя и паролем для монтирования сетевой папки, доступ к которой есть только у специального пользователя. Но если разрешить этому пользователю только чтение, то есть явный плюс. Ваши резервные копии никогда не потрутся этим пользователем даже случайно.
Комментарии (5)
KorP
14.09.2019 15:10централизованно
Учитывая размер и подробность отчёта — получать таких десятка 2 от разных серверов каждый день — немного утомительно.
Я бы рассмотрел вариант написания скрипта, который будет ходить по Х кол-ву серверов, там смотреть состояние, проверять место и тд и формировать один отчёт по всем собранным серверам в более простом и компактном виде — это более удобно на мой взгляд.
Банально — столбец с именем сервера, ОК/Fail, кол-во свободного места. ИМХО этого достаточно для ежедневной статистики.St_Sinner Автор
14.09.2019 16:22Согласен, можно из отчета grep'ать только информацию о результате бэкапа, а отправку и вовсе привязать к неудачным РК. Можно просто писать со всех агентов в 1 лог, доступный по сети, а уже на сервере РК запускать скрипт, который этот лог прочитает и отправит куда админ велел.
Честно говоря, даже не подумал об этом. Спасибо за нужный вектор.
Nomad1
Вы сделали bash скрипт, который шлет что-то с помощью sendmail и curl GET запроса, а затем добавили его в cron? Ну ок, а в чем была проблема? Все-таки это буквально самые азы администрирования под Linux/Unix, даже не пришлось подымать отдельные службы для этого.
P.S. Прочитал первые 5 слов заголовка как существительные и подумал непонятно что.
St_Sinner Автор
Дело не в том, что бы поднять службу для мониторинга работы линуксовых агентов, а в том, что бы обойтись файлом в пару кб и при этом получить отчет. Товарищи из Veeam'a упорно не хотят делать централизованную службу сбора информации о работе агентов, которую можно поднять на линуксе. За то исправно звонят менеджеры после каждого скачивания агента с сайта и интересуются, как там дела и как проходит тестирование/внедрение.
Возможно кому либо пригодится и этот скрипт, особенно, если не требуется мониторить много серверов.