jvm-sandbox-repeater环境搭建部署

Posted sysu_lluozh

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了 jvm-sandbox-repeater环境搭建部署相关的知识,希望对你有一定的参考价值。

一、环境准备

当前仅支持mac或linux系统,安装包括repeater-console和repeater两个模块的安装

注:
在windows环境可能会遇到安装路径出错导致安装失败或者运行失败的情况

需要的中间组件:

  • linux/Mac os
  • jdk 1.8+
  • maven 3.2+
  • 数据库 mysql 5.7+

二、repeater-console安装与启动

2.1 下载源码

git clone https://github.com/alibaba/jvm-sandbox-repeater.git

2.2 数据库配置

- 位置:/repeater-console/repeater-console-start/src/main/resources/application.properties

# 本地mysql数据源测试
spring.datasource.url=jdbc:mysql://数据库IP/域名:数据库端口/数据库名?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=用户名
spring.datasource.password=密码

2.3 初始化数据库

repeater-console/repeater-console-dal/src/main/resources/database.sql

2.4 console源码问题修复

- console代码在idea中启动时,不会报错,但是使用jar包启动时,页面会报异常,需要做如下调整

- 位置 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";
解决跳转页面的问题

2.5 编译并启动console

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

三、repeater安装

3.1 下载源码

git clone https://github.com/alibaba/jvm-sandbox-repeater.git

3.2 修改配置文件

- 位置:jvm-sandbox-repeater/bin/repeater.properties
如果是本机器则配置成127.0.0.1或lcoalhost,如果是远程主机部署则配置成服务IP端口

# 录制消息投递地址
broadcaster.record.url=http://127.0.0.1:8001/facade/api/record/save

# 回放结果投递地址
broadcaster.repeat.url=http://127.0.0.1:8001/facade/api/repeat/save

# 回放消息取数据地址
repeat.record.url=http://127.0.0.1:8001/facade/api/record/%s/%s

# 配置文件拉取地址
repeat.config.url=http://127.0.0.1:8001/facade/api/config/%s/%s

# 心跳上报配置
repeat.heartbeat.url=http://127.0.0.1:8001/module/report.json

# 是否开启脱机工作模式
repeat.standalone.mode=false

# 是否开启spring advice拦截
repeat.spring.advice.switch=false

3.3 环境变量配置

启动参数中的 -Dapp.name=repeater -Dapp.env=daily
对应应用名和环境,是需要启动时添加的,不然jvm-sandbox启动后找不到对应的环境信息

代码中这个文件读取了这个环境变量信息
com.alibaba.jvm.sandbox.repeater.plugin.core.util.PropertyUtil getSystemPropertyOrDefault
通过代码知道可以通过在被测的jvm机器上设置环境变量设置应用名称和环境

3.4 编译repeater

# 在项目根目录下的bin目录中执行
cd bin
sh install-repeater.sh

在linux环境中执行可能会报如下错误:


编译失败后可以将repeater-stable-bin文件拷到对应目录~/.sandbox-module下同样可行

文件下载路径下载路径, 下载后对应文件目录

此时可以将/cfg/repeater.properties文件按照3.2 修改配置文件中进行配置,修改console服务的ip和port

3.5 启动被测服务

# 下载源码
git clone https://github.com/spring-guides/gs-rest-service.git

# 在示例项目 clone 后的根目录中运行
cd complete 
mvn install && java -jar target/*.jar

注: 如3.3 环境变量配置所说,启动方式也可以为:mvn install && java -jar -Dapp.name=repeater
-Dapp.env=daily target/*.jar

3.6 启动sandbox

sandbox的启动方法有两种,attach模式和agent模式

3.6.1 attach模式

# 启动命令
~/sandbox/bin/sandbox.sh -p ${被录制应用进程号} -P ${repeater启动端口}
# 关闭命令
~/sandbox/bin/sandbox.sh -S ${被录制应用进程号}

完整启动命令

sh ~/sandbox/bin/sandbox.sh -p `ps -ef | grep "target/gs-rest-service-0.1.0.jar" | grep -v grep | awk '{print $2}'` -P 12580

3.6.2 agent模式

java 
-javaagent:${HOME}/sandbox/lib/sandbox-agent.jar=server.port=${repeater启动端口}\\;server.ip=0.0.0.0 \\
-Dapp.name=${录制应用名} \\
-Dapp.env=${录制环境} \\
-jar application.jar

agent模式下启动成功,但是在录制回放是无法连接对应的端口,通过server.port设置的端口无效

四、简单使用

4.1 页面

安装完成,进去前端页面:http://localhost:8001/online/search.htm

4.2 配置管理

应用名:unknown
环境名:unknown

{
  "useTtl" : true,
  "degrade" : false,
  "exceptionThreshold" : 1000,
  "sampleRate" : 10000,
  "pluginsPath" : null,
  "httpEntrancePatterns" : [ "^/greeting.*$" ],
  "javaEntranceBehaviors" : [ {
    "classPattern" : "hello.GreetingController",
    "methodPatterns" : [ "greeting" ],
    "includeSubClasses" : false
  } ],
  "javaSubInvokeBehaviors" : [],
  "pluginIdentities" : [ "http", "java-entrance", "java-subInvoke", "mybatis", "ibatis" ],
  "repeatIdentities" : [ "java", "http" ]
}

4.3 在线模块

查看在线模块,可以看到被监控信息

4.4 发送请求

curl -s 'http://localhost:8080/greeting'
curl -s 'http://localhost:8080/greeting?name=User'

4.5 在线流量

在线流量列表中可以看到录制的流量信息

4.5 流量回放

选择对应的流量进行回放

以上是关于 jvm-sandbox-repeater环境搭建部署的主要内容,如果未能解决你的问题,请参考以下文章

解密淘系精准回归底层技术JVM-Sandbox-Repeater

开源 | jvm-sandbox-repeater:阿里巴巴开源的基于 JVM-Sandbox 的录制/回放通用解决方案

[jvm-sandbox-repeater 学习笔记][原理说明篇] 1 录制流程

流量回放框架jvm-sandbox-repeater的实践

[jvm-sandbox] 多个agent并用

[jvm-sandbox] 多个agent并用