性能测试-goreplay工具实现流量录制和转发

官方网站:https://github.com/buger/goreplay

1.1 安装golong的环境

goreply是golong编写,需要安装golong环境

# 通过yum进行go环境的安装
[root@master tgz]# wget https://dl.google.com/go/go1.14.6.linux-amd64.tar.gz 

# 解压
[root@master tgz]# tar -C /usr/local -xzf go1.14.6.linux-amd64.tar.gz

#设置环境变量
[root@master tgz]# echo 'export PATH=$PATH:/usr/local/go/bin' >> ~/.bash_profile
[root@master tgz]# echo 'export GOROOT=/usr/local/go' >> ~/.bash_profile
[root@master tgz]# echo 'export GOPATH=$HOME/go' >> ~/.bash_profil
[root@master tgz]# source ~/.bash_profilee

# 检查
[root@master tgz]# go version
go version go1.14.6 linux/amd64

1.2 下载 groeplay

# 下载最新的版本
[root@master ~]# cd /opt/tgz/
[root@master tgz]# wget https://github.com/buger/goreplay/releases/download/1.3.3/gor_1.3.3_x64.tar.gz

# 解压下载的tar包
[root@master tgz]# tar -zxvf gor_1.3.3_x64.tar.gz

# 将解压的文件目录复制到计算机的app目录下(只要是自己确认的工作目录即可)
[root@master tgz]# mkdir -p /opt/app/goreplay-1.3.3
[root@master tgz]# vm gor /opt/app/goreplay-1.3.3/.

1.3 使用groeplay

groeplay可以架设在nginx(或同类)服务上,对服务器请求进行转发或记录成文件,再通过文件对访问流量进行回放,一般用于压力测试和场景流量测试。

1.3.1监听nginx

# 监听nginx的80端口打印到控制台
[root@master goreplay-1.3.3]# ./gor --input-raw :80 --output-stdout
Interface: ens33 . BPF Filter: ((tcp dst port 80) and (dst host 10.0.0.100 or dst host fe80::46eb:34c3:4d55:eb7d))
Interface: lo . BPF Filter: ((tcp dst port 80) and (dst host 127.0.0.1 or dst host ::1))
2024/10/23 10:06:21 [PPID 1766 and PID 68123] Version:1.3.0
1 db7900500a0000011d2cc5a2 1729649195596308416 0
GET /favicon.ico HTTP/1.1
Host: 10.0.0.100
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36
Accept: image/avif,image/webp,image/apng,image/svg+xml,image/*,*/*;q=0.8
Referer: http://10.0.0.100/
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: csrftoken=0gkSK09sgygpgwTjASThi22QgfQrJBdhAU0PvnC9NIRChhYwhVH7epMDRPL2YIU7; grafana_session=618dddff1e7375ad8e369a2aabd7a418; grafana_session_expiry=1729649783

1.3.2 监听nginx将内容保存到文件

# 监听 nginx的80端口,将请求保存到文件中
[root@master goreplay-1.3.3]# ./gor --input-raw :80 --output-file goreplay.gor
Interface: ens33 . BPF Filter: ((tcp dst port 80) and (dst host 10.0.0.100 or dst host fe80::46eb:34c3:4d55:eb7d))
Interface: lo . BPF Filter: ((tcp dst port 80) and (dst host 127.0.0.1 or dst host ::1))
2024/10/23 10:14:15 [PPID 1766 and PID 75359] Version:1.3.0

# 我们请求nginx后,发现生成了指定的文件
[root@master goreplay-1.3.3]# ll
总用量 24528
-rwxr-xr-x 1  501 games 25110896 10  9 2021 gor
-rw-r----- 1 root root      2179 10 23 10:14 goreplay_0.gor

# 打开文件检查内容,里面记录了服务启动时间段中的所有的请求
[root@master goreplay-1.3.3]# cat goreplay_0.gor 
1 dc2400500a0000017273c3c9 1729649663194983680 0
GET / HTTP/1.1
Host: 10.0.0.100
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: csrftoken=0gkSK09sgygpgwTjASThi22QgfQrJBdhAU0PvnC9NIRChhYwhVH7epMDRPL2YIU7; grafana_session=618dddff1e7375ad8e369a2aabd7a418; grafana_session_expiry=1729649783
If-None-Match: "670e658f-267"
If-Modified-Since: Tue, 15 Oct 2024 12:52:31 GMT


🐵🙈🙉
1 dc2400500a0000017273c47d 1729649669483440629 0
GET /status HTTP/1.1
Host: 10.0.0.100
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/130.0.0.0 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en-US;q=0.8,en;q=0.7
Cookie: csrftoken=0gkSK09sgygpgwTjASThi22QgfQrJBdhAU0PvnC9NIRChhYwhVH7epMDRPL2YIU7; grafana_session=618dddff1e7375ad8e369a2aabd7a418; grafana_session_expiry=1729649783


🐵🙈🙉

…………………………………………………………………………………………

1.3.3 通过流量录制的文件,将保存的请求内容发送给nginx

# 通过读取文件内容,将录制的请求回放
[root@master goreplay-1.3.3]# ./gor --input-file "goreplay_0.gor" --output-http "http://10.0.0.100:80"
2024/10/23 10:35:40 [PPID 1766 and PID 95030] Version:1.3.0
[DEBUG][elapsed 8.521899583s]: [INPUT-FILE] FileInput: end of file 'goreplay_0.gor'

# 流量回放的评率控制,在文件后添加|百分比,控制流量发送的评率是原始评率的占比,200%代表2倍,50%代表0.5倍,默认100%
[root@master goreplay-1.3.3]# ./gor --input-file "goreplay_0.gor|150%" --output-http "http://10.0.0.100:80"

# 流量回放的无限循环,正确情况按照文件内容发送一次,添加参数后可以无限循环发送
[root@master goreplay-1.3.3]# ./gor --input-file "goreplay_0.gor" --input-file-loop --output-http "http://10.0.0.100:80"

1.3.4 实现流量的实时转发

# 事件监听端口的实时转发,监听本机80端口,转发到指定IP:port
[root@master goreplay-1.3.3]# ./gor -input-raw :80   -output-http "http://10.0.0.100:80"

# 事件监听端口的实时转发,监听本机80端口,转发到多个指定IP:port
[root@master goreplay-1.3.3]# ./gor -input-raw :80   --output-http "http://10.0.0.100:80"  --output-http "http://10.0.0.101:80"

# 依据method进行转发筛选,使用 --http-allow-method value 参数 只转发 get 请求
[root@master goreplay-1.3.3]# ./gor --input-raw :80  --http-allow-method GET --output-http "http://10.0.0.100:80"

# 依据url进行转发筛选,使用 --http-allow-url value 参只转发某类型的url
[root@master goreplay-1.3.3]# ./gor --input-raw :80  --http-allow-url /status --output-http "http://10.0.0.100:80"

# 依据heard进行转发筛选,使用 --http-allow-header value 参数 (包含)或 --http-disallow-header 参数(不包含)
[root@master goreplay-1.3.3]# ./gor --input-raw :80  --http-allow-header "User-Agent: Replayed by Gor" --output-http "http://10.0.0.100:80"
[root@master goreplay-1.3.3]# ./gor --input-raw :80  --http-disallow-header "User-Agent: Replayed by Gor" --output-http "http://10.0.0.100:80"

# 限流每秒请求数限制在10个以内
[root@master goreplay-1.3.3]# ./gor -input-raw :80   -output-http "http://10.0.0.100:80|10"
# 限流每秒请求数限制在监听的10%
[root@master goreplay-1.3.3]# ./gor -input-raw :80   -output-http "http://10.0.0.100:80|10%"
posted @   tigerMao  阅读(160)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
点击右上角即可分享
微信分享提示