Superviser les sauvegardes : Borg, InfluxDB et Grafana

dim. 01 nov. 2020 by Marmotte

Sauvegarder ses données est essentiel pour éviter autant que possible les risques de les perdre. Cependant, mettre en place un processus de création de sauvegardes ne suffit pas, il est aussi nécessaire de surveiller qu'elles sont bien réalisées.

Dans de précédents articles, j'ai présenté Borg, que j'utilise pour réaliser les sauvegardes de mes machines, ainsi que InfluxDB et Grafana, pour leur supervision. Cet article décrit la manière dont je surveille l'exécution de mes sauvegardes, afin de m'assurer qu'elles sont correctement réalisées.

Éléments à surveiller

Lors de la mise en place d'une supervision, il est nécessaire de définir les éléments à surveiller, ainsi que les diverses alertes qu'on voudra mettre en place. Pour mes sauvegardes, je conserve les statistiques de chaque sauvegarde après sa création, afin de pouvoir suivre l'évolution des volumétries et durées.

Deux alertes sont alors mises en place :

  • Absence de sauvegarde pendant une journée complète.
  • Différence d'au moins 5% sur la taille totale des données sauvegardées pendant les dernières 24h.

En plus d'être alerté lors d'un dysfonctionnement, cela me permet aussi de suivre l'évolution des exécutions. J'ai ainsi pu vérifier que la réalisation des sauvegardes était plus légèrement rapide lors du changement de méthode de compression (de zlib vers zstd), sans autre impact.

Collecte des informations

Afin de collecter les statistiques de chaque sauvegarde, j'ai ajouté une commande à la fin du script qui les réalise :

/usr/bin/borg info --json --last 1 $BORG_REPO | /usr/bin/curl --request POST --header "Content-Type: application/json" --data @- http://monitoring-server:5000/backup

Cette commande récupère les informations de la dernière sauvegarde au format json, et les envoie à un webservice que j'ai développé en python. Celui-ci se charge alors d'en extraire les données intéressantes, et de les envoyer dans InfluxDB.

Le code est disponible sur Framagit, et même s'il nécessiterait d'être amélioré (valeurs en dur principalement), il fonctionne correctement.

Affichage des informations

Comme pour toutes les données stockées dans InfluxDB, j'ai créé un dashboard dans Grafana me permettant de les afficher. Le fichier json de ce dashboard est disponible ici.

Backup Stats

Alerte lors de l'échec d'une sauvegarde

En plus de cette collecte de statistiques, mon script de sauvegarde envoie aussi un email contenant le log d'exécution de la sauvegarde. Un filtre dans mon client email me permet alors de le ranger automatiquement lorsque celui-ci correspond à une exécution réussie, et le laisse non-lu dans la boite de réception lorsqu'il s'agit d'un échec.

echo -e "Subject: Backup $SERVICE_RESULT ($EXIT_CODE, $EXIT_STATUS) for %H (%n)\nContent-Type: text/plain; charset=\"utf-8\"\n\n$(journalctl _SYSTEMD_INVOCATION_ID=$INVOCATION_ID --output cat)" | msmtp -a backup recipient@example.com

Note : L'exécution de mes sauvegardes étant réalisée dans un service systemd, les variables que j'utilise sont celles disponibles dans un tel contexte. Avec cette configuration, les savegardes réussies correspondent aux emails ne contenant pas success ni exited, 1 (simples warnings) dans le sujet.