goreplay简介
gorreplay是一个开源的网络监控工具。可以用来记录流量,并用于回放、负载测试、监控分析等。参考文档:https://www.cnblogs.com/sunsky303/p/9072871.html
流量录制
#捕获9003端口的请求和响应输出到stdout(用于调试)
#--input-raw-track-response用于捕获response,不加这个参数只捕获请求
#--input-raw-override-snaplen将捕获的snaplen覆盖为64k,避免抓取的流量被截断
./gor --input-raw :9003 --output-stdout --input-raw-track-response --input-raw-override-snaplen
# 捕获9003端口的请求和响应并转发到x.x.x.x:9003服务上,output-http可以跟多个,会将相同的流量转发到多个端点
./gor --input-raw :9003 --output-http http://x.x.x.x:9003 --input-raw-track-response --input-raw-override-snaplen
# 捕获9003端口的请求和响应输出到文件request.gor
./gor --input-raw :9003 --output-file request.gor --input-raw-track-response --input-raw-override-snaplen
# 捕获9003端口的请求和响应输出到文件文件格式以当前日期命名
./gor --input-raw :9003 --output-file requests-%Y-%m-%d.log --input-raw-override-snaplen
#捕获9003端口的请求和响应输出到屏幕,并在请求header中添加‘Real-IP:真实ip’的字段,如果有则覆盖原有值
./gor --input-raw :9003 --output-stdout --input-raw-track-response --input-raw-override-snaplen --input-raw-realip-header "Real-IP"
# --output-file-append gor默认以块的形式写入文件,默认256块(可以理解为256次请求),使用此参数可以将所有的块写入一个文件,文件大小限制默认32mb
./gor --input-raw :9003 --output-file request.gor --input-raw-track-response --input-raw-override-snaplen --output-file-append
#--output-file-size-limit和--output-file-queue-limit选项设置块限制,默认值分别为32mb、256,文件大小可以使用kb、mb、gb限制,只想要大小限制,你可以设置--output-file-queue-limit为0,反之亦然
#设置录制的文件大小为40kb,不限制块大小
./gor --input-raw :9003 --output-file request.gor --input-raw-override-snaplen --output-file-size-limit 40kb --output-file-queue-limit 0
流量回放
# 从request_0.gor文件中回放请求到x.x.x.x:9003服务上
./gor --input-file request_0.gor --output-http http://x.x.x.x:9003
# --input-file-loop从request_0.gor文件中回放请求到x.x.x.x:9003服务上,循环回放
./gor --input-file request_0.gor --output-http http://x.x.x.x:9003 --input-file-loop
# 以2倍的速度从requests-2022-01-18_0.log文件中回放请求到x.x.x.x:9003服务上
./gor --input-file 'requests-2022-01-18_0.log|200%' --output-http http://x.x.x.x:9003
#模拟从文件requests-2022-01-18_0.log回放查看需要回放需要执行多长时间
#--input-file-dry-run模拟从数据源读取并不真正的回放,可以获得回放的时间、回放的请求数等等
./gor --input-file ./gortest/requests-2022-01-18_0.log --output-http http://x.x.x.x:9003 --input-file-dry-run
#这里使用了通配符*,gor会自动读取匹配的所有文件并按照时间自动排序
./gor --input-file './gortest/requests-2022-01-18_*' --output-http http://x.x.x.x:9003 --input-file-dry-run
中间件
./gor --input-raw :9003 --middleware "python3 middleware.py" -output-http http://x.x.x.x:9003 --input-raw-track-response --input-raw-override-snaplen