chaos混沌工程

目录

混沌工程

1.Chaosd

1. 下载

2. 创建实验

3. 检查实验效果

4. 恢复实验

2.Chaosblade

1.模拟CPU异常

2.模拟内存使用

3.模拟磁盘IO使用

4.模拟磁盘空间填充

5.模拟网络延迟

6.模拟网络丢包率

7.模拟网络包重复发送

8.网络包重新排序

8.模拟停止进程

9.模拟进程暂停

10.模拟shell 脚本延迟执行

11.模拟脚本函数退出

12 命令执行状态查询


混沌工程

相比于我们成天担惊受怕系统会出现什么样的问题,还不如提前就模拟线上环境可能出现的各种情况,来看我们的系统是否能做到容错,仍然能继续对外提供服务。当然,我们并不是简单的就在线上环境上面,把机器给断电,或者把网线给拔掉,在混沌工程领域,有一套指导原则,以及标准的实验步骤,具体的可以参考 PRINCIPLES OF CHAOS ENGINEERING

Chaos Mesh® 是基于 K8s 的混沌测试平台,而对于部署在物理机上的应用来说,混沌测试同样重要。本文将向大家介绍一款基于 Chaos Mesh®️ 打造的混沌工程测试工具 Chaosd,用于在物理机环境上注入故障,并提供故障恢复功能。

1.Chaosd

Chaosd 是什么?

相信大家对 Chaos Mesh® 已经比较了解了:支持多种类型的混沌实验,有 Dashboard web 界面直接管理实验,TiDB 使用它保障产品质量,还有小鹏汽车、网易、光大银行等众多用户。这么好的工具当然想亲手试一试,动手的时候发现:没有 K8s 环境用不了!

这是因为 Chaos Mesh® 是云原生的混沌工程测试平台,专门为 K8s 设计的。然而你的应用还是用物理机环境部署的,太遗憾了,有故障的时候看告警邮件吧。

请留步,试试 Chaosd?

可能你还是第一次听说 Chaosd,它是 Chaos Mesh® 提供的一款混沌工程测试工具,用于在物理机环境上注入故障,并提供故障恢复功能。看它的名字是不是和 Chaos Mesh® 中的组件 chaos-daemon 比较相似?是的,它正是由 chaos-daemon 演化而来,并针对物理机的特点增加了一些专门的混沌实验功能。

Chaosd 有什么优势

Chaosd 具有以下这些优点

  • 易用性强:输入简单的 Chaosd 命令即可创建混沌实验,并对实验进行管理。
  • 故障类型丰富:在物理机的不同层次、不同类型上都提供了故障注入的功能,包括进程、网络、JVM、压力、磁盘、主机等,且更多的功能在不断扩展中。
  • 支持多种模式:Chaosd 既可作为命令行工具使用,也可以作为服务使用,满足不同场景的使用需求。

说了这么多,让我们来试一试。最近我们刚发布了 v1.0.1 版本,就用这个版本来简单演示一下。

Chaosd 的使用

1. 下载

首先要下载 Chaosd,执行以下命令:

curl -fsSL -o chaosd-v1.0.1-linux-amd64.tar.gz https://mirrors.chaos-mesh.org/chaosd-v1.0.1-linux-amd64.tar.gz

解压这个文件,可以看到它包含一个 chaosd 文件和一个 tools 文件夹。chaosd 是工具的入口;tools 文件夹下面包含执行混沌实验所需要的一些工具,包括 stress-ng(压力场景)、byteman(JVM 故障)、PortOccupyTool(网络故障占用端口)等。

2. 创建实验

我们以创建一个网络类型的混沌实验为例,注入故障,使服务器无法访问 chaos-mesh.org,执行以下命令:

sudo ./chaosd attack network loss --percent 100 --hostname chaos-mesh.org --device ens33

Attack network successfully, uid: c55a84c5-c181-426b-ae31-99c8d4615dbe

简单来说,这个命令的作用是:通过 ens33 网卡向 chaos-mesh.org 发送或者接收的网络包会 100% 丢失。使用 sudo 是因为该实验会修改网络规则, 需要 root 权限。

此外,别忘了保存好这个实验的 uid,用于后续的实验恢复。

3. 检查实验效果

让我们通过 ping 命令来检查是否可以正常访问 chaos-mesh.org:

ping chaos-mesh.org

PING chaos-mesh.org (185.199.109.153) 56(84) bytes of data.

^C

--- chaos-mesh.org ping statistics ---

2 packets transmitted, 0 received, 100% packet loss, time 1021ms

执行命令后会卡住,迟迟得不到响应,按 CTRL C 退出后可以看到 ping 的统计信息:100% packet loss。说明我们的实验确实生效了。

4. 恢复实验

运行以下命令恢复实验:

sudo ./chaosd recover c55a84c5-c181-426b-ae31-99c8d4615dbe

Recover c55a84c5-c181-426b-ae31-99c8d4615dbe successfully

恢复实验时也会修改网络规则,因此也需要使用 sudo。在执行完成后,可以再 ping chaos-mesh.org 确认网络已经恢复。

后续的规划

提高易用性 & 平台化

从上面的使用示例中可以看到,Chaosd 用起来还是挺简单的,通过命令行就可以创建实验。但是肯定有些人还不太满意:有 Dashboard web 界面能用吗?答案是:目前还没有,但是已经在着手开发了。

我们会继续加强它的易用性,提供 Dashboard web 管理功能,不仅可以管理物理机上 Chaosd 的实验,还可以管理 Chaos Mesh® 上的实验,这样就把物理机环境和 K8s 环境的混沌实验统一管理起来。在去年的 TiDB Hackathon 中我们简单做了一个 demo,架构如下:

详细介绍可以参考 Chaos Mesh® 的 Chaos Engineering as a Service 探索之路

更多的故障注入功能

目前 Chaosd 提供了进程、网络、JVM、压力、磁盘、主机总共六大故障注入功能,但是仍然需要继续拓展。

_____________________________________________________________________________

2.Chaosblade

download -https://github.com/chaosblade-io/chaosblade/releases

usage:blade create cpu load - chaosblade-help-zh-CN

#异常模拟场景使用说明

1.模拟CPU异常

命令:blade create cpu load  [选项参数]

参数:

  --timeout string  设定运行时长,单位是秒,通用参数

  --cpu-count string    指定 CPU 满载的个数

  --cpu-list string      指定 CPU 满载的具体核,核索引从 0 开始 (0-3 or 1,3)

  --cpu-percent string  指定 CPU 负载百分比,取值在 0-100

样例:

# 创建 CPU 满载实验

blade create cpu load

# 返回结果如下

{"code":200,"success":true,"result":"beeaaf3a7007031d"}

# code 的值等于 200 说明执行成功,其中 result 的值就是 uid。使用 top 命令验证实验效果

# 4 核都满载,实验生效,销毁实验

blade destroy beeaaf3a7007031d

# 返回结果如下

{"code":200,"success":true,"result":"command: cpu load --help false --debug false"}

# 指定随机两个核满载

blade create cpu load --cpu-count 2

# 使用 top 命令验证结果如下,实验生效

# 指定索引是 0,3 的核满载,核的索引从 0 开始

blade create cpu load --cpu-list 0,3

# 使用 top 命令验证结果如下,实验生效

# 指定索引 1 到 3 的核满载

blade create cpu load --cpu-list 1-3

# 指定百分比负载

blade create cpu load --cpu-percent 60

# 可以看到 CPU 总的使用率达到 60%, 空闲 40%

2.模拟内存使用

命令:blade create mem load [选项参数]

参数:

    --mem-percent string    内存使用率,取值是 0 到 100 的整数

    --mode string  内存占用模式,有 ram 和 cache 两种,例如 --mode ram。ram 采用代码实现,可控制占用速率,优先推荐此模式;cache 是通过挂载tmpfs实现;默认值是 --mode cache

    --reserve string    保留内存的大小,单位是MB,如果 mem-percent 参数存在,则优先使用 mem-percent

    --rate string 内存占用速率,单位是 MB/S,仅在 --mode ram 时生效

    --timeout string  设定运行时长,单位是秒,通用参数

样例:

# 在执行命令之前,先使用 top 命令查看内存使用信息,如下,总内存大小是 8G,使用了 7.6%

KiB Mem :  7.6/8010196 

# 执行内存占用 50%

blade c mem load --mode ram --mem-percent 50

# 查看内存使用

KiB Mem : 50.0/8010196

# 执行内存占用 100%

KiB Mem : 99.6/8010196

# 保留 200M 内存,总内存大小 1G

blade c mem load --mode ram --reserve 200 --rate 100

KiB Mem :  1014744 total,    78368 free,  663660 used,  272716 buff/cache

KiB Swap:        0 total,        0 free,        0 used.  209652 avail Mem

KiB Mem : 79.7/1014744  [||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||                  ]

3.模拟磁盘IO使用

  命令: blade create disk burn  [选项参数]

  参数:

  --path string      指定提升磁盘 io 的目录,会作用于其所在的磁盘上,默认值是 /

  --read            触发提升磁盘读 IO 负载,会创建 600M 的文件用于读,销毁实验会自动删除

  --size string      块大小, 单位是 M, 默认值是 10,一般不需要修改,除非想更大的提高 io 负载

  --timeout string  设定运行时长,单位是秒,通用参数

  --write            触发提升磁盘写 IO 负载,会根据块大小的值来写入一个文件,比如块大小是 10,则固定的块的数量是 100,则会创建 1000M 的文件,销毁实验会自动删除

  样例:

# 在执行实验之前可先观察磁盘 io 读写负载

iostat -x -t 2

# 上述命令会 2 秒刷新一次读写负载数据,截取结果如下

Device:        rrqm/s  wrqm/s    r/s    w/s    rkB/s    wkB/s avgrq-sz avgqu-sz  await r_await w_await  svctm  %util

vda              0.00    2.50    0.00    2.00    0.00    18.00    18.00    0.00    1.25    0.00    1.25  1.25  0.25

# 主要观察 rkB/s、wkB/s、%util 数据。执行磁盘读 IO 负载高场景

blade create disk burn --read --path /home

# 执行 iostat 命令可以看到读负载增大,使用率达 99.9%。执行 blade destroy UID(上述执行实验返回的 result 值)可销毁实验。

Device:        rrqm/s  wrqm/s    r/s    w/s    rkB/s    wkB/s avgrq-sz avgqu-sz  await r_await w_await  svctm  %util

vda              0.00    3.00  223.00    2.00 108512.00    20.00  964.73    11.45  50.82  51.19  10.00  4.44  99.90

# 销毁上述实验后,执行磁盘写 IO 负载高场景

blade create disk burn --write --path /home

# 执行 iostat 命令可以看到写负载增大,使用率达 90.10%。

Device:        rrqm/s  wrqm/s    r/s    w/s    rkB/s    wkB/s avgrq-sz avgqu-sz  await r_await w_await  svctm  %util

vda              0.00    43.00    0.00  260.00    0.00 111572.00  858.25    15.36  59.71    0.00  59.71  3.47  90.10

# 可同时执行读写 IO 负载场景,不指定 path,默认值是 /

blade create disk burn --read --write

# 通过 iostat 命令可以看到,整个磁盘的 io 使用率达到了 100%

Device:        rrqm/s  wrqm/s    r/s    w/s    rkB/s    wkB/s avgrq-sz avgqu-sz  await r_await w_await  svctm  %util

vda              0.00    36.00  229.50  252.50 108512.00 107750.00  897.35    30.09  62.70  53.49  71.07  2.07 100.00

4.模拟磁盘空间填充

命令:blade create disk fill [选项参数]

参数

    --path string      需要填充的目录,默认值是 /

    --size string      需要填充的文件大小,单位是 M,取值是整数,例如 --size 1024

    --reserve string  保留磁盘大小,单位是MB。取值是不包含单位的正整数,例如 --reserve 1024。如果 size、percent、reserve 参数都存在,优先级是 percent > reserve > size

    --percent string  指定磁盘使用率,取值是不带%号的正整数,例如 --percent 80

    --retain-handle    是否保留填充

    --timeout string  设定运行时长,单位是秒,通用参数

样例:

# 执行实验之前,先看下 /home 所在磁盘的大小

df -h /home

Filesystem      Size  Used Avail Use% Mounted on

/dev/vda1        40G  4.0G  34G  11% /

# 执行磁盘填充,填充 40G,即达到磁盘满的效果(可用34G)

blade create disk fill --path /home --size 40000

# 返回结果

{"code":200,"success":true,"result":"7a3d53b0e91680d9"}

# 查看磁盘大小

df -h /home

Filesystem      Size  Used Avail Use% Mounted on

/dev/vda1        40G  40G    0 100% /

# 销毁实验

blade destroy 7a3d53b0e91680d9

{"code":200,"success":true,"result":"command: disk fill --debug false --help false --path /home --size 40000"}

# 查看磁盘大小

df -h /home

Filesystem      Size  Used Avail Use% Mounted on

/dev/vda1        40G  4.0G  34G  11% /

# 执行按百分比填充磁盘,并且保留填充磁盘的文件句柄

blade c disk fill --path /home --percent 80 --retain-handle

{"code":200,"success":true,"result":"f1fa65e70950d0eb"}

df -h

/dev/vda1        40G  30G  8.1G  79% /

# 查看文件句柄

lsof /home/chaos_filldisk.log.dat

COMMAND    PID USER  FD  TYPE DEVICE    SIZE/OFF  NODE NAME

chaos_fil 19297 root    3r  REG  253,1 17697865728 394174 /home/chaos_filldisk.log.dat

# 执行保留固定大小实验场景

blade c disk fill --path /home --reserve 1024

df -h

Filesystem      Size  Used Avail Use% Mounted on

/dev/vda1        40G  37G  1.1G  98% /

5.模拟网络延迟

命令:blade create network delay [选项参数]

参数

  --destination-ip string  目标 IP. 支持通过子网掩码来指定一个网段的IP地址, 例如 192.168.1.0/24. 则 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通过都号分隔多个参数,例如 192.168.1.1,192.168.2.1。

  --exclude-port string    排除掉的端口,默认会忽略掉通信的对端端口,目的是保留通信可用。可以指定多个,使用逗号分隔或者连接符表示范围,例如 22,8000 或者 8000-8010。 这个参数不能与 --local-port 或者 --remote-port 参数一起使用

  --exclude-ip string      排除受影响的 IP,支持通过子网掩码来指定一个网段的IP地址, 例如 192.168.1.0/24. 则 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通过都号分隔多个参数,例如 192.168.1.1,192.168.2.1。

  --interface string        网卡设备,例如 eth0 (必要参数)

  --local-port string      本地端口,一般是本机暴露服务的端口。可以指定多个,使用逗号分隔或者连接符表示范围,例如 80,8000-8080

  --offset string          延迟时间上下浮动的值, 单位是毫秒

  --remote-port string      远程端口,一般是要访问的外部暴露服务的端口。可以指定多个,使用逗号分隔或者连接符表示范围,例如 80,8000-8080

  --time string            延迟时间,单位是毫秒 (必要参数)

  --force                  强制覆盖已有的 tc 规则,请务必在明确之前的规则可覆盖的情况下使用

  --ignore-peer-port        针对添加 --exclude-port 参数,报 ss 命令找不到的情况下使用,忽略排除端口

  --timeout string          设定运行时长,单位是秒,通用参数

  样例:

# 访问本机 8080 和 8081 端口延迟 3 秒,延迟时间上下浮动 1 秒

blade create network delay --time 3000 --offset 1000 --interface eth0 --local-port 8080,8081

{"code":200,"success":true,"result":"9b4aa9fabe073624"}

# 可以在另一台相同网络内的机器通过 telnet 命令验证,即 telnet xxx.xxx.xxx.xxx 8080

# 销毁实验

blade destroy 9b4aa9fabe073624

# 本机访问外部 14.215.177.39 机器(ping www.baidu.com 获取到的 IP)80 端口延迟 3 秒

blade create network delay --time 3000 --interface eth0 --remote-port 80 --destination-ip 14.215.177.39

# 可在本机通过 telnet 14.215.177.39 80 命令验证

# 对整个网卡 eth0 做 5 秒延迟,排除 22 和 8000到8080 端口

blade create network delay --time 5000 --interface eth0 --exclude-port 22,8000-8080

# 会发现 22 端口和 8000 到 8080 端口不受影响,可在另一台相同网络内的机器通过分别 telnet xxx.xxx.xxx.xxx 8080 和 telnet xxx.xxx.xxx.xxx 8081 进行测试

6.模拟网络丢包率

命令: blade create network loss  [选项参数]

参数

  --destination-ip string  目标 IP. 支持通过子网掩码来指定一个网段的IP地址, 例如 192.168.1.0/24. 则 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通过都号分隔多个参数,例如 192.168.1.1,192.168.2.1。

  --exclude-port string    排除掉的端口,默认会忽略掉通信的对端端口,目的是保留通信可用。可以指定多个,使用逗号分隔或者连接符表示范围,例如 22,8000 或者 8000-8010。 这个参数不能与 --local-port 或者 --remote-port 参数一起使用

  --exclude-ip string      排除受影响的 IP,支持通过子网掩码来指定一个网段的IP地址, 例如 192.168.1.0/24. 则 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通过都号分隔多个参数,例如 192.168.1.1,192.168.2.1。

  --interface string        网卡设备,例如 eth0 (必要参数)

  --local-port string      本地端口,一般是本机暴露服务的端口。可以指定多个,使用逗号分隔或者连接符表示范围,例如 80,8000-8080

  --percent string          丢包百分比,取值在[0, 100]的正整数 (必要参数)

  --remote-port string      远程端口,一般是要访问的外部暴露服务的端口。可以指定多个,使用逗号分隔或者连接符表示范围,例如 80,8000-8080

  --force                  强制覆盖已有的 tc 规则,请务必在明确之前的规则可覆盖的情况下使用

  --ignore-peer-port        针对添加 --exclude-port 参数,报 ss 命令找不到的情况下使用,忽略排除端口

  --timeout string          设定运行时长,单位是秒,通用参数

样例:

# 访问本机 8080 和 8081 端口丢包率 70%

blade create network loss --percent 70 --interface eth0 --local-port 8080,8081

{"code":200,"success":true,"result":"b1cea124e2383848"}

# 可以在另一台相同网络内的机器通过 curl 命令验证,即 curl  xxx.xxx.xxx.xxx:8080,不使用 telnet 的原因是 telnet 内部有重试机制,影响实验验证。如果将 percent 的值设置为 100,可以使用 telnet 验证。

# 销毁实验

blade destroy b1cea124e2383848

# 本机访问外部 14.215.177.39 机器(ping www.baidu.com 获取到的 IP)80 端口丢包率 100%

blade create network loss --percent 100 --interface eth0 --remote-port 80 --destination-ip 14.215.177.39

# 可在本机通过 curl 14.215.177.39 命令验证,会发现访问不通。执行 curl 14.215.177.38 是通的。

# 对整个网卡 eth0 做 60% 的丢包,排除 22 和 8000到8080 端口

blade create network loss --percent 60 --interface eth0 --exclude-port 22,8000-8080

# 会发现 22 端口和 8000 到 8080 端口不受影响,可在另一台相同网络内的机器通过分别执行多次 curl xxx.xxx.xxx.xxx:8080 和 telnet xxx.xxx.xxx.xxx:8081 进行测试

# 实现整个网卡不可访问,不可访问时间 20 秒。执行完成下面命令后,当前的网络会中断掉,20 秒后恢复。切记!!勿忘 --timeout 参数

blade create network loss --percent 100 --interface eth0 --timeout 20

7.模拟网络包重复发送

  命令:blade create network duplicate [选项参数]

  参数

  --destination-ip string  目标 IP. 支持通过子网掩码来指定一个网段的IP地址, 例如 192.168.1.0/24. 则 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通过都号分隔多个参数,例如 192.168.1.1,192.168.2.1。

--exclude-port string    排除掉的端口,默认会忽略掉通信的对端端口,目的是保留通信可用。可以指定多个,使用逗号分隔或者连接符表示范围,例如 22,8000 或者 8000-8010。 这个参数不能与 --local-port 或者 --remote-port 参数一起使用

--exclude-ip string      排除受影响的 IP,支持通过子网掩码来指定一个网段的IP地址, 例如 192.168.1.0/24. 则 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通过都号分隔多个参数,例如 192.168.1.1,192.168.2.1。

--interface string        网卡设备,例如 eth0 (必要参数)

--local-port string      本地端口,一般是本机暴露服务的端口。可以指定多个,使用逗号分隔或者连接符表示范围,例如 80,8000-8080

--offset string          延迟时间上下浮动的值, 单位是毫秒

--remote-port string      远程端口,一般是要访问的外部暴露服务的端口。可以指定多个,使用逗号分隔或者连接符表示范围,例如 80,8000-8080

--percent                包重复百分比,取值是不带%号的正整数

--force                  强制覆盖已有的 tc 规则,请务必在明确之前的规则可覆盖的情况下使用

--ignore-peer-port        针对添加 --exclude-port 参数,报 ss 命令找不到的情况下使用,忽略排除端口

--timeout string          设定运行时长,单位是秒,通用参数

样例:

# 访问指定的 ip 请求包损坏,百分比 80%

blade create network corrupt --percent 80 --destination-ip 180.101.49.12 --interface eth0

ping 180.101.49.12

8.网络包重新排序

  命令:blade create network reorder [选项参数]

  参数

--destination-ip string  目标 IP. 支持通过子网掩码来指定一个网段的IP地址, 例如 192.168.1.0/24. 则 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通过都号分隔多个参数,例如 192.168.1.1,192.168.2.1。

--exclude-port string    排除掉的端口,默认会忽略掉通信的对端端口,目的是保留通信可用。可以指定多个,使用逗号分隔或者连接符表示范围,例如 22,8000 或者 8000-8010。 这个参数不能与 --local-port 或者 --remote-port 参数一起使用

--exclude-ip string      排除受影响的 IP,支持通过子网掩码来指定一个网段的IP地址, 例如 192.168.1.0/24. 则 192.168.1.0~192.168.1.255 都生效。你也可以指定固定的 IP,如 192.168.1.1 或者 192.168.1.1/32,也可以通过都号分隔多个参数,例如 192.168.1.1,192.168.2.1。

--interface string        网卡设备,例如 eth0 (必要参数)

--local-port string      本地端口,一般是本机暴露服务的端口。可以指定多个,使用逗号分隔或者连接符表示范围,例如 80,8000-8080

--offset string          延迟时间上下浮动的值, 单位是毫秒

--remote-port string      远程端口,一般是要访问的外部暴露服务的端口。可以指定多个,使用逗号分隔或者连接符表示范围,例如 80,8000-8080

--correlation string      和上一包的相关性,取值在 0~100,必要参数,例如 --correlation 70

--gap string              包序列大小,取值是正整数,例如 --gap 5

--percent string          立即发送百分比,取值是不带%号的正整数,例如 --percent 50,(必要参数)

--time string            网络包延迟时间,单位是毫秒,默认值是 10,取值时正整数

--force                  强制覆盖已有的 tc 规则,请务必在明确之前的规则可覆盖的情况下使用

--ignore-peer-port        针对添加 --exclude-port 参数,报 ss 命令找不到的情况下使用,忽略排除端口

--timeout string          设定运行时长,单位是秒,通用参数

样例:

# 访问指定的 ip 请求包乱序

blade c network reorder --correlation 80 --percent 50 --gap 2 --time 500 --interface eth0 --destination-ip 180.101.49.12

ping 180.101.49.12 -A

8.模拟停止进程

命令:blade create process kill

参数

  --process string      进程关键词,会在整个命令行中查找

  --process-cmd string  进程命令,只会在命令中查找

  --count string      限制杀掉进程的数量,0 表示无限制

  --signal string    指定杀进程的信号量,默认是 9,例如 --signal 15

  --timeout string  设定运行时长,单位是秒,通用参数

例子

# 删除包含 SimpleHTTPServer 关键词的进程

blade create process kill --process SimpleHTTPServer

# 删除 java 进程

blade create process kill --process-cmd java

# 指定信号量和本地端口杀进程

blade c process kill --local-port 8080 --signal 15

# 执行前

netstat -tanp | grep 8080

tcp        0      0 0.0.0.0:8080            0.0.0.0:*              LISTEN      10764/java

# 执行后此进程已不存在

9.模拟进程暂停

命令:blade create process stop [选项参数]

参数

--process string      进程关键词,会在整个命令行中查找

--process-cmd string  进程命令,只会在命令中查找

--timeout string  设定运行时长,单位是秒,通用参数

样例

# 暂停包含 SimpleHTTPServer 关键词的进程

blade create process stop --process SimpleHTTPServer

# 暂停 java 进程

blade create process stop --process-cmd java

备注: 查找不到 UID,无法恢复暂停的进程 A:手动执行 kill -CONT PIDS

10.模拟shell 脚本延迟执行

命令:blade create script delay [选项参数]

参数

--time string      延迟时间,单位是毫秒(必要参数)

--timeout string  设定运行时长,单位是秒,通用参数

--file string      脚本路径(必要参数)

--function-name string  脚本中的函数名(必要参数)

样例

#  blade create script delay --time 10000 --file test.sh --function-name start0

{"code":200,"success":true,"result":"b6a0f477b7fb1f4c"}

# 会在脚本中添加如下命令:

start0() {

sleep 10.000000

...

}

11.模拟脚本函数退出

命令:blade create script exit

参数

--exit-code string      退出码,默认值是 1

--exit-message string  退出信息

--timeout string  设定运行时长,单位是秒,通用参数

--file string      脚本路径(必要参数)

--function-name string  脚本中的函数名(必要参数)

样例

# blade create script exit --exit-code 1 --exit-message this-is-error-message --file test.sh --function-name start0

{"code":200,"success":true,"result":"d8a016b96380d7f3"}

# 执行脚本会触发场景。查看脚本修改如下:

start0() {

echo this-is-error-message;exit 1

...

}

12 命令执行状态查询

  命令:blade status [选项参数]

  参数

  --asc bool        默认值为 false,按 CreateTime 进行降序排序

  --limit string    查询实验数目限制,支持 OFFSET 子句,例如:limit 4,3 就表示从位置5开始,返回后3项

  --status string  实验状态,create 类型支持 Created|Success|Error|Destroyed 状态,prepare 类型支持 Created|Running|Error|Revoked 状态

  --target string  实验目标,例如:dubbo

  --type string    命令类型,attach|create|destroy|detach

  --uid string      prepare 或 experiment 的 uid

  -h, --help        查看 create 命令帮助

样例:

  # 查看 status 命令帮助文档

blade status -h

# 查询 uid 为 4c6b4a3fc313e1d4 的实验信息

blade status 4c6b4a3fc313e1d4

{

        "code": 200,

        "success": true,

        "result": {

            "Uid": "4c6b4a3fc313e1d4",

            "Command": "cpu",

            "SubCommand": "fullload",

            "Flag": " --cpu-percent=60",

            "Status": "Destroyed",

            "Error": "",

            "CreateTime": "2020-01-14T14:09:49.152708+08:00",

            "UpdateTime": "2020-01-14T14:10:45.605888+08:00"

        }

}

# 查询 create 类型命令的实验信息

blade status --type create

{

        "code": 200,

        "success": true,

        "result": [

            {

                "Uid": "4c6b4a3fc313e1d4",

                "Command": "cpu",

                "SubCommand": "fullload",

                "Flag": " --cpu-percent=60",

                "Status": "Destroyed",

                "Error": "",

                "CreateTime": "2020-01-14T14:09:49.152708+08:00",

                "UpdateTime": "2020-01-14T14:10:45.605888+08:00"

            }

        ]

}

# 查询 prepare 类型命令的实验信息

blade status --type prepare

{

        "code": 200,

        "success": true,

        "result": [

                {

                        "Uid": "e669d57f079a00cc",

                        "ProgramType": "jvm",

                        "Process": "dubbo.consumer",

                        "Port": "59688",

                        "Status": "Running",

                        "Error": "",

                        "CreateTime": "2019-03-29T16:19:37.284579975+08:00",

                        "UpdateTime": "2019-03-29T17:05:14.183382945+08:00"

                }

        ]

}

chaosblade -中文使用说明



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

chuntian_tester

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值