[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的目录, 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] chaosblade-jvm-exec和chaosblade交互的主要内容,如果未能解决你的问题,请参考以下文章

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

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

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

chaosblade在测试环境的应用

混沌实验工具ChaosBlade的使用

面向云原生的混沌工程工具-ChaosBlade