一, goreplay 介绍
- GoReplay 是一个开源工具,用于捕获实时 HTTP 流量并将其重播到测试环境中,以便使用真实数据持续测试您的系统。 它可用于增加对代码部署、配置更改和基础架构更改的信心。
- GoReplay 是一个开源的网络监控工具,可以记录您的实时流量,并将其用于跟踪、负载测试、监控和详细分析。
- GoReplay 是一种创新的开源解决方案,它允许您捕获现有用户的活动并将其重新用于测试您的应用程序。使用 GoReplay,您可以执行跟踪、负载测试或详细分析和监控
二, goreplay 下载安装
2.1 下载路径:
- 预编译版本 Releases · buger/goreplay · GitHub
- 编译代码 https://github.com/buger/goreplay
- 容器版本比较老旧 https://hub.docker.com/search?q=goreplay&type=image
2.2 安装解压
- 将下载的包通过xftp传输到linux对应的文件目录下
- 进行解压缩:tar -C /usr/local -zxvf go1.16.4.linux-amd64.tar.gz
- 配置环境变量:
- 打开profile文件: vim /etc/profile
- 配置变量:
export GOROOT=/usr/local/go export PATH=$PATH:$GOROOT/bin
- 编译配置文件: source /etc/profile
- 查看是否配置成功:go version
三, gor工具的使用
- 演练环境:
- dev 环境 http://127.0.0.1:8001
- stage 环境 http://127.0.0.1:8002
- prod 环境 http://127.0.0.1:8000
3.1 核心参数
-
input 参数
- –input-raw :用来捕捉http流量,需要指定ip地址和端口
- –input-file : 接收流量
- –input-http :用来捕捉http流量,需要指定ip地址和端口
- –input-tcp :将多个Goreplay实例获取的流量聚集到一个Goreplay实例
- –input-raw-track-response
-
output 参数
- –output-http :流量释放的对象server,需要指定IP地址和端口
- –output-file : 录制流量时指定的存储文件
- –output-tcp :将获取的流量转移至另外的Goreplay实例
- –output-stdout :终端输出
3.2 监听模式 - 捕获服务器流量保存到本地
- 捕捉prod环境的流量并通过终端输出 :
sudo ./gor --input-raw :8000 --output-stdout
- 捕捉prod环境的流量并保存至本地文件 :
sudo ./gor --input-raw :8000 --output-file=requests.gor
3.3 转发模式 - 将捕获的流量转发到stage环境
- 将prod环境的流量转发到stage环境:
sudo ./gor --input-raw :8000 --output-http="http://localhost:8002"
- 将prod环境存放的文件中的流量转发到stage环境服务器:
gor --input-file requests.gor --output-http="http://localhost:8001"
3.4 性能模式
- 指定流量的百分比,用来控制放大或者缩小流量:
gor --input-file "requests.gor|200%" --output-http "staging.com"
——200%表示放大2倍
3.5 请求过滤
gor --input-raw :8080 --output-http staging.com --http-allow-url /api ——指定URL,只同步/api路径下的请求
gor --input-raw :8080 --output-http staging.com --http-disallow-url /api ——同步除了/api路径下的其他请求
gor --input-raw :8080 --output-http staging.com \
--http-allow-header api-version:^1\.0\d ——允许的header请求头
gor --input-raw :80 --output-http "http://staging.server" --http-allow-method GET \
--http-allow-method ——允许的请求方法
3.6 请求重写
gor --input-raw :8080 --output-http staging.com --http-rewrite-url /v1/user/([^\\/]+)/ping:/v2/user/$1/ping
——重写请求url,转发到staging.com环境时,url将变成重写的url
gor --input-raw :8080 --output-http staging.com --http-set-param api_key=1
——重新设置url参数
gor --input-raw :80 --output-http "http://staging.server" --http-header "User-Agent: Replayed by Gor" \
--http-header "Enable-Feature-X: true"
——重新设置Header
3.7流量录制回放的作用
- 利用流量同步实现预发布测试
- 利用流量回放进行回归测试
- 利用流量放大进行压力测试