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

2023-09-25 7 0

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感觉,自己二次开发可以针对修复掉

 

 

代码编程
赞赏

相关文章

数据结构与算法 二维迷宫问题
数据结构与算法 约瑟夫环问题 Josephus问题
数据结构与算法 哈希表的特点
数据结构与算法 Farmer John 问题 农夫锯木板问题
数据结构与算法 前缀、中缀、后缀表达式求值和相互转换
链表(图文详解)