RousselTMLEARNING

Article · SRE in practice: SLIs, SLOs and error budgets

Chaos engineering: principles, tools and practice

This article is available in French.

1. Qu'est-ce que le chaos engineering ? #

Définition, origine et objectifs.

Définition #

Le chaos engineering est la discipline qui consiste à expérimenter sur un système pour gagner en confiance dans sa capacité à supporter des conditions turbulentes en production. Il ne s'agit pas de « casser au hasard », mais de mener des expériences contrôlées, guidées par une hypothèse, pour découvrir les faiblesses avant qu'elles ne provoquent un incident.

La pratique est née chez Netflix vers 2010 avec Chaos Monkey, qui arrêtait aléatoirement des instances en production pour obliger les équipes à concevoir des services tolérants aux pannes. Les principes ont été formalisés sur principlesofchaos.org.

Pourquoi en faire ? #

  • Vérifier que les mécanismes de résilience (redondance, bascule, retries, timeouts, disjoncteurs) fonctionnent vraiment.
  • Découvrir des dépendances cachées et des modes de défaillance inattendus.
  • Réduire le temps de détection et de rétablissement en entraînant les équipes.
  • Valider les alertes, les tableaux de bord et les procédures (runbooks).
  • Construire une culture où la défaillance est attendue et étudiée.
À savoir : Une bascule de secours jamais testée échoue souvent le jour où l'on en a besoin. Le chaos engineering transforme l'espoir en preuve.

2. Les principes d'une expérience #

Régime permanent, hypothèse, rayon d'impact.

Les cinq principes #

  1. Définir le régime permanent : une mesure du comportement normal visible par les utilisateurs, en pratique un SLI (taux de succès, latence p99, commandes par minute).
  2. Formuler une hypothèse : « le régime permanent se maintient dans le groupe expérimental comme dans le groupe de contrôle ».
  3. Introduire des événements réels : pannes de serveurs, latence réseau, saturation, erreurs de dépendances.
  4. Expérimenter en production quand c'est possible, car le trafic et l'environnement réels révèlent ce que les tests ne montrent pas.
  5. Automatiser et exécuter en continu, en minimisant le rayon d'impact.
Boucle d'une expérience de chaos
Chaque expérience suit la même boucle ; un arrêt d'urgence interrompt l'injection si le SLO se dégrade.

Maîtriser le rayon d'impact #

Commencez petit : un pod, une instance, un faible pourcentage de trafic, en préproduction puis en production. Définissez à l'avance les conditions d'arrêt (le SLI passe sous un seuil, une alerte critique se déclenche) et un moyen d'annuler immédiatement l'injection.

Rayon d'impact d'une expérience de chaos
Du pod à l'ensemble des utilisateurs : on n'élargit le périmètre qu'une fois l'étape précédente maîtrisée.
Erreur courante : Lancer une expérience sans observabilité ni conditions d'arrêt, c'est provoquer un incident, pas une expérience.

3. Chaos engineering et SRE #

SLO, budget d'erreur et apprentissage.

S'appuyer sur les SLO #

Le SRE fournit le cadre idéal : les SLI définissent le régime permanent, les SLO fixent le seuil d'arrêt et le budget d'erreur indique combien d'indisponibilité l'équipe peut se permettre. Certaines équipes réservent explicitement une part du budget aux expériences : tant qu'il reste du budget, on expérimente ; s'il est épuisé, on fige les expériences risquées comme les mises en production.

Notion SRERôle dans le chaos engineering
SLIMesure du régime permanent pendant l'expérience
SLOLimite au-delà de laquelle l'expérience est arrêtée
Budget d'erreurAutorise ou suspend les expériences selon la consommation
Alertes burn rateDoivent se déclencher si l'injection dégrade réellement le service
Post-mortem sans blâmeFormat de restitution des enseignements de l'expérience
SLI pendant une expérience de chaos
En vert, le service résiste : le SLI reste au-dessus du SLO pendant l'injection. En pointillés, l'hypothèse est réfutée : le SLI franchit la condition d'arrêt et l'injection est annulée.
Décider des expériences avec le budget d'erreur
Exemple de politique : plus il reste de budget d'erreur, plus le rayon d'impact autorisé est large.

Ce que l'on apprend #

Une expérience réussie n'est pas celle qui ne casse rien : c'est celle qui apprend quelque chose. Si l'hypothèse est réfutée, documentez la faiblesse, priorisez la correction, puis rejouez l'expérience pour vérifier.

4. Quelles pannes injecter ? #

Catalogue des défaillances réalistes.

Types de pannes #

CatégorieExemplesCe que l'on vérifie
InfrastructureArrêt d'une instance, d'un nœud, d'une zoneRedondance, auto-réparation, bascule
ConteneursSuppression de pods, redémarrages en boucleRéplicas, probes, PodDisruptionBudget
RéseauLatence, perte de paquets, coupure, DNS en échecTimeouts, retries, disjoncteurs
RessourcesSaturation CPU, mémoire, disqueLimites, autoscaling, dégradation progressive
DépendancesBase de données lente, API tierce en erreur 5xxCache, mode dégradé, files d'attente
Horloge et étatDécalage d'horloge, certificat expiréRobustesse des contrôles de validité
Humaines et processusAbsence d'une personne clé, procédure manquanteDocumentation, astreinte, runbooks
Catalogue des pannes à injecter
Sept familles de pannes à explorer autour d'un service, en commençant par celles qui ont déjà causé des incidents.

5. Les outils #

Comparatif des principaux outils.

Panorama #

OutilTypePoints forts
Chaos MeshOpen source (CNCF), KubernetesRessources PodChaos, NetworkChaos, StressChaos, IOChaos ; tableau de bord ; workflows
LitmusChaosOpen source (CNCF), KubernetesChaosHub d'expériences prêtes à l'emploi, sondes de validation
Chaos ToolkitOpen source, multi-plateformeExpériences déclaratives en JSON/YAML, extensions cloud et Kubernetes
AWS Fault Injection ServiceService managé AWSModèles d’expériences sur EC2, ECS, EKS, RDS ; conditions d’arrêt CloudWatch
Azure Chaos StudioService managé AzurePannes de VM, AKS, réseau ; expériences planifiées
Gremlin, SteadybitPlateformes commercialesBibliothèque de scénarios, garde-fous, rapports
ToxiproxyProxy de testLatence et coupures entre une application et ses dépendances, idéal en tests d’intégration
Chaos MonkeyNetflix (Spinnaker)Arrêt aléatoire d’instances, historique de la discipline
Positionnement des outils de chaos engineering
Pour Kubernetes, Chaos Mesh et LitmusChaos sont les références open source ; les services managés des clouds et les plateformes commerciales couvrent aussi VM et services managés.

6. Mise en pratique sur Kubernetes #

Chaos Mesh et Chaos Toolkit pas à pas.

Installer Chaos Mesh #

helm repo add chaos-mesh https://charts.chaos-mesh.org
helm install chaos-mesh chaos-mesh/chaos-mesh -n chaos-mesh --create-namespace \
  --set chaosDaemon.runtime=containerd --set chaosDaemon.socketPath=/run/containerd/containerd.sock
kubectl get pods -n chaos-mesh
Architecture de Chaos Mesh
Le Controller Manager transforme les ressources de chaos en actions exécutées par le Chaos Daemon présent sur chaque nœud ; l'observabilité sert à décider d'un arrêt.

Expérience 1 : supprimer un pod #

Hypothèse : avec trois réplicas et une readiness probe, la suppression d'un pod de l'API ne fait pas baisser le taux de succès sous 99,9 %.

apiVersion: chaos-mesh.org/v1alpha1
kind: PodChaos
metadata: { name: api-pod-kill, namespace: boutique }
spec:
  action: pod-kill
  mode: one                 # un seul pod : rayon d'impact minimal
  selector:
    namespaces: [boutique]
    labelSelectors: { app: api }
kubectl apply -f api-pod-kill.yaml
kubectl get pods -n boutique -l app=api -w     # un pod est recréé
kubectl delete -f api-pod-kill.yaml             # fin de l'expérience
Expérience PodChaos dans le terminal
Un des trois pods est supprimé puis recréé par le Deployment pendant que le SLI reste stable.

Expérience 2 : ajouter de la latence réseau #

Hypothèse : si la base de données répond 200 ms plus lentement, le p99 de l'API reste sous 800 ms grâce au cache.

apiVersion: chaos-mesh.org/v1alpha1
kind: NetworkChaos
metadata: { name: db-latence, namespace: boutique }
spec:
  action: delay
  mode: all
  selector: { namespaces: [boutique], labelSelectors: { app: postgres } }
  delay: { latency: 200ms, jitter: 20ms }
  duration: 5m
Bonne Pratique : Observez pendant l'expérience le SLI de latence, les traces de l'API et le déclenchement (ou non) des alertes burn rate : une alerte qui ne se déclenche pas alors que les utilisateurs souffrent est aussi un enseignement.

Une expérience déclarative avec Chaos Toolkit #

{
  "title": "L'API tolère la perte d'un pod",
  "steady-state-hypothesis": {
    "title": "L'API répond",
    "probes": [{ "type": "probe", "name": "api-ok", "tolerance": 200,
                 "provider": { "type": "http", "url": "https://api.exemple.fr/healthz" } }]
  },
  "method": [{ "type": "action", "name": "supprimer-un-pod",
               "provider": { "type": "python", "module": "chaosk8s.pod.actions",
                             "func": "terminate_pods",
                             "arguments": { "label_selector": "app=api", "ns": "boutique", "qty": 1 } } }],
  "rollbacks": []
}
pip install chaostoolkit chaostoolkit-kubernetes
chaos run experience.json      # vérifie l'hypothèse avant et après l'injection

7. Organiser des game days #

Préparer, animer, restituer.

Déroulé d'un game day #

  1. Préparer : choisir un scénario réaliste, l'hypothèse, les participants (équipes concernées, astreinte), les conditions d'arrêt et la communication.
  2. Exécuter : un animateur injecte la panne, les équipes détectent et réagissent comme en incident réel.
  3. Observer : noter le temps de détection, de diagnostic et de rétablissement, les alertes reçues ou manquantes.
  4. Restituer : post-mortem sans blâme, actions correctives avec responsables et échéances.
  5. Rejouer plus tard pour vérifier les corrections.
Déroulé d'un game day
Les cinq temps d'un game day, de la préparation jusqu'à la vérification des corrections.
Progression d'une démarche de chaos engineering
Commencez par les prérequis et les expériences en préproduction avant d'expérimenter en continu en production.

Pièges à éviter #

  • Expérimenter sans observabilité ni SLO : impossible de savoir si l'hypothèse tient.
  • Commencer par une panne de grande ampleur en production.
  • Ne pas prévenir les équipes et le support lors des premières expériences.
  • Ne pas suivre les actions correctives : les mêmes faiblesses réapparaissent.
  • Confondre chaos engineering et tests de charge : les deux sont complémentaires.
Bonne Pratique : Intégrez progressivement des expériences automatisées dans la chaîne CI/CD (préproduction) : chaque version est ainsi vérifiée face aux pannes connues.

📄 Chaos engineering : principes, outils et mise en pratique avec les SLO →

My progress

  • ⏱ Estimated time : ≈ 16 min

Sign in to track your progress and take notes. Sign in

💬 Ask a question

Recommended Articles

SRE : SLI, SLO et SLA expliqués simplement

Les fondamentaux de l'ingénierie de la fiabilité (SRE) : différence entre SLI, SLO et SLA, choix ...

Le budget d'erreur : décider avec les SLO

Calculer et suivre un budget d'erreur, rédiger une politique de budget d'erreur et l'utiliser pou...

Bonnes pratiques SRE : SLO utiles et budgets respectés

Check-list pour mettre en place des SLO qui servent : choix des parcours utilisateurs, objectifs ...

Alertes sur le taux de consommation du budget (burn rate multi-fenêtres)

Pourquoi alerter sur le burn rate plutôt que sur un seuil, et comment construire les alertes mult...

Piloter ses SLO avec Pyrra

Pyrra : définir des SLO de disponibilité et de latence en CRD Kubernetes ou en fichiers, générer ...

Les variantes du DevOps : Comprendre l'évolution de la culture de l'ingénierie

Découvrez les différentes déclinaisons du DevOps : DevSecOps, AIOps, NoOps, GitOps et FinOps. Com...

Observabilité, SRE et gestion des incidents pour les équipes DevOps

Exploiter ce que l'on livre : métriques, logs et traces, golden signals, SLI, SLO et budgets d'er...

Générer ses SLO Prometheus avec Sloth

Décrire un SLO en quelques lignes avec Sloth et générer automatiquement règles d'enregistrement m...

Mesurer des SLI avec Prometheus

Implémenter des SLI de disponibilité et de latence avec Prometheus : métriques nécessaires, requê...

Support us

♥ SUPPORT US

Support RousselTM Learning

Courses, articles, labs and certificates stay free with no intrusive ads. A voluntary contribution, of any amount you choose, pays for hosting, lab environments and new content.

Contribute with PayPal Any amount · card or PayPal accountLearn more
QR code PayPal
Or scan this QR code with your phone

Thank you, every contribution counts!