基于jvm-sandbox-repeater的引流回放工具

jvm-sandbox-repeater是基于阿里sandbox做的引流回放工具,开源的页面功能比较简单,但是基于核心功能完全可定制自己的引流回放平台(需二次开发)。
优点:针对查询接口通过录制沉淀用例,减少用例沉淀成本,提高自动化效率
缺点:针对写接口之类的可能不太友好,根据经验需要定制化配置字段mock或链路方法、中间件mock等
可使用场景(自己YY的,大家集思广益):
●录制沉淀用例
●抓包
●录制后修改作为mock使用
●定时回放作为环境稳定性的监测工具


部署方法


下载并安装jvm-sandbox

# 下载最新版本的JVM-SANDBOX 
wget http://ompc.oss-cn-hangzhou.aliyuncs.com/jvm-sandbox/release/sandbox-stable-bin.zip 
# 解压 
unzip sandbox-stable-bin.zip


启动开发应用


本人测试使用开发代码本地启动,非本地的可使用命令获取进程信息
获取应用进程号,可参考下图获取


挂载目标应用

# 进入沙箱执行脚本
cd sandbox/bin

# 目标JVM进程10533(对应需要监控的应用程序进程号)
./sandbox.sh -p 10533 -P 12580

挂载成功后会提示


卸载沙箱(需要卸载时执行)

./sandbox.sh -p 10533 -S
jvm-sandbox[default] shutdown finished.


下载并安装jvm-sandbox-repeater


git clone GitHub - alibaba/jvm-sandbox-repeater: A Java server-side recording and playback solution based on JVM-Sandbox

装置 repeater


运行项目目录下的 bin/install-repeater.sh 即可,确认执行成功无异常信息


调整 console 工程中对应配置


在 repeater-console/repeater-console-start/src/main/resources/application.properties ,调整 mysql 相干配置,改为和本人本地 mysql 数据库统一
同时请初始化数据库内容,初始化的sql文件在:repeater-console/repeater-console-dal/src/main/resources/database.sql
初始化胜利,应该会创立了 repeater 这个数据库,且包含上面四个表


启动本地mysql


修复官网仓库里 console 一些代码问题。


●修改 repeater-console/repeater-console-start/src/main/java/com/alibaba/repeater/console/start/controller/page/ReplayController.java 中的 return "/replay/detail"; ,改为 return "replay/detail"; ,去掉双引号外面第一个 /
●修改 repeater-console/repeater-console-start/src/main/java/com/alibaba/repeater/console/start/controller/test/RegressPageController.java 中的 return "/regress/index"; ,改为 return "regress/index";,去掉双引号外面第一个 /


启动 console

# 在 repeater 项目根目录进行
mvn install -DskipTests && java -jar repeater-console/repeater-console-start/target/*.jar


启动胜利,应该呈现相似上面的日志:
... 2020-12-28 07:40:27.259 INFO 32116 --- [ main] s.b.c.e.t.TomcatEmbeddedServletContainer : Tomcat started on port(s): 8001 (http) 2020-12-28 07:40:27.265 INFO 32116 --- [ main] c.a.repeater.console.start.Application : Started Application in 7.532 seconds (JVM running for 8.065)


应用界面化的 console 进行录制回放


访问:http://127.0.0.1:8001/regress/index.htm 即可打开平台页面
●前面sandbox挂载成功在“在线模块”可进行查看,进行确认


●“配置管理”修改配置信息,可参考如下配置
其中httpEntrancePatterns对应需要录制接口的前缀


配置的说明如下可参考

配置名

配置含义

参数说明

备注

pluginIdedentities

录制所使用的插件列表,配置了相应的插件名称,才能启用对应类别插件类别的录制

插件名称有效值有:"http", "java-entrance", "java-subInvoke", "mybatis", "redis","ibatis","dubbo-consumer","dubbo-provider"

1、插件配置生效还需要~/.sandbox-module/plugins/有对应的插件 jar 包。2、该参数有效值字段对应的取值是源码中实现了InvokePlugin的类的identity方法。

repeatIdentities

回放所使用的插件列表,配置了对应的插件,才能进行对应类别的回放

插件名称有效值有:"http", java", "dubbo"

1、插件配置生效还需要~/.sandbox-module/plugins/有对应的插件 jar 包。2、该参数有效值字段对应的取值是源码中实现了Repeater的类的identity方法。

httpEntrancePatterns

需要录制和回放的 http 接口,需要同时在 pluginIdedentities 和 repeatIdentities 中都配置了http这个配置才生效

链接的路径

参数支持正则表达式:"^/alertService/.*$"

javaSubInvokeBehaviors

需要录制和 mock 的 java 方法的配置,需要 pluginIdedentities 配置了java-subInvoke这个配置才生效

类名、方法名、以及是否包含子方法(若为 true,则匹配该类下的所有子类或者实现类,实际是否可用,有待验证),支持正则表达式

如下配置的意思就是 com.test.server.utils 包下所有类和所有方法{"classPattern": "com.test.server.utils.","methodPatterns": [ "" ],"includeSubClasses": false}

javaEntranceBehaviors

需要录制和回放的 java 方法的入口,需要同时在 pluginIdedentities 配置了java-entrance以及 repeatIdentities 配置了java这个配置才生效

类名、方法名、以及是否包含子方法(若为 true,则匹配该类下的所有子类或者实现类,实际是否可用,有待验证),支持正则表达式

如下配置的意思就是 com.test.utils 包下所有类和所有方法{"classPattern": "com.test.utils.","methodPatterns": [ "" ],"includeSubClasses": false}如果该入口方法在某个 http 入口的调用链路下,可能不会被录制到,如 com.test.controller.hello() 方法,本身对应着 “/hello 的访问路径,则录制时无法录制到以这个 hello 方法为入口的 java 录制记录”

pluginsPath

插件路径

String,默认填 null 即可

默认填 null 即可

exceptionThreshold

异常发生阈值;默认 1000 当ExceptionAware感知到异常次数超过阈值后,会降级模块

Integer,默认填 1000 即可

当前只使用过 1000,未出现过降级情况。当出现降级则不再进行任何录制。涉及的关键方法:com.alibaba.jvm.sandbox.repeater.plugin.core.impl.api.DefaultEventListener#access

degrade

开启之后,不进行录制,只处理回放请求

boolean,默认填 false 即可

当前只使用过 false,按照字面理解就是当这个改为 true 之后,不再进行录制。涉及的关键方法:com.alibaba.jvm.sandbox.repeater.plugin.core.impl.api.DefaultEventListener#access

useTtl

是否开启 ttl 线程上下文切换,开启之后,才能将并发线程中发生的子调用记录下来,否则无法录制到并发子线程的子调用信息,原理是将住线程的 threadLocal 拷贝到子线程,执行任务完成后恢复

boolean,默认填 true 即可

默认使用 true,开启线程跟踪

sampleRate

采样率;最小粒度万分之一

Integer 默认填 10000 即可

当前只使用过 10000,可以结合这个方法理解com.alibaba.jvm.sandbox.repeater.plugin.core.trace.TraceContext#inTimeSample

●推送配置(确认弹窗提示成功)


●使用手工、自动化脚本或postman调用对应的接口(本人是本地起的开发服务,所以直接访问本地服务)


●平台确认流量采集 


●点击回放可进行回归使用
下面的回放失败是开源工具的bug感觉,自己二次开发可以针对修复掉

 

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cuishuangyuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值