使用方法
这个工具可以直接从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"