0%

流量回放的实践--goreplay的使用

流量回放的实践

安装

下载地址:Latest release

官方文档:Gettting started

常用参数

输入参数

  • –input-raw 捕获 HTTP 流量,需指定端口号
  • –input-file 使用 –output-file 记录的文件作为输入
  • –input-tcp 将多个 Gor 实例获取的流量聚集到一个 Gor 实例

输出参数

  • –output-http 相应流量的终端,接收 URL 地址
  • –output-file 将获取的流量记录如文件
  • –output-tcp 将获取的流量转移至另外的 Gor 实例,与 –input-tcp 组合使用
  • –output-stdout debug 工具,将流量信息直接输出

请求过滤

  • –http-allow-url 允许正则 URL,不包换主句名部分
  • –http-disallow-url 不允许正则 URL
  • –http-allow-header 允许的 Header 头
  • –http-disallow-header 不允许的 Header 头
  • –http-allow-method 允许的请求方法

过滤示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# only forward requests being sent to the /api endpoint
sudo ./goreplay --input-raw :8888 --output-http staging.com --http-allow-url /api

# only forward requests NOT being sent to the /api... endpoint
sudo ./gor --input-raw :8888 --output-http staging.com --http-disallow-url /api

# only forward requests with an api version of 1.0x
sudo ./gor --input-raw :8888 --output-http staging.com --http-allow-header api-version:^1\.0\d

# only forward requests NOT containing User-Agent header value "Replayed by Gor"
sudo ./gor --input-raw :8888 --output-http staging.com --http-disallow-header "User-Agent: Replayed by Gor"

sudo ./gor --input-raw :8888 --output-http "http://staging.server" \
--http-allow-method GET \
--http-allow-method OPTIONS

录制实例

录制限时

1
2
3
4
5
6
7
8
9
10
11
1 timeout 60 表示只录制60秒后自动停止 (只记录请求头部)
# nohup timeout 60 ./gor --input-raw :8000 --output-file logs/basepost.gor > /dev/null 2>&1 &

2 按小时切割日志文件,并且开启日志追加模式,不会进行日志默认小分片
# nohup timeout 60 ./gor --input-raw :8000 --output-file logs/basepost-%Y-%m-%d-%H.log --output-file-append > /dev/null 2>&1 &

3 按小时切割日志文件,并且开启日志追加模式,不会进行日志默认小分片,.gz压缩文件格式
# nohup timeout 60 ./gor --input-raw :8000 --output-file logs/basepost-%Y-%m-%d-%H.gz --output-file-append > /dev/null 2>&1 &

4 timeout 60 表示只录制60秒后自动停止 (请求头部+响应头部+包体)
# nohup timeout 60 ./gor --input-raw :8000 --output-file logs/basepost.gor --input-raw-track-response > /dev/null 2>&1 &

写入文件

将 82 端口流量录制,并设置超时时间,包括返回值,存入文件。

1
nohup timeout 600 ./gor --input-raw :82 --output-file /root/goreplay_log/basepost-%Y-%m-%d-%H.gor --input-raw-track-response > /dev/null 2>&1 &

流量镜像到其他服务

1
./gor --input-raw :8888 --output-http "http://t1:8888"

流量文件回放

1
./gor --input-file data/request_0.gor -output-http="http://..." --debug --verbose --output-http-track-response

中间件使用

1
./gor --input-raw :82 --output-stdout --middleware "python middleware.py"