Enviamos relatórios do agente Veeam Linux para o correio ou no Telegram

Saudações, Habr!

Mais recentemente, a empresa em que trabalho começou a oferecer o Veeam como a principal ferramenta de backup. E tudo ficaria bem, mas mesmo no processo de familiarização, aconteceu o seguinte:

  • As ferramentas da Veeam são aprimoradas no Windows, incluindo a implantação de um repositório centralizado;
  • no Linux, existe apenas um agente Veeam;

Com base nisso, verifica-se que, se a organização usar apenas Linux, você não verá nenhum relatório. Ou compramos e instalamos o Windows, e já nele instalamos e configuramos tudo o que é necessário e a partir daí obtemos informações completas sobre os resultados do agente Veeam (Linux). Ou vamos a cada carro e vemos como foi o próximo "dia útil" do agente.

E chegou o dia em que havia uma pequena organização que usa apenas Linux e que realmente precisa fazer backups e, de preferência, de graça. Mas diariamente para monitorar como o agente trabalhava lá, quero centralmente, em vez de ataques maciços em servidores.

Para resolver esse problema, tive que ir às Perguntas frequentes no site da Veeam e ler o que podemos obter usando o console e os comandos disponíveis do agente veeam. A partir da leitura, nasceu um pequeno script do Bash que analisa o resultado da última tarefa e um espaço livre em uma pasta de rede projetada para armazenar backups.
Na verdade, quero compartilhar esse script. Eu aviso imediatamente, não sou bom em scripts, portanto críticas e sugestões são bem-vindas.

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 


Como resultado do script, um relatório será preparado da seguinte maneira:

 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 ------------------------------------------------------ 

Dependendo do método escolhido, o relatório será enviado por correio ou por telegrama (meu caso):



Resta adicionar a tarefa ao crontab, por exemplo, todos os dias às 9h.

0 9 * * * / scripts / check_veeam_backup.sh> / dev / null # Verificação diária às 9h

Agora, o script é executado todas as manhãs e, quando o dia de trabalho começa, todas as informações sobre o trabalho dos agentes e o espaço disponível no servidor de backup estão disponíveis.

O script não está indo bem, especialmente com um nome de usuário e senha para montar uma pasta de rede, acesso ao qual apenas um usuário especial tem acesso. Mas se você permitir que este usuário leia apenas, haverá uma vantagem clara. Seus backups nunca serão esfregados por esse usuário, mesmo que por acidente.

Source: https://habr.com/ru/post/pt467435/


All Articles