Приветствую, 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 "------------------------------------------------------\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)


  1. Nomad1
    14.09.2019 15:01
    +1

    Вы сделали bash скрипт, который шлет что-то с помощью sendmail и curl GET запроса, а затем добавили его в cron? Ну ок, а в чем была проблема? Все-таки это буквально самые азы администрирования под Linux/Unix, даже не пришлось подымать отдельные службы для этого.

    P.S. Прочитал первые 5 слов заголовка как существительные и подумал непонятно что.


    1. St_Sinner Автор
      14.09.2019 16:11

      Дело не в том, что бы поднять службу для мониторинга работы линуксовых агентов, а в том, что бы обойтись файлом в пару кб и при этом получить отчет. Товарищи из Veeam'a упорно не хотят делать централизованную службу сбора информации о работе агентов, которую можно поднять на линуксе. За то исправно звонят менеджеры после каждого скачивания агента с сайта и интересуются, как там дела и как проходит тестирование/внедрение.

      Возможно кому либо пригодится и этот скрипт, особенно, если не требуется мониторить много серверов.


  1. KorP
    14.09.2019 15:10

    централизованно

    Учитывая размер и подробность отчёта — получать таких десятка 2 от разных серверов каждый день — немного утомительно.
    Я бы рассмотрел вариант написания скрипта, который будет ходить по Х кол-ву серверов, там смотреть состояние, проверять место и тд и формировать один отчёт по всем собранным серверам в более простом и компактном виде — это более удобно на мой взгляд.
    Банально — столбец с именем сервера, ОК/Fail, кол-во свободного места. ИМХО этого достаточно для ежедневной статистики.


    1. St_Sinner Автор
      14.09.2019 16:22

      Согласен, можно из отчета grep'ать только информацию о результате бэкапа, а отправку и вовсе привязать к неудачным РК. Можно просто писать со всех агентов в 1 лог, доступный по сети, а уже на сервере РК запускать скрипт, который этот лог прочитает и отправит куда админ велел.
      Честно говоря, даже не подумал об этом. Спасибо за нужный вектор.


      1. KorP
        14.09.2019 17:15

        Коллеги тут кинули линк на статью
        habr.com/ru/company/veeam/blog/432404