gor流量复制工具
# 一、简介
Goreplay (opens new window) 是用 Golang 写的一个 HTTP 实时流量复制工具,可以捕获实时 HTTP 流量并将其重放到测试环境中,以便使用真实数据持续测试您的系统。支持流量的放大、缩小,频率限制,还支持把请求记录到文件,方便回放和分析,也支持和 ElasticSearch 集成,将流量存入 ES 进行实时分析
# 二、快速开始
GitHub地址:https://github.com/buger/goreplay
# 2.1、下载
#http://media.ruanyou.top/blog/file/gor_1.3.3_x64.tar.gz
wget https://github.com/buger/goreplay/releases/download/1.3.3/gor_1.3.3_x64.tar.gz
tar -xvf gor_1.3.3_x64.tar.gz -C ./
1
2
3
2
3
# 2.2、环境准备
我们需要记录其中一个服务的HTTP流量,然后重放到另一个服务
#启动一个file-server,端口号8000
gor file-server :8000
#启动一个file-server,端口号8001
gor file-server :8001
1
2
3
4
5
2
3
4
5
# 2.3、验证
将8000端口流量复制并输出到控制台
gor --input-raw :8000 --output-stdout
1
将8000端口的流量复制并重放
gor --input-raw :8000 --output-raw :8001
1
# 三、常用命令
# 3.1、流量捕获
##输出到控制台
gor --input-raw :8000 --output-stdout
##记录到文件
gor --input-raw :8000 --output-file requests_origin.gor
1
2
3
4
2
3
4
# 3.2、流量回放
##从文件回放流量
gor --input-file requests_origin.gor --output-http="http://ruanyou.top"
##对流量实时转发
gor --input-raw :8000 --output-http="http://ruanyou.top"
#加速回放
gor --input-file "requests_origin.gor|1000%" --output-http "http://ruanyou.top"
#持续加压
gor --input-file "requests_origin.gor|1000%" --output-http "http://ruanyou.top" -input-file-loop
##设置超时时间
gor --input-raw :8000 --output-http="http://ruanyou.top" --output-http-timeout 60s
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
# 3.3、请求过滤
#匹配url
gor --input-raw :8000 --output-http "http://ruanyou.top" \
--http-allow-url "(/pages/4de765/|/pages/fbfb1a/)"
#排除url
gor --input-raw :8000 --output-http "http://ruanyou.top" \
--http-disallow-url /api
#匹配header
gor --input-raw :8000 --output-http "http://ruanyou.top" \
--http-allow-header api-version:^1\.0\d
#匹配cookie
gor --input-raw :8000 --output-http "http://ruanyou.top" \
--output-http-timeout 60s \
--http-allow-url /api \
--http-allow-header "cookie: tenant_id=(12345|65432)"
#匹配请求method
gor --input-raw :8000 --output-http "http://staging.server" \
--http-allow-method GET \
--http-allow-method OPTIONS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 3.4、请求重写
gor --input-raw :8000 --output-http "http://ruanyou.top" \
--http-rewrite-url /v1/user/([^\\/]+)/ping:/v2/user/$1/ping
gor --input-raw :8000 --output-http "http://ruanyou.top" \
--http-set-param api_key=1
gor --input-raw :8000 --output-http "http://ruanyou.top" \
--http-header "User-Agent: Replayed by Gor" \
--http-header "Enable-Feature-X: true"
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
# 四、常见问题
# 4.1、流量复制存在三分之一流量丢失问题
流量复制时,发现存在三分之一的流量丢失
参考: