Chaos Toolkit is a project whose mission is to provide a free, open and community-driven toolkit and API to all the various forms of chaos engineering tools that the community needs.
The Chaos Toolkit has two main purposes:
- To provide a full chaos engineering implementation that simplifies the adoption of chaos engineering by providing an easy starting point for applying the discipline.
- To define an open API with the community so that any chaos experiment can be executed consistently using integrations with the many commercial, private and open source chaos implementations that are emerging.
Firstly the Chaos Toolkit aims to make it simple and straightforward to run experiments against your live system to build confidence in its behavior and learn about potential weaknesses.
Following the principles of chaos engineering, the Chaos Toolkit aims to be the easiest way to apply these principles to your own complex, and even sometimes chaotic, systems.
Secondly the Chaos Toolkit defines an Open API to Chaos Engineering through it's JSON/YAML-format experiment definition. The toolkit can be extended to integrate with any number of commercial, private and open source chaos implementations through probes (to measure steady-state before and after an experiment) and actions (to vary real-world events during an experiment).
Generally speaking, you can install it as follows:
$ pip install -U chaostoolkit
It is recommended that you create a Python virtual environment for running your chaos experiments. Full instructions for installing chaostoolkit and its requirements are available in the installation documentation.
While installing via packages gives you the most control over what to deploy, you may also be interested in simply dowloading a standalone binary that can be run as-is.
Download a copy from here.
Whenever a new version is released, just download its copy again.
Once you have installed the Chaos Toolkit you can use it through its simple command line tool. The tool's main job is to run your experiment and then generate a report of the findings from the experiment to then share with your team for discussion.
Running an experiment is as simple as:
$ chaos run experiment.json
The Chaos Toolkit takes experiments defined in a JSON format description file, encoded in JSON (YAML is also supported), and runs its steps sequentially. A full specifiction of this experiment description file can be found in the main project documentation.
The Chaos Toolkit plays the experiment description that you provide to it. Experiments are made up of probes and actions (to vary real-world events during an experiment). We are always looking for community contribution and ideas around what probes and actions you might need as you integrate chaos experiments through the Chaos Toolkit, into your own unique context and evironment.
If you have an idea for a new set of probes and actions that you'd like to share, please first consider raising a ticket or even joining our community slack to suggest your idea.
In terms of implementation, the Chaos Toolkit currently supports probes and actions implemented as Python functions, separate processes or even remote HTTP calls. As long as your extensions conform to the Chaos Toolkit API you can then specify your own unique extensions in your experiment definitions.
The core implementation of the Chaos Toolkit API can be found in the chaostoolkit-lib project.
The following free and open source extensions are available for your probes and/or actions:
Infrastructure/Platform Fault Injections:
- chaostoolkit-kubernetes: Kubernetes activities
- chaostoolkit-cloud-foundry: Cloud Foundry activities
- chaostoolkit-aws: AWS activities
- chaostoolkit-azure: Microsoft Azure activities
- chaostoolkit-google-cloud: Google Cloud Engine activities
Application Fault Injections:
- chaostoolkit-gremlin: Gremlin, Inc activities
- chaostoolkit-toxiproxy: Toxy Proxy fault injections
- chaostoolkit-spring: Spring Project fault injections
Observability:
- chaostoolkit-prometheus: Prometheus probes
- chaostoolkit-slack: Slack notifications
- chaostoolkit-humio: Humio logging
Chaos Toolkit's mission is to provide an open API to chaos engineering in all its forms. As such, we encourage and welcome you to join our open community Slack team to discuss and share your experiments and needs with the community. You can also use StackOverflow to ask any questions regarding using the Chaos Toolkit or Chaos Engineering.
If you'd prefer not to use Slack then we welcome the raising of GitHub issues on this repo for any questions, requests, or discussions around the Chaos Toolkit.
Finally you can always email [email protected]
with any questions as well.