Шлем отчеты Veeam agent Linux на почту или в Telegram

в 11:19, , рубрики: linux bash scripts, veeam agent for Linux

Приветствую, Habr!

Относительно недавно компания, в которой я работаю, начала предлагать 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 "------------------------------------------------------nnn" >> $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 (мой случай):

Шлем отчеты Veeam agent Linux на почту или в Telegram - 1

Остается добавить задачу в crontab, например, каждый день в 9 утра

0 9 * * * /scripts/check_veeam_backup.sh > /dev/null # Daily check at 9am

Теперь скрипт отрабатывает каждое утро и к моменту начала рабочего дня под рукой есть вся информация о работе агентов и доступном месте на сервере резервного копирования.

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

Автор: Вячеслав

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js