[Chaosblade] chaosblade-jvm-exec和chaosblade交互
Posted orangleliu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[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] chaosblade-jvm-exec和chaosblade交互的主要内容,如果未能解决你的问题,请参考以下文章
[Chaosblade] chaosblade-jvm-exec和chaosblade交互
[Chaosblade] chaosblade-jvm-exec和chaosblade交互