A-A+

ChaosBlade 混沌实验实施工具 (Linux测试工具)

2021年10月15日 13:54 学习笔记 暂无评论 共6055字 (阅读121 views次)

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】

ChaosBlade 不仅使用简单,而且支持丰富的实验场景,场景包括:

  • 基础资源:比如 CPU、内存、网络、磁盘、进程等实验场景;
  • Java 应用:比如数据库、缓存、消息、JVM 本身、微服务等,还可以指定任意类方法注入各种复杂的实验场景;
  • C++ 应用:比如指定任意方法或某行代码注入延迟、变量和返回值篡改等实验场景;
  • Docker 容器:比如杀容器、容器内 CPU、内存、网络、磁盘、进程等实验场景;
  • 云原生平台:比如 Kubernetes 平台节点上 CPU、内存、网络、磁盘、进程实验场景,Pod 网络和 Pod 本身实验场景如杀 Pod,容器的实验场景如上述的 Docker 容器实验场景;

experiments landscape

ChaosBlade本地测试:

ChaosBlade 安装方法:

 

wget https://chaosblade.oss-cn-hangzhou.aliyuncs.com/agent/github/1.3.0/chaosblade-1.3.0-linux-amd64.tar.gz
# 目录结构
├── chaosblade-1.3.0
│   ├── bin
│   │   ├── chaos_addfile
│   │   ├── chaos_appendfile
│   │   ├── chaos_burncpu
│   │   ├── chaos_burnio
│   │   ├── chaos_burnmem
│   │   ├── chaos_changedns
│   │   ├── chaos_chmodfile
│   │   ├── chaos_deletefile
│   │   ├── chaos_dropnetwork
│   │   ├── chaos_filldisk
│   │   ├── chaos_fuse
│   │   ├── chaos_killprocess
│   │   ├── chaos_movefile
│   │   ├── chaos_occupynetwork
│   │   ├── chaos_os
│   │   ├── chaos_stopprocess
│   │   ├── chaos_stopsystemd
│   │   ├── chaos_stracedelay
│   │   ├── chaos_straceerror
│   │   ├── chaos_tcnetwork
│   │   └── strace
│   ├── blade
│   ├── lib
│   │   ├── cplus
│   │   │   ├── chaosblade-exec-cplus
│   │   │   └── script
│   │   │       ├── shell_break_and_return_attach.sh
│   │   │       ├── shell_break_and_return.sh
│   │   │       ├── shell_check_process_duplicate.sh
│   │   │       ├── shell_check_process_id.sh
│   │   │       ├── shell_initialization.sh
│   │   │       ├── shell_modify_variable_attach.sh
│   │   │       ├── shell_modify_variable.sh
│   │   │       ├── shell_remove_process.sh
│   │   │       ├── shell_response_delay_attach.sh
│   │   │       └── shell_response_delay.sh
│   │   └── sandbox
│   │       ├── bin
│   │       │   └── sandbox.sh
│   │       ├── cfg
│   │       │   ├── sandbox-logback.xml
│   │       │   ├── sandbox.properties
│   │       │   └── version
│   │       ├── example
│   │       │   └── sandbox-debug-module.jar
│   │       ├── install-local.sh
│   │       ├── lib
│   │       │   ├── sandbox-agent.jar
│   │       │   ├── sandbox-core.jar
│   │       │   └── sandbox-spy.jar
│   │       ├── module
│   │       │   ├── chaosblade-java-agent-1.3.0.jar
│   │       │   └── sandbox-mgr-module.jar
│   │       ├── provider
│   │       │   └── sandbox-mgr-provider.jar
│   │       ├── sandbox-module
│   │       └── tools.jar
│   └── yaml
│       ├── chaosblade-check-spec-1.3.0.yaml
│       ├── chaosblade-cplus-spec.yaml
│       ├── chaosblade-docker-spec-1.3.0.yaml
│       ├── chaosblade-jvm-spec-1.3.0.yaml
│       ├── chaosblade-k8s-spec-1.3.0.yaml
│       └── chaosblade-os-spec-1.3.0.yaml

# 说明 可以查看命令帮助
./blade help 

ChaosBlade使用方法

1、停止之前的操作(适用于任何方法)

 
任何命令执行都有会有相应的返回结果,类似返回结果 {"code":200,"success":true,"result":"207d6705dde937ad"},请一定要记住返回结果中的result,后续只要停止对应的result值即可。

./blade destroy 207d6705dde937ad

CPU 性能测试操作方法

 
参数

--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 fullload
# 返回结果 {"code":200,"success":true,"result":"207d6705dde937ad"}
# 停止
./blade destroy 207d6705dde937ad
# 让cpu负载到60%
./blade create cpu load --cpu-percent 60

 

磁盘操作 占用操作方法

 
参数

--path string 指定提升磁盘 io 的目录,会作用于其所在的磁盘上,默认值是 /
--read 触发提升磁盘读 IO 负载,会创建 600M 的文件用于读,销毁实验会自动删除
--size string 块大小, 单位是 M, 默认值是 10,一般不需要修改,除非想更大的提高 io 负载
--timeout string 设定运行时长,单位是秒,通用参数
--write 触发提升磁盘写 IO 负载,会根据块大小的值来写入一个文件,比如块大小是 10,则固定的块的数量是 100,则会创建 1000M 的文件,销毁实验会自动删除

命令操作

# 磁盘 填充到90%
./blade create disk fill --path /data --percent 90 --retain-handle
./blade destroy UID
# 试验期前观察命令 iostat -x -t 2
# 主要观察 rkB/s、wkB/s、%util 数据。执行磁盘读 IO 负载高场景
./blade create disk burn --read --path /home
./blade create disk burn --write --path /home
# 读写同时操作。
# --size string 块大小, 单位是 M, 默认值是 10
# --timeout string 设定运行时长,单位是秒,通用参数
./blade create disk burn --write --read  --size 10 --timeout 300 

 

内存操作 占用操作方法

 
参数:

--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 设定运行时长,单位是秒,通用参数

命令操作

# 内存占用到90%
./blade c mem load --mode ram --mem-percent 90
# 保留 200M 内存,内存占用速度为100m/s  逐步增高占用
./blade c mem load --mode ram --reserve 200 --rate 100
# 如果恢复不了,请重启机器

 

网络操作操作 占用操作方法

 
参数

--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 设定运行时长,单位是秒,通用参数

命令操作

# 修改host 在/etc/hosts中新增一条记录
./blade create network dns --domain www.hidden.com --ip 127.0.0.1
# 网络延时 time指定延迟时间,单位为ms, offset指定延迟波动大小
./blade create network delay --interface eth0 --time 300
./blade create network delay --interface eth0 --time 300 --offset 50 --local-port 8080,8081
# 丢包 70%。100%即网络中断
./blade create network loss --percent 70 --interface eth0 --local-port 8080

 

杀进程操作(只能杀不能恢复,验证程序的自恢复能力)

 
参数

--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

 

暂停进程(让进程hang住,验证程序的容错能力)

 
参数

--process string 进程关键词,会在整个命令行中查找
--process-cmd string 进程命令,只会在命令中查找
--timeout string 设定运行时长,单位是秒,通用参数

命令操作

# 暂停包含 SimpleHTTPServer 关键词的进程
./blade create process stop --process SimpleHTTPServer
# 暂停 java 进程
./blade create process stop --process-cmd java

 

容器操作(如果执行 CPU 场景,必须指定 chaosblade 安装包,因为需要将安装包拷贝到容器 /opt 目录下执行)

 
参数

--blade-override 是否覆盖容器内已有的 chaosblade 工具,默认是 false,表示不覆盖,chaosblade 在容器内的部署路径为 /opt/chaosblade
--chaosblade-release 本地chaosblade路径
--container-id string 目标容器 ID
--docker-endpoint string Docker server 地址,默认为本地的 /var/run/docker.sock

CPU操作命令

# cpu负载升高
./blade create docker cpu fullload --cpu-percent 90 --chaosblade-release /data/app/chaosblabe/chaosblade-1.3.0-linux-amd64.tar.gz --container-id 6ed8ca5c9450

网络命令:

./blade create docker network -h

-----------------------
------------------------
-------------------------
此工具docker镜像的安装方式

# 拉取镜像
docker pull chaosbladeio/chaosblade-demo
# 启动
docker run -it --privileged chaosbladeio/chaosblade-demo

说明及参考文档
https://github.com/chaosblade-io/chaosblade/blob/master/README_CN.md
https://chaosblade-io.gitbook.io/chaosblade-help-zh-cn/blade-create-k8s

布施恩德可便相知重

微信扫一扫打赏

支付宝扫一扫打赏

×

给我留言