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

【注意:此文章为博主原创文章!转载需注意,请带原文链接,至少也要是txt格式!】
ChaosBlade 不仅使用简单,而且支持丰富的实验场景,场景包括:
- 基础资源:比如 CPU、内存、网络、磁盘、进程等实验场景;
- Java 应用:比如数据库、缓存、消息、JVM 本身、微服务等,还可以指定任意类方法注入各种复杂的实验场景;
- C++ 应用:比如指定任意方法或某行代码注入延迟、变量和返回值篡改等实验场景;
- Docker 容器:比如杀容器、容器内 CPU、内存、网络、磁盘、进程等实验场景;
- 云原生平台:比如 Kubernetes 平台节点上 CPU、内存、网络、磁盘、进程实验场景,Pod 网络和 Pod 本身实验场景如杀 Pod,容器的实验场景如上述的 Docker 容器实验场景;
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
布施恩德可便相知重
微信扫一扫打赏
支付宝扫一扫打赏