快速上手:混沌测试工具ChaosBlade

混沌测试的目的

混沌测试的目的在于确保系统在面对真实世界中的意外和不可预测事件时能够保持稳定运行。这类测试特别适用于复杂的分布式系统,如微服务架构和云原生应用。

ChaosBlade 简介

ChaosBlade 是阿里的一个开源的混沌工程测试工具,专门设计用于在各种环境下进行系统的故障模拟和鲁棒性测试。它支持多种类型的故障注入,包括 CPU、内存、磁盘IO、网络、应用进程等。

github地址:chaosblade-io/chaosblade: An easy to use and powerful chaos engineering experiment toolkit.(阿里巴巴开源的一款简单易用、功能强大的混沌实验注入工具) (github.com)

安装 ChaosBlade

获取 ChaosBlade 最新的 release 包,目前支持的平台是 linux/amd64 和 darwin/64,下载对应平台的包。

下载地址:Releases · chaosblade-io/chaosblade (github.com)

下载完成后解压即可,无需编译。解压后的目录如下:

├── bin
│   ├── chaos_burncpu
│   ├── chaos_burnio
│   ├── chaos_changedns
│   ├── chaos_delaynetwork
│   ├── chaos_dropnetwork
│   ├── chaos_filldisk
│   ├── chaos_killprocess
│   ├── chaos_lossnetwork
│   ├── jvm.spec.yaml
│   └── tools.jar
├── blade
└── lib
    └── sandbox

其中 blade 是可执行文件,即 chaosblade 工具的 cli,混沌实验执行的工具。执行 ./blade help 可以查看支持命令有哪些。


快速开始 

我们将通过两个实际例子来快速展示如何使用 ChaosBlade 进行混沌测试的

一、CPU 资源消耗实验

模拟 CPU 负载高的情况:

步骤 1: 创建实验

./blade create cpu fullload --cpu-percent 80

这个命令会使 CPU 使用率提升到约 80%,模拟出高负载的场景。

  • 系统返回信息示例: 
{"code":200,"success":true,"result":"b3a4ac3dd433dd4a"}

 这里的 JSON 输出表示命令执行成功。"result" 字段包含了实验的id,这里是 b3a4ac3dd433dd4a

步骤 2: 观察和分析

在实验进行期间,使用系统监控工具(如 tophtop)观察 CPU 使用率的变化。注意应用的性能表现和系统的稳定性。

步骤 3: 结束实验

完成观察后,使用返回的实验 ID 结束实验:

./blade destroy [实验ID]

二、网络延迟实验

在特定端口上模拟网络延迟:

./blade create network delay --time 1000 --interface eth0 --local-port 8080

这个命令在本地端口 8080 上创建 3000 毫秒的延迟。

步骤 2: 观察和分析

在实验进行期间,可以尝试访问通过该端口提供服务的应用,观察响应时间和服务质量。

步骤 3: 结束实验

实验结束后,使用返回的实验 ID 来停止模拟:

./blade destroy [实验ID]

常用的命令

  • 创建实验blade create <资源类型> <动作> <参数>
  • 查询实验blade status <实验ID>
  • 销毁实验blade destroy <实验ID>

更多使用场景 

接下来再简单介绍几个Chaosblade的其他常见使用场景:

场景一:模拟内存占用

# 在执行命令之前,先使用 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  [||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||                   ]

场景二:模拟磁盘IO负载实验 

# 在执行实验之前可先观察磁盘 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

场景三:模拟杀进程实验

# 删除包含 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

# 执行后此进程已不存在

更多的使用场景可以参考官方的文档:混沌工程实验类型 | ChaosBlade

  • 28
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值