Les sauvegardes ne sont utiles que si elles s'exécutent réellement. Trop d'organisations découvrent que leur sauvegarde a échoué uniquement quand elles doivent restaurer. Voici comment configurer un monitoring fiable pour tous vos jobs de sauvegarde.
Le Problème du Monitoring de Sauvegardes
Les échecs de sauvegarde sont particulièrement dangereux car :
- Ils sont silencieux - Aucun utilisateur ne remarque quand une sauvegarde ne s'exécute pas
- Ils sont peu fréquents - Les jobs quotidiens ou hebdomadaires sont faciles à oublier
- Ils sont critiques - Découverts trop tard, les conséquences sont graves
- Ils sont supposés - "La sauvegarde s'exécute chaque nuit... non ?"
Sans monitoring, les échecs de sauvegarde passent inaperçus pendant des jours, des semaines, ou jusqu'à ce qu'un désastre frappe.
Quoi Monitorer
Completion de la Sauvegarde
Le job de sauvegarde s'est-il terminé avec succès ?
#!/bin/bash
pg_dump database > backup.sql
if [ $? -eq 0 ]; then
curl https://wizstatus.com/ping/backup-complete
fi
Validité du Fichier de Sauvegarde
A-t-il réellement produit une sauvegarde valide ?
# Vérifier que le fichier existe et a une taille
if [ -s backup.sql ] && [ $(stat -f%z backup.sql) -gt 1000 ]; then
curl https://wizstatus.com/ping/backup-valid
fi
Durée de la Sauvegarde
Prend-elle plus longtemps que prévu ?
START=$(date +%s)
pg_dump database > backup.sql
END=$(date +%s)
DURATION=$((END - START))
curl "https://wizstatus.com/ping/backup?duration=$DURATION"
Monitoring de Sauvegardes BDD
PostgreSQL
#!/bin/bash
# postgres-backup.sh
BACKUP_DIR="/backup/postgres"
DATE=$(date +%Y%m%d)
BACKUP_FILE="$BACKUP_DIR/prod-$DATE.sql.gz"
# Créer la sauvegarde
pg_dump production | gzip > "$BACKUP_FILE"
# Vérifier
if [ $? -eq 0 ] && [ -s "$BACKUP_FILE" ]; then
# Tester l'intégrité de la sauvegarde
gunzip -t "$BACKUP_FILE"
if [ $? -eq 0 ]; then
curl -fsS https://wizstatus.com/ping/postgres-backup
fi
fi
MySQL/MariaDB
#!/bin/bash
# mysql-backup.sh
mysqldump --all-databases | gzip > /backup/mysql-$(date +%Y%m%d).sql.gz
if [ ${PIPESTATUS[0]} -eq 0 ] && [ -s /backup/mysql-$(date +%Y%m%d).sql.gz ]; then
curl -fsS https://wizstatus.com/ping/mysql-backup
fi
Vérification Au-delà du Monitoring
Le monitoring confirme que le job s'est exécuté. Vérifiez aussi :
Tests de Restauration
Restaurez périodiquement les sauvegardes pour vérifier qu'elles fonctionnent :
#!/bin/bash
# Test de restauration mensuel
createdb test_restore
pg_restore -d test_restore /backup/latest.dump
if [ $? -eq 0 ]; then
# Exécuter quelques requêtes de validation
psql -d test_restore -c "SELECT count(*) FROM users"
dropdb test_restore
curl https://wizstatus.com/ping/restore-test
fi
Bonnes Pratiques
1. Pingez Uniquement en Cas de Succès Vérifié
Ne vérifiez pas seulement le code de sortie. Validez la sauvegarde :
- Le fichier existe
- Le fichier a une taille raisonnable
- Le fichier passe le test d'intégrité (gunzip -t, etc.)
2. Conservez les Logs de Sauvegarde
exec > /var/log/backup-$(date +%Y%m%d).log 2>&1
# Toute la sortie va dans le log
3. Alertez sur les Durées Longues
Si la sauvegarde prend habituellement 30 minutes mais dure 3 heures, enquêtez.
4. Séparez les Environnements
Les sauvegardes de production et staging devraient avoir des moniteurs séparés.
Checklist de Monitoring
- Toutes les bases de données ont un monitoring de sauvegarde
- Toutes les sauvegardes de fichiers ont un monitoring
- Les moniteurs heartbeat correspondent aux plannings de sauvegarde
- Les périodes de grâce prennent en compte la durée de sauvegarde
- Les alertes critiques vont à l'astreinte
- Les tests de restauration mensuels sont planifiés
- Les logs de sauvegarde sont conservés
- L'espace disque est monitoré séparément