chaosblade使用:blade server
Posted alden_ygq
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了chaosblade使用:blade server相关的知识,希望对你有一定的参考价值。
1 介绍
后台启动 blade,会暴露出 web 服务,上层可通过 http 调用,请求格式是 chaosblade?cmd=具体命令,例如执行 CPU 满载,则请求是 chaosblade?cmd=create%20cpu%20fullload
2 命令
start 启动 server 模式, 暴露 web 服务 stop 停止 server 模式, 关闭 web 服务
3 start 命令参数
-p, --port string 服务端口号,默认是 9526
4 案例
1)启动 server 模式,服务端口是 8080
$ blade server start --port 8080
success, listening on 8080
2)触发 CPU 负载 50% 场景
$ curl "http://xxx.xxx.xxx.xxx:8080/chaosblade?cmd=create%20cpu%20load%20--cpu-percent%2050"
"code":200,"success":true,"result":"e08a64a9af02c393"
3)销毁实验场景
$ curl "http://xxx.xxx.xxx.xxx:8080/chaosblade?cmd=destroy%20e08a64a9af02c393"
4)停止 blade server
$ blade server stop
"code":200,"success":true,"result":"pid is 12619"
5 常见问题
1)"code":605,"success":false,"error":"the chaosblade has been started. If you want to stop it, you can execute blade server stop command"
解决方案: 服务已经启动
2)"code":500,"success":false,"error":"time=\\"2019-09-25T11:36:28.321495762+08:00\\" level=error msg=\\"start blade server error, listen tcp :8080: bind: address already in use\\"\\n"
解决方案: 端口已被占用
[Chaosblade] chaosblade-jvm-exec和chaosblade交互
chaosblade-jvm-exec 是负责 chaosblade 中 Jvm 故障注入的模块,是基于 jvm-sandbox 的 java agent。本篇文章介绍下他俩的目录关系,以及交互逻辑。
1 目录关系
chaosblade-jvm-exec 最终是打包成为一个jar包,放在sandbox的目录下面,sandbox又在chaosblade的目录下。
├── bin
│ ├── chaos_addfile
│ ├── chaos_appendfile
│ ├── chaos_burncpu
│ ├── chaos_burnio
│ ├── chaos_burnmem
│ ├── chaos_changedns
│ ├── chaos_chmodfile
│ ├── chaos_deletefile
│ ├── chaos_dropnetwork
│ ├── chaos_filldisk
│ ├── chaos_killprocess
│ ├── chaos_movefile
│ ├── chaos_occupynetwork
│ ├── chaos_os
│ ├── chaos_stopprocess
│ ├── chaos_stracedelay
│ ├── chaos_straceerror
│ ├── chaos_tcnetwork
│ └── strace
├── blade
├── chaosblade.dat
├── lib
│ └── 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.2.0.jar
│ │ └── sandbox-mgr-module.jar
│ ├── provider
│ │ └── sandbox-mgr-provider.jar
│ ├── sandbox-module
│ └── tools.jar
├── logs
│ └── chaosblade.log
└── yaml
├── chaosblade-jvm-spec-1.2.0.yaml
└── chaosblade-os-spec-1.2.0.yaml
整个是chaosblade的目录, sandbox
在 lib/sandbox
下面, chaosblade-java-agent-1.2.0.jar(chaosblade-jvm-exec)
在lib/sandbox/module
下面,如果是为了快速的测试,直接替换 chaosblade-java-agent-1.2.0.jar 整个就可以测试了。
2 交互接口
chaosblade-jvm-exec 是sandbox的一个模块,也可以理解为sandbox 和 chaosblade的交互
2.1 prepare
blade功能 attach java进程
#prepare
sudo -u tomcat -H /tmp/chaosblade/blade prepare jvm -j /home/q/java/default --pid 4087 -P 8703 --debug
2.1.1 执行shell
# shell
/home/q/java/default/bin/java -Xms128M -Xmx128M -Xnoclassgc -ea -Xbootclasspath/a:/home/q/java/default/lib/tools.jar -jar /tmp/chaosblade/lib/sandbox/lib/sandbox-core.jar 4087 "/tmp/chaosblade/lib/sandbox/lib/sandbox-agent.jar" "home=/tmp/chaosblade/lib/sandbox;token=320732876429;server.ip=127.0.0.1;server.port=8703;namespace=chaosblade"
执行完了之后
sandbox会追加文件 ~/.sandbox.token
一行 chaosblade;111828312229;localhost;8703
包括namespace,token,ip和端口信息
生成日志文件 ~/logs/chaosblade/chaosblade.log
和 ~/logs/sandbox/sandbox.log
2.1.2 激活模块
# http
http://127.0.0.1:8703/sandbox/chaosblade/module/http/sandbox-module-mgr/active?1=1&ids=chaosblade
2.1.3 检查
http://127.0.0.1:8703/sandbox/chaosblade/module/http/chaosblade/status?1=1
2.2 revoke
卸载java agent
# revoke
/tmp/chaosblade/blade revoke 3cd60165a642daba
2.2.1 通过接口
# http
http://127.0.0.1:8703/sandbox/chaosblade/module/http/sandbox-control/shutdown?1=1
2.3 故障注入和销毁
2.3.1 注入故障
blade 操作
# create
curl "http://127.0.0.1:9526/chaosblade?cmd=create%20http%20throwCustomException%20--timeout=86400%20--exception=java.lang.Exception%20--uri=http://*/gongdan/order/search1%20--effect-percent=100%20--debug"
sandbox交互
POST /sandbox/chaosblade/module/http/chaosblade/create
"action": "throwCustomException",
"debug": "true",
"effect-percent": "100",
"exception": "java.lang.Exception",
"suid": "2980d9f16d631a8c",
"target": "http",
"uri": "http://*/gongdan/order/search1"
2.3.2 故障恢复
blade 操作
#destroy
/tmp/chaosblade/blade destroy 65c1c346aa05799a
sandbox 交互
GET /sandbox/chaosblade/module/http/chaosblade/destroy?suid=65c1c346aa05799a
遇到过的问题
prepare 操作没有指定端口的情况下,对同一个jvm 进程进行prepare的逻辑选择端口的逻辑?
blade 内部会有一次重试的逻辑。
了解了大概的逻辑,对于排查问题有一定帮助。
以上是关于chaosblade使用:blade server的主要内容,如果未能解决你的问题,请参考以下文章
[Chaosblade] chaosblade-jvm-exec和chaosblade交互
[Chaosblade] chaosblade-jvm-exec和chaosblade交互
[Chaosblade] chaosblade-jvm-exec和chaosblade交互