Chaos Engineering is a practical way to discover whether a system is genuinely resilient or merely appears healthy during normal operation. As site reliability engineers, we spend considerable time reviewing dashboards, tuning alerts, and responding to incidents. Those activities are important, but they do not always reveal how a service behaves when a dependency becomes slow, a pod disappears, or a network path starts dropping packets.
A carefully planned Chaos Engineering experiment provides a controlled way to answer those questions before customers discover the answers for us. The goal is not to damage production or create unnecessary risk. The goal is to introduce a small, measurable failure, observe the system’s behavior, and use the results to improve reliability.
Gremlin describes the process as identifying potential failure points, forming a hypothesis, defining the blast radius, running the experiment, observing the outcome, and applying fixes before repeating the test. Chaos Mesh follows a similar hypothesis-driven approach while providing Kubernetes-native resources for faults such as pod failures, network delay, I/O pressure, and time disruption.
What Chaos Engineering Tests
A chaos experiment tests more than whether a server stays online. It tests the complete chain of behavior around a failure:
- Application Detection: Does the application detect the problem?
- Traffic Control: Does it retry responsibly and use appropriate timeouts?
- Load Distribution: Does traffic move to a healthy instance?
- Resource Bounds: Do queues grow without exhausting memory?
- Observability: Do alerts fire at the right time, and can the on-call engineer understand what is happening?
- Customer Value: Does the customer-facing service remain within its service-level objectives?
A system can have redundant infrastructure and still fail badly if its timeout settings are too long, its retry policy creates a traffic storm, or its fallback path has never been exercised.
For a first experiment, choose a failure that is meaningful but easy to contain. A short network delay, the termination of one non-critical pod, or temporary CPU pressure is usually safer than shutting down an entire availability zone.
The experiment should begin with a clear steady state. This might include p99 latency below 300 milliseconds, an error rate below 1 percent, a stable request rate, and a normal level of resource saturation. Without a baseline, it is difficult to determine whether the experiment changed anything.
Choosing Between Gremlin and Chaos Mesh
Gremlin is a managed reliability platform designed to make fault injection accessible across infrastructure, Kubernetes, cloud services, and other environments. It provides guided experiment workflows, a library of attacks, safety controls, and centralized experiment management. Gremlin also emphasizes reversible experiments and small blast radii.
Chaos Mesh is an open-source, cloud-native platform focused primarily on Kubernetes. It supports fault types such as pod failures, network disruptions, I/O pressure, time changes, and kernel stress. Its dashboard can be used to create, run, pause, inspect, and archive experiments.
The choice depends on your operating environment and how your team manages infrastructure.
Gremlin Features
- Infrastructure spans several platforms.
- A central user interface is required for experiments.
- Organization-wide access controls and reporting are needed.
- A supported commercial service is preferred.
- Experiments need to run across hosts, containers, Kubernetes, and cloud resources.
Chaos Mesh Features
- Kubernetes is the center of your platform.
- The team prefers open-source tooling.
- Infrastructure is managed through Git and Kubernetes resources.
- Experiments must be represented as version-controlled configurations.
- Operating the control plane and reviewing Kubernetes resources is standard practice.
Regardless of the tool, the engineering discipline remains the same. A tool can make an experiment easier to launch, but it cannot decide whether the hypothesis is useful, whether the blast radius is safe, or whether the result deserves a production change.
Planning the First Experiment
Before opening Gremlin or configuring Chaos Mesh, write down the experiment in plain language.
Formulating the Hypothesis
A useful hypothesis might be: If one instance of the order service experiences 10 seconds of network delay, the remaining instances will continue serving traffic, the error rate will remain below 1 percent, and p99 latency will return to normal within five minutes after recovery. This statement gives the team something concrete to verify and defines success clearly.
Targeting and Scope
Identify the target precisely. Avoid vague descriptions such as “the checkout system.” Specify the exact service, namespace, cluster, region, host, or workload that will be affected. Confirm that the target is correct, as many reliability incidents begin with an incorrect selector, an outdated label, or an environment setting that points to production instead of a test environment.
Blast Radius and Timing
Define the blast radius. For a first test, this might mean one pod, one host, one container, or a small percentage of traffic. The blast radius should be large enough to expose the behavior you want to test but small enough for the team to stop the experiment quickly.
Choose an operating window when the service has active monitoring and an experienced engineer is available. Avoid running your first experiment during a deployment, a major traffic event, a database migration, or an unrelated incident. Notify the relevant on-call teams and document who has authority to stop the test.
Defining Stop Conditions
Prepare clear stop conditions based on customer impact or a serious risk signal rather than general discomfort. Stop the experiment if:
- The error rate exceeds the agreed threshold.
- p99 latency crosses the service-level objective.
- The main business transaction stops completing.
- Queue depth grows continuously.
- A dependent service begins failing.
- Monitoring becomes unavailable.
- A critical resource reaches dangerous saturation.
Running a First Experiment with Gremlin
When using Gremlin, begin by selecting the correct environment and target resource. The general workflow involves choosing an attack type, selecting a target, configuring the duration and intensity, adding health checks, and reviewing the experiment before starting it.
For a first test, a short network delay is often more informative than a dramatic failure. Many distributed systems fail not because a dependency becomes completely unavailable, but because it becomes slow enough to consume connection pools, worker threads, or request budgets.
Select one non-critical target. Configure a modest delay and a short duration. For example, introduce a 100-millisecond delay for 60 seconds on one application instance, provided that the service and traffic pattern make those values reasonable. The exact settings should come from your baseline and risk assessment rather than from a universal recommendation.
Before launching the experiment, verify that:
- The target belongs to the intended environment.
- The target serves a manageable amount of traffic.
- At least one healthy alternative instance is running.
- Dashboards display request rate, error rate, latency, saturation, and dependency health.
- The team knows how to stop the attack and the experiment has an automatic duration limit.
Start the experiment and watch the same metrics selected during planning. Do not rely only on the fault-injection tool’s status screen. The important question is how customers and service-level indicators behave, not merely whether Gremlin reports that the fault was successfully introduced.
If the hypothesis is disproved, stop safely, record the timeline, and investigate. If the hypothesis is confirmed, do not conclude that the system is resilient under every possible failure. You have tested one narrow condition. The next experiment might increase the duration, target a different dependency, or examine another failure mode.
Running a First Experiment with Chaos Mesh
Chaos Mesh represents experiments as Kubernetes resources. It supports one-time, scheduled, and recurring experiments. When an experiment has a defined duration, the injected fault is automatically removed after that period. Pausing or deleting an experiment also restores the affected behavior.
For a first experiment, use the Chaos Mesh dashboard to create a small network-delay test. Select the production-like or staging namespace, choose the checkout workload, restrict the target to one pod, and configure a 100-millisecond delay for 60 seconds.
Before submitting the experiment, verify the namespace, workload labels, and number of matching pods. Confirm that the selected workload has healthy replicas and that the experiment will not affect unrelated services.
Once the experiment begins, inspect its status through the Chaos Mesh dashboard and compare the results with application dashboards, logs, traces, and alerting systems. Look for changes in successful transactions, error rates, tail latency, retry counts, connection-pool usage, and queue depth.
Experiments can be viewed, paused, updated, and deleted through the Chaos Mesh platform. Use these controls only after confirming that you are operating on the intended experiment and environment.
Using a local Kubernetes cluster with a sample application and a small network delay is a sensible option for learning the platform. It allows the team to understand targeting, monitoring, and recovery without risking a shared environment.
Do not begin with a recurring schedule. Scheduled experiments become useful after the team understands the system’s behavior, but automation can multiply an incorrect target or unsafe configuration. First prove that the experiment is correctly scoped and that the recovery procedure works.
Observability During the Experiment
A chaos experiment without observability is only an interruption. Before starting, capture a baseline long enough to understand ordinary variation. For many services, 15 to 30 minutes may be enough for a small test, although systems with periodic traffic may require a longer observation window.
Watch four main categories of signals:
- Customer Signals: Successful transactions, checkout completion, stream starts, search success, or another metric that reflects user value. These signals receive priority over infrastructure metrics.
- Golden Signals: Latency, traffic, errors, and saturation. Review averages as well as tail latency, as a normal average can conceal a severe p99 problem.
- Dependency Signals: Connection-pool usage, timeout counts, retry volume, queue depth, database response time, and upstream error codes. These signals reveal the mechanism behind a failure.
- Operational Signals: Alert delivery, dashboard availability, logs, traces, and the behavior of the on-call process. An application may recover correctly while the team receives no useful alert, which is still a reliability problem.
Create a timeline before the test begins. Mark the baseline period, fault injection, first observed impact, alert time, recovery, and cleanup. This makes the review objective and exposes gaps between the actual failure and the team’s perception of it.
Common Mistakes to Avoid
- Starting without a defined goal: “Let’s see what happens” is not a hypothesis. It encourages broad experiments that produce noise rather than useful learning.
- Testing without reliable rollback: Every experiment needs a known way to stop the fault. Automatic duration limits are helpful, but they should not be the only safety mechanism.
- Using production as a shortcut: A local cluster, staging environment, or isolated canary provides enough information for a first test. Production experiments require stronger monitoring, permissions, traffic controls, and incident coordination.
- Changing multiple variables at once: Injecting network delay, terminating pods, and increasing CPU pressure simultaneously produces an outage without clarifying which condition caused it.
- Treating success as the final step: Chaos Engineering is an iterative practice. Each result should improve a timeout, alert, fallback, deployment strategy, runbook, or architectural decision.
- Blaming individuals: The purpose of the experiment is to expose system conditions, not to criticize the engineer who configured a retry policy. A blameless review produces better reliability work.
What to Do After the Experiment
Hold a short review while the details are still fresh. Record the hypothesis, target, duration, observed signals, alerts, customer impact, and recovery steps. Separate expected behavior from unexpected behavior.
If the system failed, create a specific follow-up action. This might involve:
- Reducing a client timeout.
- Limiting retries or adding a circuit breaker.
- Improving a readiness check.
- Creating an alert for queue growth.
- Documenting the recovery procedure.
If the system passed, record why. Evidence that traffic shifted correctly, the dependency timeout worked, and the service recovered within the agreed window supports architecture reviews and incident-response planning.
Repeat the experiment after making changes. The second run validates whether the fix addressed the original failure mode. Over time, expand from one pod to several pods, from staging to a carefully selected production canary, or from short delays to complete dependency loss.
The goal is to build confidence that the service can tolerate realistic failures and that the organization can detect, understand, and recover from them.
Frequently Asked Questions
Is Chaos Engineering the same as testing?
No. Traditional testing usually verifies expected behavior under defined inputs. Chaos Engineering explores how a system behaves when infrastructure, dependencies, or operating conditions fail. The two practices complement each other.
Should my first experiment run in production?
Usually, begin in a local, development, staging, or isolated environment. Move to production only when you have strong observability, a small blast radius, clear approval, and a tested stop procedure.
Which tool is easier for beginners?
Chaos Mesh can be approachable for Kubernetes teams that already understand namespaces, labels, and deployment management. Gremlin may be simpler for teams that want a guided interface and broader infrastructure support. The easier tool is the one that matches your team’s existing operating model.
What is the safest first failure to inject?
A short, low-intensity network delay on one non-critical instance is often a useful first choice because it tests timeouts, retries, load balancing, and observability without immediately removing the entire service.
How large should the blast radius be?
Start with the smallest target that can answer your question, such as one pod, one container, or one host. Increase the scope only after the initial result is understood and the stop procedure has been validated.
What metrics should I monitor?
At minimum, monitor customer success, error rate, p99 latency, request volume, saturation, dependency latency, retry counts, and queue depth. Include alert delivery and logs because recovery is not complete if the team cannot see or interpret the failure.
How long should an experiment run?
Run it long enough to observe the suspected behavior and recovery, but not longer than necessary. A short experiment with a clear hypothesis is better than an open-ended fault. Configure an automatic expiration whenever the tool supports it.
What if the experiment causes an outage?
Stop the experiment immediately, follow the incident-response process, restore the system, and preserve the timeline and telemetry. Afterward, review why the blast-radius controls, alerts, or rollback plan were insufficient.
Can Chaos Engineering be automated?
Yes. Teams often automate carefully reviewed experiments, especially in non-production environments and regular resilience tests. Automation should come after the experiment is understood manually. Every automated test still needs ownership, scope controls, monitoring, and a way to disable it.
How often should we run Chaos Engineering experiments?
Run experiments often enough to validate important failure modes and detect regressions, particularly after major architectural changes. The frequency should reflect system risk, operational maturity, and the cost of the experiment.
References
- Gremlin Chaos Engineering Knowledge Base — Comprehensive resource covering the hypothesis, blast-radius management, execution, and remediation workflows.
- Gremlin: Your First Chaos Experiment Guide — Step-by-step documentation on experiment planning, baseline measurement, rollback procedures, and post-experiment fixes.
- Gremlin Enterprise Chaos Engineering Adoption Guide — Strategy guide detailing team readiness, experiment monitoring, and scaling chaos practices across organizations.
- Chaos Mesh: Run Your First Experiment in 10 Minutes — Official quickstart tutorial demonstrating local Kubernetes experiments using network delay fault injection.
- Chaos Mesh Core Documentation: Managing Chaos Experiments — Technical documentation covering how to create, inspect, pause, update, and delete experiments within Kubernetes clusters.
- CNCF Landscape: Cloud Native Chaos Engineering Tools — The Cloud Native Computing Foundation directory categorizing open-source and enterprise chaos engineering platforms.





