Nous envoyons les rapports de l'agent Veeam Linux par courrier ou par télégramme

Salutations, Habr!

Plus récemment, la société pour laquelle je travaille a commencé à proposer Veeam comme principal outil de sauvegarde. Et tout irait bien, mais même en cours de familiarisation, il s'est avéré ce qui suit:

  • Les outils Veeam sont affinés sous Windows, notamment le déploiement d'un référentiel centralisé;
  • sous Linux, il n'y a qu'un agent Veeam;

Sur cette base, il s'avère que si l'organisation utilise uniquement Linux, vous ne verrez aucun rapport. Ou nous achetons et installons Windows, et nous y installons et configurons déjà tout ce qui est nécessaire, et à partir de là, nous obtenons des informations complètes sur les résultats de l'agent Veeam (Linux). Ou nous allons à chaque voiture et voyons comment la prochaine "journée de travail" de l'agent s'y est rendue.

Et puis est venu le jour où il y avait une petite organisation qui n'utilise que Linux et qui a vraiment besoin de faire des sauvegardes et de préférence gratuitement. Mais quotidiennement pour surveiller le fonctionnement de l'agent là-bas, je souhaite centraliser, plutôt que des raids massifs sur les serveurs.

Pour résoudre ce problème, j'ai dû aller à la FAQ sur le site Web de Veeam et lire ce que nous pouvons obtenir en utilisant la console et les commandes d'agent veeam disponibles. De la lecture, un petit script Bash est né qui regarde le résultat de la dernière tâche, et pour un espace libre dans un dossier réseau conçu pour stocker des sauvegardes.
En fait, je veux partager ce script. Je vous préviens tout de suite, je ne suis pas bon en script, donc les critiques et suggestions sont les bienvenues.

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 


À la suite du script, un rapport sera préparé comme suit:

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

Selon la méthode choisie, le rapport sera envoyé soit par courrier soit par Télégramme (mon cas):



Il reste à ajouter la tâche à crontab, par exemple, tous les jours à 9 heures.

0 9 * * * / scripts / check_veeam_backup.sh> / dev / null # Contrôle quotidien à 9h

Maintenant, le script s'exécute chaque matin et au moment où la journée de travail commence, toutes les informations sur le travail des agents et l'espace disponible sur le serveur de sauvegarde sont à portée de main.

Le script ne se déroule pas correctement, en particulier avec un nom d'utilisateur et un mot de passe pour monter un dossier réseau, accès auquel seul un utilisateur spécial a accès. Mais si vous autorisez cet utilisateur à lire uniquement, il y a un avantage clair. Vos sauvegardes ne seront jamais effacées par cet utilisateur, même par accident.

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


All Articles