Gorelapy 简介
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 和表,用来保存请求数据
监听消息发送到 kafaka
1、在目标服务器上安装 gorepay
b、二进制包:百度或者找我要吧。如果你的服务器是 centos7 以上,可以直接解压使用。建议使用这种方式
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
查看监听消息
在 kafka 所在的服务器上启一个 consumer,查看这个 topic 中的消息,可以看到监听端口的流量了
bin/kafka-console-consumer.sh --bootstrap-server 10.8.1.43:9092 --topic test
解析 kafka 的消息并保存到 mysql
安装依赖库:confluent-kafka、records、PyMySQL
sh
pip install confluent-kafka
pip install records
pip install PyMySQL
records 一个非常简单但功能强大的库,用于对大多数关系数据库进行原始 SQL 查询
PyMySQL 是从 Python 连接到 MySQL 数据库服务器的接口
编写解析 kafka 消息的 python 代码,进行解析并且保存落库
常用命令
基本命令:
1、获取经过本地 8080 端口的请求流量,然后打印出来
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