一. 前言
公司准备最近开始对流量回放开始普及,以应对复杂业务场景的回归线上bug,线下复现不了等问题,所以团队大佬准备使用 jvm-sandbox-repeater这一款简单易用、安全可靠的流量录制回放工具,来应对上问题、
二. jvm-sandbox-repeater简介
定义:
基于JVM-Sandbox的录制/回放通用解决方案 jvm-sandbox-repeater是JVM-Sandbox生态体系下的重要模块,它具备了JVM-Sandbox的所有特点,插件式设计便于快速适配各种中间件,封装请求录制/回放基础协议,也提供了通用可扩展的各种丰富API。
应用场景:
1. 业务快速回归
基于线上流量的录制/回放,无需人肉准备自动化测试脚本、准备测试数据
2. 线上问题排查
录制回放提供”昨日重现”能力,还原线上真实场景到线下做问题排查和Debug
动态方法入参/返回值录制,提供线上快速问题定位
3. 压测流量准备
0成本录制HTTP/Dubbo等入口流量,作为压测流量模型进行压测
4. 实时业务监控
动态业务监控,基于核心接口数据录制回流到平台,对接口返回数据正确性进行校验和监控
repeater-console
官方的说明
jvm-sandbox-repeater 仅仅提供了录制回放的能力,如果需要完成业务回归、实时监控、压测等平台,后面须要有一个数据中心负责采集数据的加工、存储、搜索,repeater-console 提供了简单的demo示例;
一个模块管理平台负责管理JVM-Sandbox各模块生命周期;一个配置管理平台负责维护和推送jvm-sandbox-repeater采集所须要的各种配置变更注意:目前项目代码默认启动standalone模式,不需要依赖任何服务端和存储,能够简单快速的实现单机的录制回放,
控制单机模式的开关在~/.sandbox-module/cfg/repeater.properties 文件中的 repeat.standalone.mode=true //开启或关闭单机工作模式,
关闭单机模式后,配置拉取/消息投递等都依赖repeater.properties中配置的具体url;如不想通过http拉取和消息投递的也可以自己实现Broadcaster和ConfigManager
安装过程:(橙色标注部分)
第1步:用户先启动repeater-console服务,通过console提供的配置界面录制应用名、环境和录制接口
第2,3步:用户携带第一步总配置好的应用名和环境参数启动被监测应用,启动过程中repeater会注入到被监测服务中
第4步:启动中通过项目中的bin/repeater.properties配置信息,进行拉去第1步的配置信息进行心跳上报(即:把被监测服务记录到repeater-console中),为后面录制回放做环境准备,同时也方便用户可视画管理。
ps:第4步中的bin/repeater.properties配置地址配置的是repeater-console的部署地址(即指代的第5步)
录制过程:(浅绿色标注部分)
第7步:用户请求到service
第8步:sandbox感知到请求
第9步:sandbox将感知到的请求通知repeater。
第10步:repeater对事件进行给过滤和采样计算,对满足录制条件的请求会记录请求、响应、子调用和响应,序列化成后通知repeater-console
第11步: repeater-console对序列化结果进行处理和保存
回放过程:(浅蓝色标注部分)
第12步: 用户请求repeater-console的回放接口,明确需要回放哪条录制数据
第13步: repeater-console通过调用repeater提供的回放任务接收接口下发回放任务
第14步: repeater在执行回放任务的过程中,会反序列化记录的wrapperRecord,根据信息构造相同的请求,对被挂载的任务进行请求并跟踪回放请求的处理流程,以便记录回放结果以及执行mock动作
第15步: 回放结束,repeater会将回放信息和结果序列化后通知repeater-console进行处理和保存
安装
安装sandbox和repeater
环境:
- linux/Mac os
- jdk 1.8+
- maven 3.2+
- 数据库 mysql 5.7+(repeater-console 可能用到)
# 克隆代码到本地 git clone https://github.com/alibaba/jvm-sandbox-repeater.git |
初始化sql ,并根据初始化后的数据库,在下面文件中修改
调整 standalone配置信息,开启或关闭单机工作模式
修改日志存放脚本 脚本位置:jvm-sandbox-repeater/bin/repeater-logback.xml
修改install-local.sh安装脚本,定义自己的home
进入~/xxx/jvm-sandbox-repeater/目录下,执行install-local.sh安装脚本
安装ok后 修改install-repeater.sh安装脚本
启动篇
# 在 repeater 项目根目录进行 mvn install -DskipTests && java -jar repeater-console/repeater-console-start/target/*.jar |
二次启动可以在 target 目录 使用java -jar repeater-bootstrap.jar
2、验证repeater-console启动成功
http://url:8001/online/search.htm
repeater以agent模式注入到被测应用并进行录制回放
现在,借助界面来做一次录制回放吧
1)、在 console 增加配置,用于对接应用
2)、让 repeater 注入到被测应用,上报数据到 console
3)、在 console 中操作,进行录制和回放
在 console 增加配置,用于对接应用 ,其实 greeting 为启动项目的接口
repeater 注入被监测应用程序(采用agent模式)
1)agent模式启动与关闭
agent 模式下的启停都跟随应用,配置好参数后,应用启动则启动,应用停止则停止。
注意事项:
- 1) sandbox-agent.jar :自己安装的位置进行配置
- 2)录制应用名、录制环境 :与console配置管理中的一致
- 3)repeater启动端口 :未在进程中使用过的
- 4)application.jar:被测应用
java
-javaagent:${HOME}/sandbox/lib/sandbox-agent.jar=server.port=${repeater启动端口}\;server.ip=0.0.0.0 \
-Dapp.name=${录制应用名} \
-Dapp.env=${录制环境} \
-jar application.jar
demo:
java -javaagent:/usr/local/zc-sandbox/sandbox/lib/sandbox-agent.jar=server.port=12580\;server.ip=0.0.0.0 -Dapp.name=repeater -Dapp.env=daily -jar /usr/local/gs-rest-service-master/complete/target/gs-rest-service-0.1.0.jar
看日志,日志路径~/logs/sandbox/repeater/repeater.log。
开始录制,给这个被测应用输送一些流量
get请求接口
点击console 的【在线流量】,能看到刚发出的两条请求已经录制下来了
回放请求。直接点击第一行末尾的回放按钮,进行回放:
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/82644.html