Back to Linktree

Backup and Purging Space

March 8, 2026 4 min read
#tech #ai

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.

  1. Coûts inutiles (cloud / on‑prem)
  2. Dégradation des performances (plus de I/O, temps de récupération)
  3. 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 : logrotate avec compress + 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 Actions retain-days: 30.

2.4. Base de données

  • TTL sur les collections TTL (MongoDB) ou DROP PARTITION sur 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.
  1. Choisir un backend : S3 bucket + IAM read/write.
  2. Déployer Restic : docker run -v $(pwd):/data -e RESTIC_PASSWORD=… restic/restic backup /data.
  3. Créer une policy de cycle de vie sur le bucket (transition → archive, expiration).
  4. Automatiser la purge des logs avec logrotate.
  5. 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. 🙌