引言
书接上文,Jvm-Sandbox-Repeater是一款强大的流量录制和回放工具,但是使用过程中还是会遇到各种各样的问题。MoonBox 是 vivo 开源的一款基于 JVM-Sandbox-Repeater 的 无侵入式流量录制与回放平台,能够实现自动化测试、线上问题复现和业务监控。本文结合官方文档与社区实践,详解本地快速部署方案,涵盖 Docker 极简模式与生产级常规部署两种场景。
一、环境准备
1. 基础依赖
- 操作系统:Linux/macOS/Windows(需支持 Docker)
- 内存:建议 8GB+(Docker 部署)或 16GB+(常规部署)
- 存储:预留 20GB 空间(用于 ES 数据存储)
- 软件包:
- Docker 20.10+(Docker 部署必选)
- JDK 1.8+(常规部署必选)
- MySQL 5.7+(存储配置元数据)
- Elasticsearch 7.16.2(推荐版本,存储流量数据)
2. 端口规划
服务 | 默认端口 | 说明 |
---|---|---|
MoonBox-Server | 9999 | 前端访问端口 |
MySQL | 3306 | 元数据存储 |
Elasticsearch | 9200 | 流量数据存储 |
Agent-Jetty | 12568 | Agent 通信端口 |
二、Docker 快速部署(适合体验)
1. 拉取镜像与启动
# 克隆仓库
git clone https://github.com/vivo/MoonBox.git
cd MoonBox/docker
# 启动容器(x86架构)
docker-compose -f docker-compose.yml up -d
# ARM架构(如 M1/M2 Mac)
docker-compose -f docker-compose-arm64.yml up -d
该命令将自动启动包含 MySQL、ES 和 MoonBox 服务的容器集群;目前官方Dockerfile中,mysql使用的是5.7,如果遇到下载失败的问题,可以使用bitnami/mysql,修改mysql目录下的Dockerfile文件,如下图所示(此操作步骤意在快速体验moonbox,所以就不说升级driver驱动重新打包、修改dockerfile这类方式了)
看到如下日志说明运行成功:
2. 访问控制台
浏览器打开 http://localhost:9999
,使用默认账号 admin/moonbox
登录。控制台提供流量录制任务管理、回放配置及结果分析功能。如下图所示:
三、常规部署(适合生产环境)
1. 数据库初始化
-- 创建 MySQL 数据库
CREATE DATABASE moonbox DEFAULT CHARSET utf8mb4;
-- 执行初始化脚本(脚本位于项目 /script 目录)
mysql -u root -p moonbox < moonbox.sql
2. 修改配置文件
配置文件位于 moonbox-server/src/main/resources/application.yml
:
spring:
datasource:
url: jdbc:mysql://localhost:3306/moonbox?useSSL=false
username: root
password: 123456
elasticsearch:
hosts: localhost:9200
username: elastic
password: elastic
3. 编译与启动服务
# 后端服务编译
cd moonbox-server
mvn clean package -Dmaven.test.skip=true
# 启动服务
java -jar target/moonbox-server-1.0.0.jar
# 前端编译(需 Node.js 14+)
cd moonbox-web
npm install
npm run build
# 部署生成的 dist 目录至 Nginx
四、Agent 接入与流量录制
1. 目标应用挂载 Agent
# 下载 agent(版本需与 Server 一致)
wget https://github.com/vivo/MoonBox/releases/download/v1.0.0/moonbox-agent.tar.gz
# 挂载到 Java 进程
java -javaagent:/path/to/moonbox-agent.jar \
-Dmoonbox.app.name=myapp \
-Dmoonbox.server=http://{moonbox-server host
}:9999 \
-jar your-app.jar
2. 创建录制任务
- 进入控制台 流量录制 → 新增模板
- 填写应用名、采样率(如 10%)、录制时长
- 选择需录制的接口(支持 HTTP/Dubbo 等协议)
3. 回放验证
- 在 流量回放 中选择录制任务
- 配置回放次数、Mock 策略(如 DB 调用使用录制结果)
- 查看回放成功率及差异报告,定位代码问题
五、注意事项与优化
-
性能调优:
- 调整 ES 分片数(建议
index.number_of_shards=3
) - 限制单任务最大录制流量(避免内存溢出)
- 启用 Agent 心跳检测防止僵尸进程
- 调整 ES 分片数(建议
-
安全配置:
# 启用 HTTPS(修改 application.yml) server: ssl: enabled: true key-store: classpath:keystore.p12 key-store-password: changeit
-
插件扩展:
- 自定义插件需实现
RepeaterSPI
接口 - 参考
moonbox-plugin-dubbo
模块开发适配中间件
- 自定义插件需实现
结语
通过上述步骤,可在本地快速构建 MoonBox 流量分析平台。其 无侵入特性 尤其适合复杂微服务场景的自动化回归测试。建议结合 官方文档 探索进阶功能如分布式压测、业务监控告警等。