Уведомления Veeam Agent for Linux по почте или в телегу

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

А значит решено, пришло время автоматизировать.

Статья написана для дистрибутивов на базе Debian\Ubuntu, однако на RHEL всё будет примерно тоже самое, разница только в пакетном менеджере и именах самих пакетов.
Первое что нам надо будет сделать — научить машину отправлять email, с этим нам поможет postfix

Второе — сделать скрипт, который будет выполняться после задания и отправлять уведомления.
( Честно, скрипт стырил с хабра, ссылку скину).Для меня важно было, что бы постфикс слал письма с ящика на яндексе, так что настройки будут применимы к нему, однако не думаю что возникнут трудности и при настройке на другом почтовом хостере.

1) И так, первое — устанавливаем и настраиваем postfix

# устанавливаем postfix
apt-get install postfix
Во время установки будут заданы вопросы — я отвечаю, без конфигурации. Лично мне так проще.

# копируем дефолтный конфиг файл для работы

cp /usr/share/postfix/main.cf.debian /etc/postfix/main.cf

# и добавляем в него следующие строки
nano /etc/postfix/main.cf

relayhost =
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_sasl_type = cyrus
smtp_sasl_mechanism_filter = login
smtp_sender_dependent_authentication = yes
sender_dependent_relayhost_maps = hash:/etc/postfix/sender_relay
sender_canonical_maps = hash:/etc/postfix/canonical
smtp_generic_maps = hash:/etc/postfix/generic
# Яндекс не принимает plain-text сообщений, только зашифрованные
smtp_use_tls = yes

# в приведенных ниже конфиг файлах домен нужно поменять на свой (если вы хоститесь на яндексе под другим доменом)
# сохраняем и создаем нужные конфиг файлы:
# не забывайте менять [email protected] на вашу почту
# а urepass на пароль вашей почты
echo "@yandex.ru [email protected]" > /etc/postfix/canonical
echo "root@localhost [email protected]" > /etc/postfix/generic
echo "smtp.yandex.ru [email protected]:urepass" > /etc/postfix/sasl_passwd
echo "@yandex.ru smtp.yandex.ru" > /etc/postfix/sender_relay

# переводим конфиги в понятный постфиксу вариант:
postmap /etc/postfix/canonical
postmap /etc/postfix/generic
postmap /etc/postfix/sasl_passwd
postmap /etc/postfix/sender_relay

# перехагружаем постфикс
service postfix restart

# так же нам понадобится mailutils для работы с почтой
apt-get install mailutils

# После этого проверяем отправку почты:
echo "Test sender" | mail -s "Test mail from Yandex Relay" [email protected]

Смотрим лог отправки почты — там уже должно всё работать (во всяком случае у меня нигде с этим не было проблем)

В целом всё, отправлять почту сервак мы научили.
Осталось сделать скрипт и научить отправлять отчёт:

Скрипт взят из статьи на хабре, спасибо
@St_Sinner за него, сам бы наверное долго такое писал.
ссылка на статью

Этап 2 — скрипт:

# Создаем скрипт для проверки выполнения заданий:
nano check_veeam.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=" "
# указать точку монтирования, обычно /mnt
MOUNT_POINT=" "
# указать имя пользователя от которого монтируется, обычно backuper
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

После создание скрипта делаем его исполняемым и добавляем в крон

chmod 777 check_veeam.sh

# и собственно сам крон

crontab -e

Я добавлял +2-4 часа после старта задания ( в среднем на мои сервера этого достаточно, а т.к. бэкапятся они в периоде между 23:00 и 8:00 для меня удобней так, чем просто стабильно по утрам)

Вот и всё. Если есть вопросы или нарекания — пишите.

Оставьте первый комментарий

Отправить ответ

Ваш e-mail не будет опубликован.


*