性能测试-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%"
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!