Chaos Engineer
When to Use This Skill
- Designing and executing chaos experiments
- Implementing failure injection frameworks (Chaos Monkey, Litmus, etc.)
- Planning and conducting game day exercises
- Building blast radius controls and safety mechanisms
- Setting up continuous chaos testing in CI/CD
- Improving system resilience based on experiment findings
Core Workflow
- System Analysis - Map architecture, dependencies, critical paths, and failure modes
- Experiment Design - Define hypothesis, steady state, blast radius, and safety controls
- Execute Chaos - Run controlled experiments with monitoring and quick rollback
- Learn & Improve - Document findings, implement fixes, enhance monitoring
- Automate - Integrate chaos testing into CI/CD for continuous resilience
Reference Guide
Load detailed guidance based on context:
| Topic |
Reference |
Load When |
| Experiments |
references/experiment-design.md |
Designing hypothesis, blast radius, rollback |
| Infrastructure |
references/infrastructure-chaos.md |
Server, network, zone, region failures |
| Kubernetes |
references/kubernetes-chaos.md |
Pod, node, Litmus, chaos mesh experiments |
| Tools & Automation |
references/chaos-tools.md |
Chaos Monkey, Gremlin, Pumba, CI/CD integration |
| Game Days |
references/game-days.md |
Planning, executing, learning from game days |
Safety Checklist
Non-obvious constraints that must be enforced on every experiment:
- Steady state first — define and verify baseline metrics before injecting any failure
- Blast radius cap — start with the smallest possible impact scope; expand only after validation
- Automated rollback ≤ 30 seconds — abort path must be scripted and tested before the experiment begins
- Single variable — change only one failure condition at a time until behaviour is well understood
- No production without safety nets — customer-facing environments require circuit breakers, feature flags, or canary isolation
- Close the loop — every experiment must produce a written learning summary and at least one tracked improvement
Output Templates
When implementing chaos engineering, provide:
- Experiment design document (hypothesis, metrics, blast radius)
- Implementation code (failure injection scripts/manifests)
- Monitoring setup and alert configuration
- Rollback procedures and safety controls
- Learning summary and improvement recommendations
Concrete Example: Pod Failure Experiment (Litmus Chaos)
The following shows a complete experiment — from hypothesis to rollback — using Litmus Chaos on Kubernetes.
Step 1 — Define steady state and apply the experiment
# Verify baseline: p99 latency < 200ms, error rate < 0.1%
kubectl get deploy my-service -n production
kubectl top pods -n production -l app=my-service
Step 2 — Create and apply a Litmus ChaosEngine manifest
# chaos-pod-delete.yaml
apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine
metadata:
name: my-service-pod-delete
namespace: production
spec:
appinfo:
appns: production
applabel: "app=my-service"
appkind: deployment
# Limit blast radius: only 1 replica at a time
engineState: active
chaosServiceAccount: litmus-admin
experiments:
- name: pod-delete
spec:
components:
env:
- name: TOTAL_CHAOS_DURATION
value: "60" # seconds
- name: CHAOS_INTERVAL
value: "20" # delete one pod every 20s
- name: FORCE
value: "false"
- name: PODS_AFFECTED_PERC
value: "33" # max 33% of replicas affected
# Apply the experiment
kubectl apply -f chaos-pod-delete.yaml
# Watch experiment status
kubectl describe chaosengine my-service-pod-delete -n production
kubectl get chaosresult my-service-pod-delete-pod-delete -n production -w
Step 3 — Monitor during the experiment
# Tail application logs for errors
kubectl logs -l app=my-service -n production --since=2m -f
# Check ChaosResult verdict when complete
kubectl get chaosresult my-service-pod-delete-pod-delete \
-n production -o jsonpath='{.status.experimentStatus.verdict}'
Step 4 — Rollback / abort if steady state is violated
# Immediately stop the experiment
kubectl patch chaosengine my-service-pod-delete \
-n production --type merge -p '{"spec":{"engineState":"stop"}}'
# Confirm all pods are healthy
kubectl rollout status deployment/my-service -n production
Concrete Example: Network Latency with toxiproxy
# Install toxiproxy CLI
brew install toxiproxy # macOS; use the binary release on Linux
# Start toxiproxy server (runs alongside your service)
toxiproxy-server &
# Create a proxy for your downstream dependency
toxiproxy-cli create -l 0.0.0.0:22222 -u downstream-db:5432 db-proxy
# Inject 300ms latency with 10% jitter — blast radius: this proxy only
toxiproxy-cli toxic add db-proxy -t latency -a latency=300 -a jitter=30
# Run your load test / observe metrics here ...
# Remove the toxic to restore normal behaviour
toxiproxy-cli toxic remove db-proxy -n latency_downstream
Concrete Example: Chaos Monkey (Spinnaker / standalone)
# chaos-monkey-config.yml — restrict to a single ASG
deployment:
enabled: true
regionIndependence: false
chaos:
enabled: true
meanTimeBetweenKillsInWorkDays: 2
minTimeBetweenKillsInWorkDays: 1
grouping: APP # kill one instance per app, not per cluster
exceptions:
- account: production
region: us-east-1
detail: "*-canary" # never kill canary instances
# Apply and trigger a manual kill for testing
chaos-monkey --app my-service --account staging --dry-run false
1---2name: chaos-engineer3description: Designs chaos experiments, creates failure injection frameworks, and facilitates game day exercises for distributed systems — producing runbooks, experiment manifests, rollback procedures, and post-mortem templates. Use when designing chaos experiments, implementing failure injection frameworks, or conducting game day exercises. Invoke for chaos experiments, resilience testing, blast radius control, game days, antifragile systems, fault injection, Chaos Monkey, Litmus Chaos.4license: MIT5---6
7# Chaos Engineer
8
9## When to Use This Skill
10
11- Designing and executing chaos experiments
12- Implementing failure injection frameworks (Chaos Monkey, Litmus, etc.)
13- Planning and conducting game day exercises
14- Building blast radius controls and safety mechanisms
15- Setting up continuous chaos testing in CI/CD
16- Improving system resilience based on experiment findings
17
18## Core Workflow
19
201. **System Analysis** - Map architecture, dependencies, critical paths, and failure modes
212. **Experiment Design** - Define hypothesis, steady state, blast radius, and safety controls
223. **Execute Chaos** - Run controlled experiments with monitoring and quick rollback
234. **Learn & Improve** - Document findings, implement fixes, enhance monitoring
245. **Automate** - Integrate chaos testing into CI/CD for continuous resilience
25
26## Reference Guide
27
28Load detailed guidance based on context:
29
30| Topic | Reference | Load When |
31|-------|-----------|-----------|
32| Experiments | `references/experiment-design.md` | Designing hypothesis, blast radius, rollback |
33| Infrastructure | `references/infrastructure-chaos.md` | Server, network, zone, region failures |
34| Kubernetes | `references/kubernetes-chaos.md` | Pod, node, Litmus, chaos mesh experiments |
35| Tools & Automation | `references/chaos-tools.md` | Chaos Monkey, Gremlin, Pumba, CI/CD integration |
36| Game Days | `references/game-days.md` | Planning, executing, learning from game days |
37
38## Safety Checklist
39
40Non-obvious constraints that must be enforced on every experiment:
41
42- **Steady state first** — define and verify baseline metrics before injecting any failure
43- **Blast radius cap** — start with the smallest possible impact scope; expand only after validation
44- **Automated rollback ≤ 30 seconds** — abort path must be scripted and tested before the experiment begins
45- **Single variable** — change only one failure condition at a time until behaviour is well understood
46- **No production without safety nets** — customer-facing environments require circuit breakers, feature flags, or canary isolation
47- **Close the loop** — every experiment must produce a written learning summary and at least one tracked improvement
48
49## Output Templates
50
51When implementing chaos engineering, provide:
521. Experiment design document (hypothesis, metrics, blast radius)
532. Implementation code (failure injection scripts/manifests)
543. Monitoring setup and alert configuration
554. Rollback procedures and safety controls
565. Learning summary and improvement recommendations
57
58## Concrete Example: Pod Failure Experiment (Litmus Chaos)
59
60The following shows a complete experiment — from hypothesis to rollback — using Litmus Chaos on Kubernetes.
61
62### Step 1 — Define steady state and apply the experiment
63
64```bash
65# Verify baseline: p99 latency < 200ms, error rate < 0.1%
66kubectl get deploy my-service -n production
67kubectl top pods -n production -l app=my-service
68```
69
70### Step 2 — Create and apply a Litmus ChaosEngine manifest
71
72```yaml
73# chaos-pod-delete.yaml
74apiVersion: litmuschaos.io/v1alpha1
75kind: ChaosEngine
76metadata:
77 name: my-service-pod-delete
78 namespace: production
79spec:
80 appinfo:
81 appns: production
82 applabel: "app=my-service"
83 appkind: deployment
84 # Limit blast radius: only 1 replica at a time
85 engineState: active
86 chaosServiceAccount: litmus-admin
87 experiments:
88 - name: pod-delete
89 spec:
90 components:
91 env:
92 - name: TOTAL_CHAOS_DURATION
93 value: "60" # seconds
94 - name: CHAOS_INTERVAL
95 value: "20" # delete one pod every 20s
96 - name: FORCE
97 value: "false"
98 - name: PODS_AFFECTED_PERC
99 value: "33" # max 33% of replicas affected
100```
101
102```bash
103# Apply the experiment
104kubectl apply -f chaos-pod-delete.yaml
105
106# Watch experiment status
107kubectl describe chaosengine my-service-pod-delete -n production
108kubectl get chaosresult my-service-pod-delete-pod-delete -n production -w
109```
110
111### Step 3 — Monitor during the experiment
112
113```bash
114# Tail application logs for errors
115kubectl logs -l app=my-service -n production --since=2m -f
116
117# Check ChaosResult verdict when complete
118kubectl get chaosresult my-service-pod-delete-pod-delete \
119 -n production -o jsonpath='{.status.experimentStatus.verdict}'
120```
121
122### Step 4 — Rollback / abort if steady state is violated
123
124```bash
125# Immediately stop the experiment
126kubectl patch chaosengine my-service-pod-delete \
127 -n production --type merge -p '{"spec":{"engineState":"stop"}}'
128
129# Confirm all pods are healthy
130kubectl rollout status deployment/my-service -n production
131```
132
133## Concrete Example: Network Latency with toxiproxy
134
135```bash
136# Install toxiproxy CLI
137brew install toxiproxy # macOS; use the binary release on Linux
138
139# Start toxiproxy server (runs alongside your service)
140toxiproxy-server &
141
142# Create a proxy for your downstream dependency
143toxiproxy-cli create -l 0.0.0.0:22222 -u downstream-db:5432 db-proxy
144
145# Inject 300ms latency with 10% jitter — blast radius: this proxy only
146toxiproxy-cli toxic add db-proxy -t latency -a latency=300 -a jitter=30
147
148# Run your load test / observe metrics here ...
149
150# Remove the toxic to restore normal behaviour
151toxiproxy-cli toxic remove db-proxy -n latency_downstream
152```
153
154## Concrete Example: Chaos Monkey (Spinnaker / standalone)
155
156```bash
157# chaos-monkey-config.yml — restrict to a single ASG
158deployment:
159 enabled: true
160 regionIndependence: false
161chaos:
162 enabled: true
163 meanTimeBetweenKillsInWorkDays: 2
164 minTimeBetweenKillsInWorkDays: 1
165 grouping: APP # kill one instance per app, not per cluster
166 exceptions:
167 - account: production
168 region: us-east-1
169 detail: "*-canary" # never kill canary instances
170
171# Apply and trigger a manual kill for testing
172chaos-monkey --app my-service --account staging --dry-run false
173```