goreplay 是一款从生产环境 copy 流量到测试环境的工具,且不会影响生产环境的业务响应,又能很简单的达到复用 http 请求来做稳定性测试的目的。
GoReplay 工作方式:listener server 捕获流量,并将其发送至 replay server 或者保存至文件。replay server 会将流量转移至配置的地址
最简单的使用模式是:listener server 捕获流量,并将其发送至 kafka,然后解析 kafka 的消息并存入 mysql,处理起来还是比较方便的.
1、安装 kafka
启动 zookeeper 和 kafka server,并创建一个 topic
温馨提示:server.properties 中的 PLAINTEX 后面需要把 ip 加上,否则其他服务器上的消息接收不到
2、安装 mysql
创建 db 和表,用来保存请求数据
2、监听并往 kafka 发消息
使用 HTTP 请求输出到 kafka - HTTP 原始信息
sudo ./goreplay --input-raw :8179--output-kafka-host '10.8.1.43:9092' --output-kafka-topic 'test'
使用 HTTP 请求输出到 kafka - JSON 格式
sudo ./goreplay --input-raw :8080 --input-raw-track-response --output-kafka-host '10.8.1.43:9092' --output-kafka-topic 'test' --output-kafka-json-format
sh
pip install confluent-kafka
pip install records
pip install PyMySQL
基本命令:
sudo ./goreplay --input-raw :8080 --output-stdout
2、获取经过本地 8080 端口的请求流量,然后保存在.gor 文件中
sudo ./goreplay --input-raw :8080 --output-file=request.gor
3、从保存下来的流量文件中提取流量并向某的地址的某个端口输出
sudo ./goreplay --input-file=request.gor --output-http="http://localhost:8000"
4、转发
sudo ./goreplay --input-raw :8080 --output-http="http://localhost:8000"
5.请求过滤
例如只收集 /api 下的请求
./gor --input-raw :8080 --output-http staging.com --http-allow-url /api
例如只收集请求头中符合 api-version 为 1.0x 的请求
./gor --input-raw :8080 --output-http staging.com --http-allow-header api-version:^1\.0\d