🧪 Tests

testing-chaos-engineering-guide

Principes et outils de chaos engineering pour tester la résilience des systèmes distribués, incluant fault injection, game days, blast radius, et intégration CI/CD.

⚡ Installation & lancement en 1 commande

Copiez-collez dans votre terminal : le skill s'installe dans ~/.claude/skills et Claude Code se lance directement dessus.

macOS / Linux
curl -fsSL https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.sh | sh -s -- testing-chaos-engineering-guide --launch
Windows (PowerShell)
iex "& { $(iwr -useb https://raw.githubusercontent.com/khalilbenaz/claude-skills-collection/main/install.ps1) } testing-chaos-engineering-guide -Launch"

🚀 Déjà installé ?

claude "/testing-chaos-engineering-guide"

Ou tapez /testing-chaos-engineering-guide dans une session Claude Code, ou décrivez simplement votre besoin — le skill se déclenche automatiquement via le skill-router.

🔑 Déclencheurs automatiques

Le skill s'active automatiquement quand votre demande contient :

chaos engineeringChaos Monkeyfault injectionrésilienceLitmus

📦 Installation manuelle

git clone https://github.com/khalilbenaz/claude-skills-collection.git cp -r claude-skills-collection/skills/testing-chaos-engineering-guide ~/.claude/skills/

Payload du plugin : skills/testing-chaos-engineering-guide · source éditable : testing-skills/chaos-engineering-guide

📖 Manuel

Chaos Engineering Guide

Workflow

1. Définir l'état stable (baseline)

Avant toute expérience, établir les métriques qui définissent le "normal" :

MétriqueSourceSeuil d'alerte
p99 latencyPrometheus/Grafana< 500 ms
Error rateAPM (Datadog/New Relic)< 0.1 %
Throughput (req/s)Load balancer logs> 1 000 req/s
AvailabilityHealthcheck endpoint> 99.9 %

Documenter la baseline avec des captures Grafana datées avant l'expérience.


2. Formuler une hypothèse testable

Format : "Si [condition de chaos], alors [comportement attendu] en [délai max], sans [impact inacceptable]."

Exemples :


3. Choisir l'outil adapté

ContexteOutilInstallation
KubernetesLitmus Chaoshelm install litmuschaos litmuschaos/litmus
AWS EC2/ECSAWS Fault Injection Simulator (FIS)Console AWS ou CLI
Réseau (latence/perte)Toxiproxydocker run -d -p 8474:8474 shopify/toxiproxy
Microservices génériquesGremlinSaaS, agent installé sur le host
Process kill (Linux)kill / stress-ngNatif
Service meshIstio fault injectionConfig YAML sur VirtualService

Critère de choix : Kubernetes → Litmus ; AWS managed → FIS ; test réseau isolé → Toxiproxy ; budget SaaS → Gremlin.


4. Concevoir l'expérience

Composants d'une expérience :

Exemple Litmus (pod kill) :

apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine
metadata:
  name: pod-kill-test
  namespace: default
spec:
  appinfo:
    appns: production
    applabel: "app=payment-service"
    appkind: deployment
  chaosServiceAccount: litmus-admin
  experiments:
    - name: pod-delete
      spec:
        components:
          env:
            - name: TOTAL_CHAOS_DURATION
              value: "30"
            - name: CHAOS_INTERVAL
              value: "10"
            - name: FORCE
              value: "false"

Exemple Toxiproxy (latence réseau) :

# Créer un proxy vers la DB
toxiproxy-cli create --listen 0.0.0.0:5433 --upstream db:5432 db-proxy

# Ajouter 300 ms de latence
toxiproxy-cli toxic add db-proxy -t latency -a latency=300 -a jitter=50

# Supprimer après le test
toxiproxy-cli toxic remove db-proxy -n latency_downstream

Exemple Istio (fault injection HTTP) :

apiVersion: networking.istio.io/v1alpha3
kind: VirtualService
metadata:
  name: payment-fault
spec:
  hosts:
    - payment-service
  http:
    - fault:
        delay:
          percentage:
            value: 20
          fixedDelay: 2s
      route:
        - destination:
            host: payment-service

5. Exécuter en environnement contrôlé

Ordre d'exécution :

  1. Staging d'abord — valider que l'expérience est reproductible
  2. Production hors heures de pointe — avec monitoring actif
  3. Jamais pendant une release ou un incident actif

Checklist pré-lancement :


6. Organiser des Game Days

Structure d'un game day efficace (3 h) :

PhaseDuréeActivité
Brief15 minHypothèses, règles, rôles
Scénario 145 minChaos + observation + correction
Scénario 245 minChaos + observation + correction
Debriefing45 minBlameless postmortem, actions
Rapport30 minDocumentation et tickets

Rôles : Chaos Master (pilote les injections), Observer (note les métriques), On-call (répond comme en production).


7. Analyser les résultats

Comparer hypothèse vs réalité :

Hypothèse : failover DB < 60 s
Observé    : 142 s + 23 erreurs 500 pendant la transition
Delta      : FAIL — circuit breaker non configuré sur le service Orders
Action     : Ajouter Resilience4j circuit breaker + retry avec backoff exponentiel
Owner      : @sre-team | Sprint N+1

Métriques à capturer impérativement :


8. Automatiser dans le pipeline CI/CD

Intégrer les expériences validées en CI (ex. GitHub Actions) :

jobs:
  chaos-tests:
    runs-on: ubuntu-latest
    needs: deploy-staging
    steps:
      - name: Run Litmus chaos experiment
        run: |
          kubectl apply -f chaos/pod-kill-test.yaml
          sleep 60
          kubectl get chaosresult pod-kill-test-pod-delete \
            -o jsonpath='{.status.experimentStatus.verdict}'
      - name: Assert SLO not breached
        run: |
          ERROR_RATE=$(curl -s "http://prometheus/api/v1/query" \
            --data 'query=rate(http_requests_total{status=~"5.."}[1m])' \
            | jq '.data.result[0].value[1]')
          [ $(echo "$ERROR_RATE < 0.01" | bc) -eq 1 ]

Garde-fous et anti-patterns

Ne jamais faire

Pièges courants

Bonnes pratiques 2026