it_worker365

   ::  ::  ::  ::  :: 管理

Goreplay是一款做http请求录制回放的工具,go语言开发,基于验证在正常请求下,是否有报错;在倍数请求下,系统是否存在性能瓶颈

https://github.com/buger/goreplay/wiki

原理 - 使用pcap的go接口,使用bpf(伯克利包过滤)设置指定端口的过滤表达式,截取到tcp报文之后,根据网络五元组(<源IP,源端口,目标IP,目标端口,协议>)作为key露拼装message,因为HTTP基于TCP协议,根据TCP协议中的ACK以及SEQ识别一次调用包的完整性,把一次HTTP调用的一个或多个TCP报文拼装后,如果识别到HTTP协议报文已经结束,可以进入转发阶段,转发即把这些报文中的数据段拼装后,直接对命令行上指定的端口发送TCP报文,从而完成转发。

基本命令:

gor --input-raw :8080 --http-allow-url /allow/urlx --http-disallow-url /disallow/urlx --output-file  test.gor --output-file-append
gor --input-file 'test.gor|100%'  --output-http 'http://xxx.xxx.xxx.xxx:8080' --output-http-workers-min 100 --output-http-workers 200

输入有raw、kafka、http、tcp、file

输出有raw、kafka、http、tcp、file、stdout

配置:

参数及解释
功能组 配置项 功能解释 代码潜析
进程通用配置

--exit-after 5s

进程多久后退出

 
output-http

 

 

--output-http-stats

--output-http-stats-ms 1000

按设定时间间隔打印统计信息,默认5s

latest,mean,max,count,count/second,gcount

https://www.cnblogs.com/it-worker365/p/15113743.html

--output-http-workers-min 100

--output-http-workers 200

--output-http-worker-timeout

http输出工作线程数

 默认情况下,Gor创建一个动态工作池:它从10开始,并在HTTP输出队列长度大于10时创建更多的HTTP输出工作者。创建的工人数量(N)等于该工作时间的队列长度检查并发现其长度大于10.每次将消息写入HTTP输出队列时都检查队列长度。在产生N名工人的请求得到满足之前,不会再有工人产卵。如果动态工作人员当时不能处理消息,它将睡眠100毫秒。如果动态工作人员无法处理消息2秒钟,则会死亡。您可以使用--output-http-workers=20选项指定固定数量的工人

https://www.cnblogs.com/it-worker365/p/15113764.html 
--output-http-timeout  http输出访问http客户端超时时间
--output-http-queue-len http输出队列大小 https://www.cnblogs.com/it-worker365/p/15114622.html
--output-http-response-buffer 响应缓冲区  
 output-file

--output-file-size-limit

--output-file-queue-limit

块队列的长度和每个块的大小。默认值分别是256和32mb。可以使用后缀“k”(KB),“m”(MB)和“g”(GB)
https://www.cnblogs.com/it-worker365/p/15113819.html  
 --output-file-append 单独文件append存储
--output-file-flush-interval 刷盘间隔默认100ms https://www.cnblogs.com/it-worker365/p/15114667.html
--output-file-buffer 临时文件地址,默认/tmp  
 input-file  变速回放  test.gor|1  最大不超过1QPS;  test.gor|100%  不超过原流量的100%; 变速回放支持 https://www.cnblogs.com/it-worker365/p/15113961.html 
--input-file-loop 文件循环使用
input-raw --input-raw-buffer-size 10485760

goreplay基于libpcap和操作系统底层通讯数据包缓冲,组合协议请求

超过缓冲区大小的请求会被丢弃,故设置Buffer

录制数据丢失可以尝试调大该参数即可

https://github.com/buger/goreplay/wiki/

Dealing-with-missing-requests-and-responses

https://www.cnblogs.com/it-worker365/p/15114596.html

--copy-buffer-size

每个请求的最大Buffer

https://www.cnblogs.com/it-worker365/p/15114596.html

 --input-raw-track-response

收集返回结果

 
--input-raw-realip-header

保存来源真实ip

--input-raw-realip-header "X-Real-IP"

 
http其他配置 --http-set-header

为请求添加头部信息--http-set-header 'User-Agent: Gor'

https://www.cnblogs.com/it-worker365/p/15113907.html

--http-rewrite-header

表达式修改头部信息

--http-rewrite-header Host: (.*).example.com,$1.beta.example.com

--http-set-param 修改头部信息--http-set-param api_key=1
--http-allow-method

允许的请求方法

--http-allow-method GET --http-allow-method OPTIONS

--http-allow-url 允许的请求url表达式--http-allow-url ^www.
--http-disallow-url 不允许的请求表达式--http-disallow-url ^www.
--http-rewrite-url

表达式重写

--http-rewrite-url /v1/user/([^\/]+)/ping:/v2/user/$1/ping

--http-allow-header 允许的头部--http-allow-header api-version:^v1
--http-disallow-header

不允许的头部

--http-disallow-header "User-Agent: Replayed by Gor"

--http-header-limiter 对头部信息进行百分比过滤--http-header-limiter user-id:25%
--http-param-limiter 对请求参数进行百分比过滤--http-param-limiter user_id:25%

引用例子比较全的文档:https://blog.csdn.net/qq_40093255/article/details/117227229

辅助工具:

gor file-server :8000

posted on 2021-08-08 12:56  it_worker365  阅读(1049)  评论(0编辑  收藏  举报