• goreplay~基本知识


    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

  • 相关阅读:
    通过set和waitOne来控制子线程的运行和停止
    一种控制线程运行和停止的方法
    C# 运用params修饰符来实现变长参数传递
    ref和out的区别
    C# 抽象类和接口的区别
    更有效率的使用Visual Studio(一)
    更有效率的使用Visual Studio(二)
    RS232串口用事件接受数据(一问一答)
    socket的异步回调函数,采用一问一答
    js去重方法
  • 原文地址:https://www.cnblogs.com/it-worker365/p/15113778.html
Copyright © 2020-2023  润新知