Go client to the Chaos Monkey REST API that can be used to trigger and retrieve chaos events.
This project was started for the purpose of controlled failure injection during GameDay events.
First of all, you need a running Simian Army that exposes its REST API via HTTP.
In order to trigger chaos events via the API, Chaos Monkey must be unleashed and on-demand termination must be enabled via these configuration properties:
simianarmy.chaos.leashed = false
simianarmy.chaos.terminateOndemand.enabled = true
If you plan to use the REST API only, you should also disable all scheduled terminations:
simianarmy.chaos.asg.enabled = false
If you're on Mac OS X, the easiest way to get the chaosmonkey
command-line tool is via Homebrew:
brew tap mlafeldt/formulas
brew install chaosmonkey
You can also build the tool from source, provided you have Go installed:
go get -u github.com/mlafeldt/chaosmonkey
Use the tool to:
-
Trigger a new chaos event:
chaosmonkey -endpoint https://example.com:8080 \ -group ExampleAutoScalingGroup -strategy ShutdownInstance
-
Trigger the same event 5 times at intervals of 10 seconds, with a probability of 20% per event:
chaosmonkey -endpoint https://example.com:8080 \ -group ExampleAutoScalingGroup -strategy ShutdownInstance \ -count 5 -interval 10s -probability 0.2
This is useful to terminate more than one EC2 instance of an auto scaling group.
-
Get a list of past chaos events:
chaosmonkey -endpoint https://example.com:8080
-
List available chaos strategies, which you may pass to
-strategy
:chaosmonkey -list-strategies
-
List all auto scaling groups for a given AWS account, which you may then pass to
-group
:export AWS_ACCESS_KEY_ID=... export AWS_SECRET_ACCESS_KEY=... export AWS_REGION=... export AWS_ROLE=... chaosmonkey -list-groups
-
Wipe state of Chaos Monkey by deleting its SimpleDB domain (named
SIMIAN_ARMY
by default):export AWS_ACCESS_KEY_ID=... export AWS_SECRET_ACCESS_KEY=... export AWS_REGION=... export AWS_ROLE=... chaosmonkey -wipe-state SIMIAN_ARMY
Warning: Requires a restart of Chaos Monkey.
As always, invoke chaosmonkey -h
for a list of all available options.
In addition to command-line options, the tool also understands these environment variables:
CHAOSMONKEY_ENDPOINT
- the same as-endpoint
CHAOSMONKEY_USERNAME
- the same as-username
CHAOSMONKEY_PASSWORD
- the same as-password
This Docker image allows you to deploy Chaos Monkey with a single command:
docker run -it --rm -p 8080:8080 \
-e SIMIANARMY_CLIENT_AWS_ACCOUNTKEY=$AWS_ACCESS_KEY_ID \
-e SIMIANARMY_CLIENT_AWS_SECRETKEY=$AWS_SECRET_ACCESS_KEY \
-e SIMIANARMY_CLIENT_AWS_REGION=$AWS_REGION \
-e SIMIANARMY_CHAOS_LEASHED=false \
-e SIMIANARMY_CHAOS_ASG_ENABLED=false \
-e SIMIANARMY_CHAOS_TERMINATEONDEMAND_ENABLED=true \
mlafeldt/simianarmy
Afterwards, you can use chaosmonkey
to talk to the dockerized Chaos Monkey:
chaosmonkey -endpoint https://$DOCKER_HOST_IP:8080 ...
In addition to the CLI tool, the project also provides the chaosmonkey
Go library for use in other Go projects. To install it from source:
go get -u github.com/mlafeldt/chaosmonkey/lib
For usage and examples, see the Godoc documentation.
- Article: Using Chaos Monkey whenever you feel like it
- Article: A Little Story about Amazon ECS, systemd, and Chaos Monkey
- Talk: Chaos Monkey for Fun and Profit
- Talk: Embracing Failure in a Container World
This project is being developed by Mathias Lafeldt.