1.tcpcopy
需要三台服务器
一台线上服务器 一台测试服务器 一台辅助服务器 ,辅助服务器的作用是以免将测试服务器的响应打到线上服务器上去
下载安装
https://github.com/session-replay-tools/tcpcopy
http://github.com/session-replay-tools/intercept
线上服务器安装tcpcopy
解压后
cd tcpcopy
./configure
make && make install
辅助服务器安装intercept
cd intercept
./configure
make && make install
/usr/local/tcpcopy/sbin/tcpcopy -x 80-172.16.1.25:80 -s 172.16.1.24 -c 172.16.100.x -d -C 4 -l /var/log/tcpcopy.log
将80端口收到的流量复制到测试机ip 172.16.1.25的80端口,并设置辅助机的ip地址为172.16.1.24,且将复制过去的流量中的源地址统一更改为172.16.100.x,这样做的好处是我们在测试机上可以直接针对整个更改后的网段设置一条路由即可。
2.goreplay
下载 https://github.com/buger/goreplay
进入目录go build,完成后会有一个可执行文件 goreplay
1. 转发(改成你需要的ip和端口)
./goreplay --input-raw :8080 --output-http "http://192.168.1.100:6660"
2. 保存到文件
./goreplay --input-raw :8080 --output-file “requests.gor“
3. 保存到文件,添加内容到相同文件
./goreplay --input-raw :8080 --output-file requests.txt --output-file-append
4. 从文件转发
./goreplay --input-file requests.txt --output-http "http://192.168.1.100:6660"
5. 只允许转url regexp
./goreplay --input-raw :8080 --output-http staging.com --http-allow-url /api
6. 转发到本机tcp(适用于nginx upstream的情况)
需要打开2个goreplay
./goreplay --input-raw :1029 --output-tcp "localhost:28020"
./goreplay --input-tcp :28020 --output-file "request.gor"
7. 循环+流量放大
./goreplay --input-file "oo01_0.log|1000%" --output-http "http://xxx.cn" --input-file-loop
8.控制流量
./goreplay –input-tcp :28020 –output-http “http://staging.com|10″
以回放oms流量为例
再10.10.10.10 上回放流量到127.0.0.1 上
./goreplay --input-raw :9008 --output-http "http://127.0.0.1:9008"
监控日志看到有流量打过来
[root@s1 /data/www/oms/log]# tail -f application.log.202202141900
3.nginx的mirror
ngx_http_mirror_module模块,利用mirror模块,业务可以将线上实时访问流量拷贝至其他环境,基于这些流量可以做版本发布前的预先验证
4.日志回放
最简单的就是直接日志回放
|