介绍:

1.goreplay是一个开源的网络监控工具,它可以记录你的实时流量,并用于跟踪、负载测试、监控和详细分析。

2.goreplay 是一款从生产环境 copy 流量到测试环境的工具,且不会影响生产环境的业务响应,又能很简单的达到复用 http 请求来做稳定性测试的目的。

tcpcopy和Goreplay区别:

1.tcpcopy 部署架构相对复杂,goreplay 相对简单只需启动一个进程。

2.tcpcopy 支持的协议比较丰富,goreplay 根据架构特点仅支持 http。

3.tcpcopy 和 goreplay 都支持离线和在线录制回放。

总结:简单 http 复制 goreplay 完全可以胜任,稍复杂点或应用场景更复杂,那么推荐 tcpcopy。更复杂,要求更高的流量复制,那只能我们自己定制了。

使用场景:

什么时候可以试用goreplay?
简单写几点场景,具体还是根据实际需求来。

  • Case 1
    上线前在预发布环境,使用线上真实的请求,检查是否准备发布的版本,是否具备发布标准
  • Case 2
    压力测试完成后,用线上真实的请求,加速后回放至测试环境,检查是否有报错等问题
  • Case 3
    abtest用线上的流量转发到预发,检查相同流量下一些指标的反馈情况,检查核心数据是否有改善、优化等等具体case还需要根据自己的需求,灵活改变。

安装方式:

goreplay 是基于 go 语言实现的,要在生产服务器上安装 go 环境;

非源码编译安装:

# 请自行安装最新版本
wget https://github.com/buger/goreplay/releases/download/v0.16.1/gor_0.16.1_x64.tar.gz
tar xvf gor_0.16.1_x64.tar.gz

源码编译安装:

https://www.cnblogs.com/junethirty/p/13304774.html ............源码安装

goreplay常用命令/参数:

参数:

--input-raw 抓取指定端口的流量 gor --input-raw :8080
--output-stdout 打印到控制台
--output-file 将请求写到文件中 gor --input-raw :80 --output-file ./requests.gor
--input-file 从文件中读取请求,与上一条命令呼应 gor --input-file ./requests.gor
--exit-after 5s 持续时间
--http-allow-url url白名单,其他请求将会被丢弃
--http-allow-method 根据请求方式过滤
--http-disallow-url 遇上一个url相反,黑名单,其他的请求会被捕获到
--output-http - 重放 HTTP 流量到给定的端点,接受基础 URL

 常用命令:

  • 捕获2051端口的请求打印到控制台
sudo ./gor --input-raw :2051 --output-stdout
  • 转发8080端口的流量(改成你需要的ip和端口),需要实际存在的地址
sudo ./gor --input-raw :8080 --output-http "http://192.168.1.100:6660"
  • 转发8080流量并控制台输出
sudo ./gor --input-raw :8080 --output-http "http://192.168.1.100:6660"  --output-stdout
  • 获取经过本地 8080 端口的请求流量,然后保存在.gor 文件中
sudo ./gor --input-raw :8080 --output-file=request.gor
  • 从文件提取流量 并向某的地址的某个端口输出
sudo ./gor --input-file=request.gor --output-http="http://localhost:8000"
  • 请求过滤---只收集 /api 下的请求
sudo ./gor --input-raw :8080 --output-http staging.com --http-allow-url /api

转发流量提高2倍 (当需要对线上服务进行整体性能压测时,可将线上请求扩大 N 倍,进行引流,将请求扩大 1 倍,也可缩小,调整"|"后面的百分比即可)

sudo ./gor --input-raw :80  --http-allow-method GET --output-http "http://target_server:8080|200%"
  • 限制每秒的请求数
sudo ./goreplay  --input-tcp :28020 --output-http "http://staging.com|10"# (每秒请求数限制10个以内)
sudo ./goreplay --input-raw :80 --output-tcp "replay.local:28020|10%" # (每秒请求数限制10%以内)

文件中请求以2倍的速度发出去(同时也支持限速10% 20%等)

sudo ./gor --input-file “./recommend_you_like_0.gor|200%” --output-http="http://172.1.1.1:2051"

高级篇:

  • 将流量转发到多个端点,默认情况下,它会将相同的流量发送到所有输出。
gor --input-tcp :28020 --output-http "http://staging.com"  --output-http "http://dev.com"
  • 将相同的流量发送到多个站点,并且平分所有流量。
gor --input-raw :80 --output-http "http://staging.com"  --output-http "http://dev.com" --split-output true
  • HTTP 超时,默认情况下,http 请求和响应的超时时间为 5 秒。你可以像这样覆盖它:
gor --input-tcp replay.local:28020 --output-http http://staging.com --output-http-timeout 30
  • 性能压力测试--可以将流量复制到文件,然后再对他们进行回放。回放的时候,流量会维持原始的时间间隔。如果你使用了百分比来进行速率限制,那么回放的速率会相应的增加或减少。有了这种速率限制,gor 就可以用来进行压力测试。
gor --input-file "requests.gor|200%" --output-http "staging.com"

目前,input-file 仅在使用基于百分比的限制器时才支持此功能。与默认限制器不同 input-file,它不会降低请求速度,而会减慢速度或加速请求发射。

备注: 

    需要自己搭建一个接口服务才能更好理解goreplay的使用。

相关连接:

https://ruby-china.org/topics/37756 .................................................................Goreplay - 使用真实流量测试你的应用

https://testerhome.com/articles/21180 .............................................................线上引流测试工具:GoReplay

https://www.jianshu.com/p/501218e0beb1........................................................使用goreplay流量回放实践

https://www.cnblogs.com/yongqing-python/articles/15988318.html .................实现流量回放(含flask接口)

https://zuozewei.blog.csdn.net/article/details/119776846 ...............................流量回放工具之 Goreplay 使用教程

Goreplay流量回放-使用真实流量测试的更多相关文章

  1. 使用tcpcopy导入线上流量进行功能和压力测试

    - 假设我们要上线一个两年内不会宕机的先进架构.在上线前,免不了单元测试,功能测试,还有使用ab,webbench等等进行压力测试. 但这些步骤非生产环境下正式用户的行为.或许你会想到灰度上线,但毕竟 ...

  2. 流量回放专题-jvm-sanbox-repeater

    流量回放介绍 一.前言 你是否和我一样遇到过以下的问题? 1)服务重构,一堆接口需要回归,让人头疼 2)每次迭代,都要花很多精力来进行回归测试 3)线上bug,线下复现不了 4)接口自动化用例写辛苦, ...

  3. 阿里云OSS的 存储包、下行流量包、回流流量包 三者有啥关系

    阿里云OSS的 存储包.下行流量包.回流流量包 三者有啥关系 一.总结 一句话总结: 你把文件放 oss,会占用存储空间,存储包覆盖这部分费用 你访问存储在 oss 里面的文件,会产生下行流量,就是从 ...

  4. goreplay 镜像nginx web app流量

    goreplay 是一个很不错的流量拷贝,复制工具,小巧,支持一些扩展,当然也提供了企业版,企业版 功能更强大,支持二进制协议的分析 备注: 演示使用docker-compose 运行,测试镜像流量到 ...

  5. 案例一:利于Python调用JSON对象来实现对XENA流量测试仪的灵活发包测试,能够适应Pair,Rotate,1-to-Many等多种拓扑模型

    硬件:XENA Valkyrie 或 Vantage主机,测试板卡不限,本方法适用于其100M~400G所有速率端口 环境配置:Python 3 实现功能: 1.控制流量仪进行流量测试,预定配置的流量 ...

  6. tcpcopy真实流量压测工具

    https://quentinxxz.iteye.com/blog/2249799 http://blog.chinaunix.net/uid-25057421-id-5576741.html htt ...

  7. 如何用katalon录制回放一个web UI测试—— katalon学习笔记(四)

    ,首先打开katanlon,进入到katalon主界面,选择点击file->new->project ,在创建新项目弹出框中Name输入项输入项目的名称:Type选择web,也就是你要测试 ...

  8. 治理Go模块 服务治理 中台业务 Golang的net.Conn接口,double close

    小结: 1.中台业务 前台业务 快车.专车.顺风车,在滴滴这些业务线叫做前台服务,他们有一些共同的特性,都有司机信息,订单的状态,收银,账号等等这些业务逻辑,我们会把专门的业务逻辑集合起来,形成专职的 ...

  9. 淘宝:OceanBase分布式系统负载均衡案例分享

    Heroku因"随机调度+Rails单线程处理导致延迟增加的负载均衡失败"的案例之后,我们在思考:在负载均衡测试时发现问题并妥善解决的成功经验有没有?于是,挖掘出"淘宝在 ...

  10. HTTP流量神器Goreplay核心源码详解

    摘要:Goreplay 前称是 Gor,一个简单的 TCP/HTTP 流量录制及重放的工具,主要用 Go 语言编写. 本文分享自华为云社区<流量回放工具之 goreplay 核心源码分析> ...

随机推荐

  1. 自动化测试如此容易!多语言自动化测试框架 Selenium 编程(C#篇)

    介绍 Selenium 官网:https://www.selenium.dev/ Selenium 是功能强大的自动化测试工具集,是支持 Web 浏览器自动化的一系列工具和库的总括项目,一共包括以下三 ...

  2. 三分钟实战手写Spring Boot Starter

    1 背景 在平时的开发中,开发的同学会把一些通用的方法,写成一个工具类,例如日期转换的,JSON转换的等等,方便业务后续调用,使代码更容易维护. 如果一些更常用的方法,例如鉴权的,加解密的等等,几乎每 ...

  3. 基于WebGL的方式使用OpenLayers

    1. 引言 在绘制海量数据时,使用GPU进行绘制可有效减少CPU的负载,提升绘制时的速度在浏览器中,可以使用WebGL的方式与GPU交互 OpenLayers是一个常用的GIS相关的JavaScrip ...

  4. 爆肝200+小时,总结出的 Creator 3.x 入门修炼指南!全免费

    大家好,我是晓衡! 为了写这篇文章,给支持公众号的读者们一个交代,我准备了200+小时,公众号断更11天.我决定,不再选择逃避,不想再欺骗自己了. 2023新年开工,不到十天时间,接二连三有小伙伴找到 ...

  5. redis(14)主从复制

    Redis主从复制 主机数据更新后根据配置和策略, 自动同步到备机的 master/slaver 机制,Master 以写为主,Slave 以读为主,主从复制节点间数据是全量的. 作用: 读写分离,性 ...

  6. Angular ngx-translate中英文切换

    1.安装包 npm install @ngx-translate/core --save npm install @ngx-translate/http-loader --save 2.根模块app. ...

  7. pat乙级1022 D进制的A+B

    #include<stdio.h> #include<stdlib.h> #include<string.h> #include<math.h> #de ...

  8. No.2.3

    PC端网页和移动端网页的有什么不同? PC屏幕大,网页固定版心 手机屏幕小,网页宽度多数为100% 如何在电脑里面写代码边调试移动端网页效果? 谷歌模拟器 了解屏幕尺寸概念 屏幕尺寸:指的是屏幕对角线 ...

  9. RuntimeError: Expected all tensors to be on the same device, but found at least two devices, cuda:0 and cpu!

    错误原因:数据有的在cpu上有的在gpu上debug:断点到出错位置查看类型,或者打印`x.is_cuda`查看修改:将cpu上的数据通过`.to(device)`加载到gpu上

  10. 09 spark连接mysql数据库

    安装启动检查Mysql服务.netstat -tunlp (3306) spark 连接mysql驱动程序.–cp /usr/local/hive/lib/mysql-connector-java-5 ...