Backup and Purging Space
Optimiser le stockage: Stratégies de backup et de purge pour les équipes DevOps
Pourquoi parler de backup et purge ?
Dans un environnement DevOps, le volume de données générées (logs, artefacts, snapshots, bases de données …) explose rapidement.
- Coûts inutiles (cloud / on‑prem)
- Dégradation des performances (plus de I/O, temps de récupération)
- Risques de conformité (rétention excessive ou insuffisante)
1. Sauvegarde fiable: le golden copy automatisé
| Étape | Outils / Exemple | Bonnes pratiques |
|---|---|---|
| Planification | cron / GitHub Actions / GitLab CI |
Utiliser des jobs déclenchés à chaque merge ou chaque version stable. |
| Création d’image | docker commit, kubectl snapshot, Velero (K8s) |
Capturer l’état complet du conteneur/cluster, incluant les volumes persistants. |
| Compression | gzip, zstd, restic (--compression=auto) |
GZIP : +70 % de gain, ZSTD : meilleur ratio + vitesse. |
| Chiffrement | gpg, AWS KMS, Azure Key Vault |
Stocker les clés hors du même bucket que les backups. |
| Stockage distant | S3 (Life‑cycle), Azure Blob, Google Cloud Storage, MinIO (on‑prem) | Activer le object‑versioning et la replication multi‑région. |
| Verification | restic snapshots, Velero restore --dry-run |
Test régulier de la restaurabilité : au moins un backup par mois. |
#!/usr/bin/env bash
set -euo pipefail
# Variables
BACKUP_DIR="/var/www/myapp"
REPO="s3:s3.amazonaws.com/mybucket/backups"
PASSWORD="superSecretPass"
export RESTIC_PASSWORD=$PASSWORD
# 1️⃣ Init repository (à faire une fois)
# restic init -r $REPO
# 2️⃣ Snapshot
restic -r $REPO backup $BACKUP_DIR \
--exclude="*.log" \
--exclude="cache/**" \
--exclude="node_modules/**"
# 3️⃣ Forget + prune (conserver 7 derniers quotidiens, 4 hebdos, 12 mensuels)
restic -r $REPO forget \
--keep-daily 7 \
--keep-weekly 4 \
--keep-monthly 12 \
--prune
Astuce : intégrez ce script dans votre pipeline CI pour que chaque version tagged déclenche un backup automatisé.
2. Purge intelligente: libérer de l’espace sans perdre d’information
2.1. Lifecycle policies (S3, Azure, GCS)
| Policy | Action | Exemple de règle |
|---|---|---|
| Transition | Déplacer les objets vers des classes froides (Glacier, Archive) | Transition to GLACIER after 30 days |
| Expiration | Supprimer définitivement | Delete after 365 days |
| Non‑current version expiration | Nettoyer les anciennes versions | Delete non‑current versions after 90 days |
{
"Rules": [
{
"ID": "ArchiveOldBackups",
"Status": "Enabled",
"Filter": { "Prefix": "backups/" },
"Transitions": [{ "Days": 30, "StorageClass": "GLACIER" }],
"Expiration": { "Days": 365 }
}
]
}
2.2. Logs & métriques
-
Rotations log :
logrotateaveccompress+maxage 30. -
Metrics retention : garder les métriques détaillées 30 jours, puis agrégées 90 jours (Prometheus
--storage.tsdb.retention.time=90d). -
Nettoyage des images Docker :
docker image prune -a --filter "until=720h"(30 jours). -
Artifacts : GitLab CI
expire_in: 1 week, GitHub Actionsretain-days: 30.
2.4. Base de données
- TTL sur les collections TTL (MongoDB) ou
DROP PARTITIONsur les tables temporelles (PostgreSQL). - Vacuum automatisé pour PostgreSQL :
VACUUM (FULL, ANALYZE)une fois par semaine.
| Outil | Métrique clé | Alert |
|---|---|---|
| Prometheus | backup_success_total, backup_duration_seconds |
Alerte si backup_success_total = 0 sur 24 h |
| Grafana | Disk usage % | Warning at 70 %, Critical at 85 % |
| PagerDuty / Opsgenie | purge_job_failed |
Escalade immédiate |
Dashboard example (Grafana)
- Graphique : espace disque (GB) vs. seuil (80 %).
- Table : dernières sauvegardes, statut, taille.
- Choisir un backend : S3 bucket + IAM read/write.
- Déployer Restic :
docker run -v $(pwd):/data -e RESTIC_PASSWORD=… restic/restic backup /data. - Créer une policy de cycle de vie sur le bucket (transition → archive, expiration).
- Automatiser la purge des logs avec
logrotate. - Configurer Grafana avec le datasource Prometheus pour surveiller
node_filesystem_avail_bytes.
5. Checklist finale
- Sauvegardes chiffrées et testées (restore dry‑run).
- Policies de lifecycle appliquées sur le stockage objet.
- Logs, artefacts et images Docker purgeés régulièrement.
- Alerting en place pour les échecs de backup et dépassements de quota.
- Documentation versionnée dans votre repo (exemple :
docs/backup-purge.md).
Conclusion
Un pipeline de backup + purge intégré au workflow DevOps transforme le “stockage illimité” en coût maîtrisé et résilience. En codifiant ces bonnes pratiques (scripts, policies, dashboards) vous offrez à votre équipe la tranquillité d’esprit : les données critiques sont toujours récupérables, le reste est automatiquement nettoyé.
À vous de jouer ! Implémentez ces recommandations dès aujourd’hui, partagez votre expérience dans les commentaires, et inspirons la communauté DevOps à garder leurs environnements légers et fiables. 🙌