goreplay流量复制及模拟线上流量

使用方法

这个工具可以直接从github上下载成品,如果你的服务器是centos7以上,应该可以直接解压后使用;

https://github.com/buger/goreplay

解压后只有一个文件:goreplay

他会依赖两个系统库,一般系统已经预置,如果没有,可以手动安装,详见这里:

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

1 录制
./goreplay   执行

./goreplay --input-raw :80 --http-allow-url '/api/v1' --output-stdout  抓取 80 端口的 HTTP 请求,只抓请求 URL 是 /api/v1 的,并输出到终端
注意: 默认情况下, GoReplay 不会跟踪响应, 你可以这样子开启这个功能: –output-http-track-response

./goreplay --input-raw :80 --output-file 'request.gor'   抓取 80 端口的所有请求,并保存到文件。实际会分批保存为 request_0.gor

2、回放
 ./goreplay --input-raw :8000 --output-http="http://localhost:8001"   将 8000 端口的流量, 重放到 8001 端口的服务了

./goreplay --input-raw :80 --output-http="http://192.168.100.100:1234"  将请求到本机80端口的http请求,毫无变化的转发到192.168.100.100的1234端口上

./goreplay --input-file 'request.gor|10000%' --input-file-loop --output-http 'http://host2.com' --output-http-workers 100 --stats --output-http-stats 
# --input-file 从文件中获取请求数据,重放的时候 100x 倍速
# --input-file-loop 无限循环,而不是读完这个文件就停止
# --output-http 发送请求到 http://host2.com
# --output-http-workers 并发 100 发请求
# --stats --output-http-stats 每 5 秒输出一次 TPS 数据

3 保存到文件,然后再回放
保存到文件:
 ./goreplay --input-raw :8000 --output-file=requests.gor
回放
./goreplay --input-file requests.gor --output-http="http://localhost:8001"

4 回放多站点
./goreplay --input-tcp :28020 --output-http "http://staging.com"  --output-http "http://dev.com"

5、轮训分割流量
./goreplay --input-raw :80 --output-http "http://staging.com"  --output-http "http://dev.com" --split-output true

6 跟踪重定向
./goreplay --input-tcp replay.local:28020 --output-http http://staging.com --output-http-redirects 2
–output-http-redirects 2 表示最多跟踪2层的重定向

7 HTTP 超时设置
./goreplay --input-tcp replay.local:28020 --output-http http://staging.com --output-http-timeout 30s
 --output-http-timeout 30s 超时30s

8、并发测试
./goreplay --input-file "requests.gor|200%" --output-http "staging.com"
200%表示放大2倍速度来回放


9、查看统计信息
--stats --output-http-stats

10、无限回放
--input-file-loop

11、速率限制

  a. 绝对值
 ./goreplay --input-tcp :28020 --output-http "http://staging.com|10"
表示最大不超过 10 QPS

b. 百分比
./goreplay --input-raw :80 --output-tcp "replay.local:28020|10%"
不超过原流量的 10%

12 过滤请求
a.允许url正则
./goreplay --input-raw :8080 --output-http staging.com --http-allow-url /api
表示只允许 /api 的请求

b.禁止的 url 正则
./goreplay  –input-raw :8080 –output-http staging.com –http-disallow-url /api 
除 /api 之外的请求

13 基于方法
./goreplay --input-raw :80 --output-http "http://staging.server" --http-allow-method GET --http-allow-method OPTIONS
表示只允许 GET , OPTIONS 的请求

14 基于请求头
./goreplay --input-raw :8080 --output-http staging.com --http-allow-header api-version:^1\.0\d
./goreplay --input-raw :8080 --output-http staging.com --http-disallow-header "User-Agent: Replayed by Gor"


15 请求重写
./goreplay --input-raw :8080 --output-http staging.com --http-rewrite-url /v1/user/([^\\/]+)/ping:/v2/user/$1/ping

16 设置url参数
./goreplay --input-raw :8080 --output-http staging.com --http-set-param api_key=1

17 设置header
./goreplay --input-raw :80 --output-http "http://staging.server" --http-header "User-Agent: Replayed by Gor" --http-header "Enable-Feature-X: true"

18、导出到es
./goreplay --input-raw :8000 --output-http http://staging.com  --output-http-elasticsearch localhost:9200/gor

19https支持
--input-tcp-secure --input-tcp-certificate ./cert.pem --input-tcp-certificate-key ./key.pem --output-tcp-secure
1. 背景: 备战双十一,提前检测系统的各项指标
2. 目标: 此次力争取让系统能承受6倍流量压力
3. 步骤

1) 抓取流量
在以下三台docker上抓取流量,抓取持续时间一个小时,生产3个文件,留作正式压测时回放用。

101.15.13.102 101.15.18.102 101.15.18.108
2) 抓取的命令
./goreplay --input-raw :2031 \
--output-http-timeout 30s \
--output-file /tmp/mall-api-replay-`hostname`_%Y-%m-%d-%H-%M.log \
--http-allow-method GET \
--http-allow-method POST \
--http-allow-url /api/auth/access \
--http-allow-url /api/search/getassociationalwords \
--http-allow-url /api/purchase/getskubyids \
--http-allow-url /api/ad/get \
--http-allow-url /api/search/getsearchlistbyc2 \
--http-allow-url /api/commodity/getbiandbrand \
--http-allow-url /api/push/getunreadnumbyuserid \
--http-allow-url /api/purchase/getcommonlist \
--http-allow-url /api/cms/getbyroute \
--http-allow-url /api/config/geturlsconfig \
--http-allow-url /api/commodity/detail \
--http-allow-url /api/account/personalcenter \
--http-allow-url /mall/api/purchase/getskubyids \
--http-allow-url /api/commodity/saleclass \
--http-allow-url /api/recommend/sku-recommend \
--http-allow-url /api/account/getapplyjoincount \
--http-allow-url /api/ad/gethotword \
--http-allow-url /api/purchase/getpurchasescheme \
--http-allow-url /mall/api/account/getcompany \
--http-allow-url /api/cms/gettabbar \
--http-allow-url /api/auth/loginbytickets \
--http-allow-url /api/purchase/getabtestconfig \
--http-allow-url /api/search/getsearchhistory \
--http-allow-url /mall/api/search/getsearchlistbyc2 \
--http-allow-url /api/search/getsearchresult \
--http-allow-url /api/search/getdrillwords \
--http-allow-url /api/purchase/trailcommonuse \
--http-allow-url /api/purchase/getforcelogin \
--http-allow-url /api/cms/getcoupons \
--http-allow-url /api/ad/getsmarthotword \
--http-allow-url /mall/api/purchase/getcommonlist \
--http-allow-url /mall/api/coupon/getdeliverbyid \
--http-allow-url /api/cms/getintelligentpic \
--http-allow-url /mall/api/cms/getbypageid \
--http-allow-url /mall/api/commodity/getbiandbrand \
--http-allow-url /api/purchase/getrecommend \
--http-allow-url /mall/api/commodity/saleclass \
--http-allow-url /api/account/getcompany
3) 流量回放阶段
a)23:40 上4倍流量,在2台打压机上分别同时启动3个goreplay进程用2倍压力,则两台总共是4倍压力,用上一步捕获的3个文件
替换命令行里面的 xxx.log
第一个进程:
goreplay --input-file "xxx.log|200%" --output-http="http://101.15.6.175:2031" --output-http="http://101.15.10.111:2031" --output-
http="http://101.15.10.110:2031" --output-http="http://101.15.5.120:2031" --output-http="http://101.15.30.112:2031" --output-
http="http://101.15.30.113:2031" --output-http="http://101.15.30.114:2031"
第二个进程:
goreplay --input-file "xxx.log|200%" --output-http="http://101.15.30.115:2031" --output-http="http://101.15.18.102:2031" --output-
http="http://101.15.0.153:2031" --output-http="http://101.15.0.154:2031" --output-http="http://101.15.30.144:2031" --output-
http="http://101.15.30.145:2031" --output-http="http://101.15.30.146:2031" --output-http="http://101.15.30.147:2031"
第三个进程:
goreplay --input-file "xxx.log|200%" --output-http="http://101.15.18.104:2031" --output-http="http://101.15.13.102:2031" --output-
https://xx.xx.com/pages/viewpage.action?pageId=11631944
1/22018/11/23
mall-api2018年双十一压测方案-Spruce产品・技术-SpruceTecWiki
http="http://101.15.13.103:2031" --output-http="http://101.15.18.108:2031" --output-http="http://101.15.18.109:2031" --output-
http="http://101.15.13.144:2031" --output-http="http://101.15.5.28:2031" --output-http="http://101.15.6.245:2031"
b)23:50 上6倍流量,在2台打压机上分别同时启动3个goreplay进程用3倍压力,则两台总共是6倍压力,,用上一步捕获的3个文
件替换命令行里面的 xxx.log
第一个进程:
goreplay --input-file "xxx.log|300%" --output-http="http://101.15.6.175:2031" --output-http="http://101.15.10.111:2031" --output-
http="http://101.15.10.110:2031" --output-http="http://101.15.5.120:2031" --output-http="http://101.15.30.112:2031" --output-
http="http://101.15.30.113:2031" --output-http="http://101.15.30.114:2031"
第二个进程:
goreplay --input-file "xxx.log|300%" --output-http="http://101.15.30.115:2031" --output-http="http://101.15.18.102:2031" --output-
http="http://101.15.0.153:2031" --output-http="http://101.15.0.154:2031" --output-http="http://101.15.30.144:2031" --output-
http="http://101.15.30.145:2031" --output-http="http://101.15.30.146:2031" --output-http="http://101.15.30.147:2031"
第三个进程:
goreplay --input-file "xxx.log|300%" --output-http="http://101.15.18.104:2031" --output-http="http://101.15.13.102:2031" --output-
http="http://101.15.13.103:2031" --output-http="http://101.15.18.108:2031" --output-http="http://101.15.18.109:2031" --output-
http="http://101.15.13.144:2031" --output-http="http://101.15.5.28:2031" --output-http="http://101.15.6.245:2031"

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值