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的目录, sandboxlib/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] chaosblade-jvm-exec和chaosblade交互

[Chaosblade] chaosblade-jvm-exec和chaosblade交互

[Chaosblade] chaosblade-jvm-exec和chaosblade交互

[Chaosblade] chaosblade-jvm-exec和chaosblade交互

[Chaosblade] chaosblade-jvm-exec和chaosblade交互