Chaos Engineering in 2026: Tools, Techniques & Getting Started
Learn chaos engineering with Gremlin, LitmusChaos, and AWS Fault Injection Service. Design controlled experiments, build resilience into distributed systems, and integrate chaos testing into CI/CD pipelines.
Chaos engineering is the practice of deliberately introducing controlled failures into a system to expose weaknesses before they cause real outages. Netflix popularized the concept with Chaos Monkey in 2011. In 2026, it’s a standard practice at any organization serious about reliability — and the tooling has matured to make it accessible far beyond Netflix-scale teams.
The premise is simple: if your system will experience failures (and it will), you’d rather discover how it behaves in a controlled experiment than during a 3am production incident.
The Chaos Engineering Hypothesis Model
Chaos engineering is science, not random destruction. Every experiment follows a hypothesis structure:
- Define steady state: what does “normal” look like? (requests/second, error rate, p99 latency)
- Hypothesize: “We believe the system will maintain steady state when [failure is injected]”
- Inject failure: introduce the specific fault
- Observe: measure the impact against steady state
- Conclude: did the system behave as expected? If not, that’s a weakness to fix.
The goal is learning, not breaking things. You’re testing your assumptions about system resilience.
Chaos Monkey and the Simian Army
Netflix’s Chaos Monkey terminates EC2 instances at random during business hours, forcing teams to build services that handle instance failures gracefully. It’s the original chaos tool, now open-sourced at github.com/netflix/chaosmonkey.
Netflix extended the concept to the Simian Army:
- Chaos Gorilla: terminates an entire AWS availability zone
- Chaos Kong: simulates an entire AWS region failure
- Latency Monkey: introduces artificial network latency
- Conformity Monkey: finds instances not following best practices
- Security Monkey: detects security violations and misconfigurations
The key insight from Netflix: Chaos Monkey runs every day during business hours — not randomly at night. Engineers need to be present to respond and fix issues immediately.
Chaos Engineering Tools in 2026
Gremlin (Commercial)
The most complete chaos platform. Supports CPU/memory/disk attacks, network delay/loss/corruption, shutdown attacks, and state attacks across AWS, GCP, Azure, Kubernetes, and bare metal.
# Gremlin CLI: 10% packet loss on production service for 60 seconds
gremlin attack-container \
--target-type Container \
--container-labels app=payment-service \
--attack-type packet_loss \
--percent 10 \
--length 60
Gremlin’s “Game Days” feature orchestrates multi-team resilience exercises with pre-planned scenarios and rollback capabilities.
LitmusChaos (CNCF, Open Source)
The leading open-source chaos framework for Kubernetes. Experiments defined as Kubernetes custom resources, integrated with ArgoCD and GitHub Actions.
# Litmus ChaosEngine: inject pod failure
apiVersion: litmuschaos.io/v1alpha1
kind: ChaosEngine
metadata:
name: pod-failure-experiment
namespace: payment-system
spec:
appinfo:
appns: payment-system
applabel: app=payment-service
appkind: deployment
chaosServiceAccount: litmus-admin
experiments:
- name: pod-delete
spec:
components:
env:
- name: TOTAL_CHAOS_DURATION
value: '60' # seconds
- name: CHAOS_INTERVAL
value: '10' # kill a pod every 10 seconds
- name: FORCE
value: 'false' # graceful termination
- name: PODS_AFFECTED_PERC
value: '50' # kill 50% of pods
AWS Fault Injection Service (FIS)
AWS’s native chaos engineering service. Injects faults into EC2, EKS, RDS, and other AWS services directly from the console or API.
{
"description": "Kill 25% of EC2 instances in payment-asg",
"targets": {
"PaymentInstances": {
"resourceType": "aws:ec2:instance",
"resourceTags": {"Service": "payment-api"},
"selectionMode": "PERCENT(25)"
}
},
"actions": {
"TerminateInstances": {
"actionId": "aws:ec2:terminate-instances",
"targets": {"Instances": "PaymentInstances"},
"parameters": {}
}
},
"stopConditions": [
{
"source": "aws:cloudwatch:alarm",
"value": "arn:aws:cloudwatch:::alarm:payment-error-rate-critical"
}
]
}
The stopConditions are critical: FIS automatically stops the experiment if a CloudWatch alarm triggers, preventing chaos experiments from causing uncontrolled damage.
Chaos Toolkit (Open Source)
A Python-based framework for defining chaos experiments as JSON/YAML files. Integrates with Kubernetes, AWS, GCP, and custom endpoints.
{
"title": "Pod Failure Resilience Check",
"description": "Verify checkout handles pod failures gracefully",
"steady-state-hypothesis": {
"title": "Normal checkout operation",
"probes": [{
"type": "probe",
"name": "checkout-success-rate",
"provider": {
"type": "http",
"url": "https://api.example.com/metrics/checkout-success",
"timeout": 5
},
"tolerance": {"type": "range", "range": [0.99, 1.0]}
}]
},
"method": [{
"type": "action",
"name": "kill-checkout-pods",
"provider": {
"type": "python",
"module": "chaosk8s.pod.actions",
"func": "terminate_pods",
"arguments": {
"label_selector": "app=checkout",
"ns": "production",
"qty": 2
}
}
}]
}
Failure Mode Categories
Systematic chaos engineering covers these failure categories:
| Category | Example Experiments |
|---|---|
| Compute | Instance termination, pod eviction, OOM kill |
| Network | Packet loss, latency, DNS failure, network partition |
| Storage | Disk full, I/O latency, read/write errors |
| State | Memory pressure, CPU starvation, clock skew |
| Dependencies | Third-party API failure, database unavailability |
| Configuration | Invalid config deployment, secrets rotation |
Start with compute failures (instance/pod termination) — they’re easiest to implement and expose the most common resilience gaps.
Integrating Chaos into CI/CD
Run lightweight chaos experiments as part of your deployment pipeline to catch regressions before they reach production:
# GitHub Actions: chaos experiment in staging after deploy
- name: Deploy to Staging
uses: your-org/deploy-action@v1
- name: Wait for stable state (5 min)
run: sleep 300
- name: Run chaos experiment
run: |
# Terminate 1 pod, verify service remains healthy
kubectl delete pod -l app=payment-service -n staging --field-selector=metadata.name=$(kubectl get pods -l app=payment-service -n staging -o jsonpath='{.items[0].metadata.name}')
# Wait 30 seconds
sleep 30
# Verify error rate is still < 1%
ERROR_RATE=$(curl -s https://staging-api.example.com/metrics/error-rate)
if (( $(echo "$ERROR_RATE > 0.01" | bc -l) )); then
echo "Error rate exceeded threshold after chaos: $ERROR_RATE"
exit 1
fi
echo "Chaos experiment passed: error rate = $ERROR_RATE"
GameDay: Organized Resilience Exercises
A GameDay is a structured resilience exercise involving multiple teams. It typically runs for 4–8 hours with a specific scenario:
Example GameDay Scenario: “Database Unavailability”
- Announce scope: DBA team will simulate 5-minute RDS failover
- Observe baseline: confirm all dashboards green before starting
- Inject: initiate RDS Multi-AZ failover
- Observe: which services degraded? What alerts fired? Did circuit breakers open?
- Restore: confirm recovery after failover completes
- Retrospective: document what worked, what failed, what to fix
GameDays build team muscle memory, test runbooks, and expose integration assumptions that no amount of unit testing catches.
Circuit Breakers: Essential Defense Pattern
Chaos engineering often reveals missing circuit breakers. A circuit breaker prevents a service from hammering a failing dependency:
// Circuit breaker with opossum
import CircuitBreaker from 'opossum';
const paymentApiCall = async (order) => {
return await fetch(`https://payment-api.internal/charge`, {
method: 'POST',
body: JSON.stringify(order),
});
};
const breaker = new CircuitBreaker(paymentApiCall, {
timeout: 3000, // fail if call takes > 3 seconds
errorThresholdPercentage: 50, // open after 50% failure rate
resetTimeout: 30000, // try again after 30 seconds
volumeThreshold: 5, // minimum 5 calls before circuit can open
});
breaker.fallback(() => ({ status: 'payment-unavailable' }));
breaker.on('open', () => console.log('Circuit OPEN: payment service unavailable'));
breaker.on('halfOpen', () => console.log('Circuit testing recovery...'));
breaker.on('close', () => console.log('Circuit CLOSED: service recovered'));
Getting Started: A 90-Day Plan
Month 1 — Foundation
- Audit your system’s failure assumptions. What happens if your payment API goes down? Your auth service? Your database?
- Install LitmusChaos in staging Kubernetes cluster
- Run your first experiment:
pod-deleteagainst a non-critical service - Verify that the service recovers automatically and alerts fire correctly
Month 2 — Expand
- Run network latency experiments (50ms added latency to critical dependencies)
- Test database failover in staging
- Run first GameDay with engineering and on-call team
- Add circuit breakers to services that failed experiments
Month 3 — Systematize
- Integrate pod failure experiments into staging deploy pipeline
- Document all experiments as code in a chaos repository
- Schedule monthly GameDays as a calendar event
- Track “chaos experiment coverage” as a reliability metric
Common Chaos Engineering Mistakes
Running chaos in production without preparation: Start in staging. Only run production experiments when you have confidence from staging and mature observability.
No stop conditions: Every experiment needs automated stop conditions. If your monitoring alarm triggers, the experiment should halt automatically.
Chaos without observability: You can’t learn from a chaos experiment if you can’t measure the impact. Set up dashboards and baseline metrics before injecting faults.
One-time experiments: Chaos engineering is continuous, not a one-time audit. Systems change; resilience assumptions need regular validation.
Chaos engineering is ultimately about changing your engineering culture from “we hope this won’t fail” to “we’ve verified this fails gracefully.” The tools make the practice accessible; the discipline makes it valuable.
50 CLI Commands That Save Hours Every Week
The exact Git shortcuts, file search tricks, Docker commands, and productivity hacks that senior developers use daily. Compiled from 5+ years of shipping production code.
- Git mastery (10 cmds)
- File & search wizardry
- Docker & DevOps tricks
- Process & network tools
- Productivity boosters
- macOS & Linux install guide
No spam. 1 email/week max. Unsubscribe anytime.
Found this guide useful? Check out our free developer tools.
Affiliate disclosure: Some links below are affiliate links — we may earn a small commission at no extra cost to you. Learn more.
Recommended Tools & Resources
DigitalOcean
$200 credit for new users. Simple, affordable cloud hosting for developers.
GitHub Student Pack
Free access to 100+ developer tools. Perfect for students and new devs.
Vercel
Deploy frontend apps instantly. Free tier is generous for side projects.
DevPlaybook Products
Boilerplates, scripts & AI toolkits to 10x your dev workflow.