• goreplay使用


    goreplay使用

    官网: https://goreplay.org
    下载:https://github.com/buger/goreplay/releases
    官网使用说明:https://github.com/buger/goreplay/wiki
    使用说明:参考CSDN链接

    安装

    解压下载下来的压缩包
    tar -zxvf gor_1.3.3_mac.tar.gz
    
    • 1

    解压出出gor文件夹

    使用

    参数解释

    --input-raw :用来捕捉http流量,需要指定ip地址和端口
    -–output-stdout:终端输出
    -–output-file:指定保存流量的文件位置(必须以.gor后缀)
    –-input-file :指定输入流量的文件
    –-output-http:指定流量释放的对象server,需要指定IP地址和端口
    
    –-input-tcp:将多个Goreplay实例获取的流量聚集到一个Goreplay实例
    –-output-tcp:将获取的流量转移至另外的Goreplay实例
    
    –-http-disallow-url :不允许正则匹配的URL
    –-http-allow-header :允许的Header头
    –-http-disallow-header:不允许的Header头
    –-http-allow-method:允许的请求方法,传入值为GET,POST,OPTIONS等
    –-input-file-loop:无限循环,而不是读完这个文件就停止了
    –-output-http-workers:并发请求数
    –-stats --out-http-stats 每5秒输出一次TPS数据(查看统计信息)
    –-split-output true: 按照轮训方式分割流量
    –-output-http-timeout 30s:http超时30秒时间设置,默认是5秒
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    模仿本地服务

    ./gor file-server :8000
    
    • 1
    1、捕获网络流量并在终端输出–input-raw --output-stdout
    sudo ./gor --input-raw :8000 --output-stdout
    
    • 1
    2、捕获网流量保存到文件中–output-file
    sudo ./gor --input-raw :8000 --output-file=requests.gor
    
    • 1

    上述命令将8000端口的流量,保存到requests.gor文件中(必须是.gor后缀,其它后缀经测释放时有问题)。

    3、捕获网流量保存到文件中然后回放–output-http
    sudo ./gor --input-file requests_0.gor --output-http="http://localhost:8001"
    
    • 1

    释放所有保存在requests_0.gor中的请求通过相同的时间顺序释放到服务器http://localhost:8001。

    4、捕获网流量过滤
    4.1 过滤允许请求头 --http-allow-url
    ./gor --input-raw :8000 --output-stdout --http-allow-url /api
    
    • 1
    4.2 过滤不允许请求头 --http-disallow-url
    ./gor --input-raw :8000 --output-stdout --http-allow-url /api
    
    • 1
    4.3 过滤请求方法 --http-allow-method
    ./gor --input-raw :8000 --output-stdout --http-allow-method GET --http-allow-method POST
    
    • 1
    4.4 过滤不允许正则匹配的URL --http-disallow-url
    ./gor --input-raw :8000 --output-stdout --http-disallow-url /api
    
    • 1
    5、回放流量限速机制
    5.1限制每秒的请求数
    sudo ./gor --input-file requests_0.gor --output-http="http://localhost:8001|10" (每秒请求数限制10个以内)
    sudo ./gor --input-raw :8000 --output-http="http://localhost:8001|10%" (每秒请求数限制10%以内)
    
    • 1
    • 2
    5.2基于Header或URL的参数限制一些请求,为指定的Header或者URL的请求设定限制的百分比
    sudo ./goreplay  --input-raw :80 --output-http "http://localhost:8001|10%" --http-header-limiter "X-API-KEY: 10%"
    sudo ./goreplay  --input-raw :80 --output-http "http://localhost:8001|10%" --http-param-limiter "api_key: 10%"
    
    • 1
    • 2
    5、性能测试
    5.1如果是性能测试,可以不考虑请求的顺序和速率,并且要求无限循环
    # --input-file 从文件中获取请求数据,重放的时候 100x 倍速
    # --input-file-loop 无限循环,而不是读完这个文件就停止
    # --output-http 发送请求到 http://host2.com
    # --output-http-workers 并发 100 发请求
    # --stats --output-http-stats 每 5 秒输出一次 TPS 数据
    $ ./goreplay --input-file 'request.gor|10000%' --input-file-loop --output-http 'http://host2.com' --output-http-workers 100 --stats --output-http-stats
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    5.2流量回放到多个站点(复制引流)
    sudo ./gor --input-tcp :28020 --output-http "http://staging.com"  --output-http "http://dev.com"
    
    • 1
    5.3按照轮训方式分割流量(平分流量)
    sudo ./gor --input-raw :80 --output-http "http://staging.com"  --output-http "http://dev.com" --split-output true
    
    • 1
    5.4HTTP超时设置
    ./gor --input-tcp replay.local:28020 --output-http http://staging.com --output-http-timeout 30s
    
    • 1
    5.5性能测试(表示放大2倍速度来回放)
    ./gor --input-file "requests.gor|200%" --output-http "staging.com"
    
    • 1
    5.6回放速率不超过10QPS(绝对值)
    ./gor --input-tcp :28020 --output-http "http://staging.com|10"
    
    • 1
    5.7重写请求
    gor --input-raw :8080 --output-http staging.com --http-rewrite-url /v1/user/([^\\/]+)/ping:/v2/user/$1/ping
    
    • 1
    5.8设置URL参数
    gor --input-raw :8080 --output-http staging.com --http-set-param api_key=1
    
    • 1
    5.9设置HEADER
    gor --input-raw :80 --output-http "http://staging.server" --http-header "User-Agent: Replayed by Gor" --http-header "Enable-Feature-X: true"
    
    • 1
    5.10导出到ES
    ./gor --input-raw :8000 --output-http http://staging.com  --output-http-elasticsearch localhost:9200/gor
    
    • 1
    5.11基于Header或URL参数值的一致限制

    如果您在Header或URL中存储了唯一的用户ID(例如API密钥),则可以仅针对该用户的一部分持续转发指定的流量百分比。基本公式如下:FNV32-1A_hashing(value) % 100 >= chance。例子:

    # Limit based on header value
    sudo ./gor --input-raw :80 --output-tcp "replay.local:28020|10%" --http-header-limiter "X-API-KEY: 10%"
    
    # Limit based on header value
    sudo ./gor --input-raw :80 --output-tcp "replay.local:28020|10%" --http-param-limiter "api_key: 10%"
    
    • 1
    • 2
    • 3
    • 4
    • 5

    注意点
    如果 HTTP 请求不符合规范,可能会抓不到包。遇到过 HTTP 请求头里面的 Content-Length 不等于实际的 Body 大小,goreplay 认为其请求未结束。
    input-file 是单 goroutine 在跑,会有性能瓶颈。测试的时候,读取的 RPS 在 1.7w - 1.8w 左右,如果压测需求大于这个,需要开多个进程同时跑。

    分布式配置

    配置说明:https://github.com/buger/goreplay/wiki/Distributed-configuration

  • 相关阅读:
    XGboost遥感gis数据的回归预测(复合结果预测, 多列预测)实践(python版)
    【网安神器篇】——瑞士军刀Netcat
    Android驱动框架整理之KERNEL框架
    使用OLED透明广告屏,涉及到的附加费用
    BCH编码译码误码率性能matlab仿真
    20行代码,给你的项目增加 DevUI 主题切换能力
    Exchange Server 2016 安装部署
    JS中应该注意的点
    CString 转 unsigned int ;int 转16进制CString
    ASP.NET Core 6框架揭秘实例演示[26]:跟踪应用接收的每一次请求
  • 原文地址:https://blog.csdn.net/weixin_43665351/article/details/127687687