You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardexpand all lines: README.md
+76-2
Original file line number
Diff line number
Diff line change
@@ -6,5 +6,79 @@ _“Yossarian also thought Milo was a jerk; but he also know that Milo was a gen
6
6
7
7
## What is this?
8
8
Minderbinder is a tool that uses eBPF to inject failures into running processes.
9
-
Presently it can inject failures into **system calls** by attaching kprobes to the system call handler
10
-
uand failures into **outgoing network traffic** by atta:wching traffic to the [TC subsystem](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/linux-traffic-control_configuring-and-managing-networking).
9
+
Presently it can inject failures into **system calls** by attaching kprobes to the system call handler and failures into **outgoing network traffic** by attaching a traffic filter to the [TC subsystem](https://docs.redhat.com/en/documentation/red_hat_enterprise_linux/8/html/configuring_and_managing_networking/linux-traffic-control_configuring-and-managing-networking).
10
+
11
+
## What's it for?
12
+
Minderbinder aims to make it easy to generically inject failures into processes. At the moment you can write a config.yaml that describes the failures to inject and the processes to inject them into, start minderbinder, and see what happens.
13
+
14
+
## Running Minderbinder
15
+
Check out [config.yaml](config.yaml) for a complete example. Minderbinder supports two different interventions - `syscall` and `outgoing_network`:
16
+
17
+
```yaml
18
+
agents_of_chaos:
19
+
syscall:
20
+
# Stop curl from using `openat`
21
+
- name: break_curl_openat
22
+
syscall: openat
23
+
ret_code: -2# NOENT / no such file or directory
24
+
targets:
25
+
- process_name: curl
26
+
delay_ms: 100# Milliseconds to wait after the process starts. For openat, this gives the process a chance to start properly.
27
+
failure_rate: 100
28
+
outgoing_network:
29
+
- name: break_wget_network
30
+
targets:
31
+
- process_name: wget
32
+
delay_ms: 100# Milliseconds. In this case, 100ms should be enough to get a DNS request through for the endpoint, before breaking the actual transfer to the HTTP server
33
+
failure_rate: 100
34
+
```
35
+
36
+
To run minderbinder, you specify the configuration file, and if you are using `outgoing_network`, the interface to attach to:
The long-term goal is to provide a back-end for existing unit test frameworks, so that we can write component tests that can trivially break the code under test in interesting, chaos-related fashions. Something like this:
assert.Equal(t, "Downstream service failed\n", rec.Body.String())
78
+
}
79
+
80
+
```
81
+
82
+
This gives us a mechanism to test our application and services resiliance in the face of failures. Traditionally we would do this either by extensively stubbing _all_ the interesting interfaces around the application and injecting failures, or, using some chaos engineering tool to inject failures into the entire aggregate system in a deployed cloud environment. Because Minderbinder leverages eBPF for the failure injection, the code needed for each supported language would be straightforward, as it would simply have to configure the native minderbinder component.
0 commit comments