查找和恢复 Chaosd 实验

Chaosd 支持按照条件搜索实验,以及恢复指定的 UID 对应的实验。本文档介绍了查找和恢复 Chaosd 实验的操作方法,并提供了示例。

查找 Chaosd 实验

本章节介绍了如何使用命令行模式和服务模式查找 Chaosd 实验。

使用命令行模式查找实验

运行以下命令可查看搜索命令 (search) 所支持的配置:

  1. $ chaosd search --help
  2. Search chaos attack, you can search attacks through the uid or the state of the attack
  3. Usage:
  4. chaosd search UID [flags]
  5. Flags:
  6. -A, --all list all chaos attacks
  7. --asc order by CreateTime, default value is false that means order by CreateTime desc
  8. -h, --help help for search
  9. -k, --kind string attack kind, supported value: network, process, stress, disk, host, jvm
  10. -l, --limit uint32 limit the count of attacks
  11. -o, --offset uint32 starting to search attacks from offset
  12. -s, --status string attack status, supported value: created, success, error, destroyed, revoked
  13. Global Flags:
  14. --log-level string the log level of chaosd, the value can be 'debug', 'info', 'warn' and 'error'

参数说明

配置项配置缩写说明类型
allA列出所有的实验bool 类型
asc按照创建时间的升序对实验进行排列,默认值为 falsebool 类型
kindk列出指定类型的实验string 类型,支持的类型包括:networkprocessstressdiskhostjvm
limitl列出实验的数量int 类型
offseto从指定的偏移量开始搜索int 类型
statuss列出指定状态的实验string 类型,支持的状态类型包括:createdsuccesserrordestroyedrevoked

示例

  1. ./chaosd search --kind network --status destroyed --limit 1

通过该命令,你可以查找类型为 network 且状态为 destroyed(表示实验已恢复)的实验。

运行命令后,结果中仅会输出一行数据。

输出结果如下:

  1. UID KIND ACTION STATUS CREATE TIME CONFIGURATION
  2. --------------------------------------- --------- -------- ----------- --------------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
  3. 1f6c1253-522a-43d9-83f8-42607102b3b9 network delay destroyed 2021-11-02T15:14:07+08:00 {"schedule":"","duration":"","action":"delay","kind":"network","uid":"1f6c1253-522a-43d9-83f8-42607102b3b9","latency":"2s","jitter":"0ms","correlation":"0","device":"eth0","ip-address":"220.181.38.251","ip-protocol":"all"}

使用服务模式查找实验

目前,服务模式只支持查找出所有的实验。你可以通过访问 Chaosd 服务的 /api/experiments/ 路径来获取数据。

示例

  1. curl -X GET 127.0.0.1:31767/api/experiments/

输出如下所示:

  1. [{"id":1,"uid":"ddc5ca81-b677-4595-b691-0ce57bedb156","created_at":"2021-10-18T16:01:18.563542491+08:00","updated_at":"2021-10-18T16:07:27.87111393+08:00","status":"success","kind":"stress","action":"mem","recover_command":"{\"schedule\":\"\",\"duration\":\"\",\"action\":\"mem\",\"kind\":\"stress\",\"uid\":\"ddc5ca81-b677-4595-b691-0ce57bedb156\",\"Load\":0,\"Workers\":0,\"Size\":\"100MB\",\"Options\":null,\"StressngPid\":0}","launch_mode":"svr"}]

恢复 Chaosd 实验

在创建完实验后,如果想撤销实验造成的影响,可以使用实验的恢复功能。

使用命令行模式恢复实验

你可以通过使用 Chaosd recover UID 的方式恢复实验。

以下为在命令行模式下通过该方式恢复实验的示例。

  1. 使用 Chaosd 创建一个 CPU 压力实验:

    1. chaosd attack stress cpu --workers 2 --load 10

    输出如下所示:

    1. [2021/05/12 03:38:33.698 +00:00] [INFO] [stress.go:66] ["stressors normalize"] [arguments=" --cpu 2 --cpu-load 10"]
    2. [2021/05/12 03:38:33.702 +00:00] [INFO] [stress.go:82] ["Start stress-ng process successfully"] [command="/usr/bin/stress-ng --cpu 2 --cpu-load 10"] [Pid=27483]
    3. Attack stress cpu successfully, uid: 4f33b2d4-aee6-43ca-9c43-0f12867e5c9c

    请注意保存输出中的实验 UID 信息,以便在下一步操作中使用。

  2. 在不需要模拟 CPU 压力场景时,使用 recover 命令来恢复 UID 对应的实验:

    1. chaosd recover 4f33b2d4-aee6-43ca-9c43-0f12867e5c9c

使用服务模式恢复实验

你可以通过向 Chaosd 服务的 /api/attack/{uid} 路径发送 DELETE HTTP 请求的方式来恢复实验。

以下为在服务模式下通过该方式恢复实验的示例。

  1. 向 Chaosd 服务发送 POST HTTP 请求,创建一个 CPU 压力实验:

    1. curl -X POST 172.16.112.130:31767/api/attack/stress -H "Content-Type:application/json" -d '{"load":10, "action":"cpu","workers":1}'

    输出如下所示:

    1. {"status":200,"message":"attack successfully","uid":"c3c519bf-819a-4a7b-97fb-e3d0814481fa"}

    请注意保存输出中的实验 UID 信息,以便在下一步操作中使用。

  2. 在不需要模拟 CPU 压力场景时,运行以下命令来结束 UID 对应的实验:

    1. curl -X DELETE 172.16.112.130:31767/api/attack/c3c519bf-819a-4a7b-97fb-e3d0814481fa