GoReplay流量錄制與回放


一、前言

本次參考以下2篇文章,純粹只了解工具的原理和用法,尚未實踐。

https://cloud.tencent.com/developer/article/1491793

https://www.cnblogs.com/qmfsun/p/11598763.html#top(詳細)

二、GoReplay簡介

gor 是一款go語言實現的簡單的http流量復制工具,它的主要目的是使你的生產環境HTTP真實流量在測試環境和預發布環境重現。只需要在 代理例如nginx入口服務器上執行一個進程,就可以把生產環境的流量復制到任何地方,

完美解決了HTTP 層實時流量復制和壓力測試的問題。常見的HTTP流量copy工具還有另外一款tcpcopy。將機器A上的http請求復制轉發到指定機器B上去,

通過線上流量復制引流,通過將真實請求流量放大N倍來進行壓測,能對服務有一個較為全面的檢驗。 

 

三、GoReplay安裝

#下載包
 wget https://github.com/buger/goreplay/releases/download/v1.0.0/gor_1.0.0_x64.tar.gz
 
 #解壓
 tar xvf gor_1.0.0_x64.tar.gz

 

四、流量錄制驗證

執行下如下命令,錄制80端口的包,輸出到控制台,測試下是否可以錄制到流量

sudo ./gor --input-raw :3000 --output-stdout

打開瀏覽器訪問部署在該服務器的一個已部署好的80端口的web服務,或者通過curl訪問也可以,url如下http://www.testbang.cn/images/about.jpg

如果有如下是輸出說明可以成功錄制80端口的流量

五、流量回放驗證

流量實時復制引流(--input-raw 攔截端口配合--output-http輸出),將本機端口3000的HTTP流量復制到目標服務器9090端口,

步驟一,輸入如下命令:

sudo ./gor --input-raw :3000 --output-http "http://目標服務器ip:9090"

步驟二:在3000端口url執行請求操作

步驟三:查看ip:9090的請求日志,是可以看到在3000端口執行的請求會在9090被同步執行

注:因為我的端口沒地方可以看到請求日志,所以只能靠文字描述下。

六、其他場景命令

以下命令沒驗證過哈,先轉發過來:

1、 如果目標服務器使用的庫與線上機器一樣,需要只引流Get方法,不應該復制上行方法(POST等)

gor --input-raw :80 --http-allow-method GET --output-http "http://target_server:8080"

2、 當需要對線上服務進行整體性能壓測時,可將線上請求擴大N倍,進行引流

gor --input-raw :80 --http-allow-method GET --output-http "http://target_server:8080|200%" #將請求擴大1倍,也可縮小,調整"|"后面的百分比即可

3、 只復制某個URL請求,--http-allow-url參數

gor --input-raw :8080 --http-allow-method GET --output-http "http://target_server:8080" --http-allow-url mall.*hotword

#--http-allow-url參數可用正則表達式

#--output-http-url-regexp在gor 0.16已經過期,使用--http-allow-url代替

4、多目標服務器的流量復制引流,有點類似nginx的mirror

gor --input-raw :80 --output-http "http://target_server:8080" --output-http "http://target_server2:8080"

 

 

 注:gor目前的只能使用較為簡單的無鑒權的操作,同時要求線下環境的數據要和線上的數據保持一致,不然會出現線上的請求參數,copy到測試環境出現空指針等異常


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM