goreplay~基本知識


Goreplay是一款做http請求錄制回放的工具,go語言開發,基於驗證在正常請求下,是否有報錯;在倍數請求下,系統是否存在性能瓶頸

https://github.com/buger/goreplay/wiki

原理 - 使用pcap的go接口,使用bpf(伯克利包過濾)設置指定端口的過濾表達式,截取到tcp報文之后,根據網絡五元組(<源IP,源端口,目標IP,目標端口,協議>)作為key露拼裝message,因為HTTP基於TCP協議,根據TCP協議中的ACK以及SEQ識別一次調用包的完整性,把一次HTTP調用的一個或多個TCP報文拼裝后,如果識別到HTTP協議報文已經結束,可以進入轉發階段,轉發即把這些報文中的數據段拼裝后,直接對命令行上指定的端口發送TCP報文,從而完成轉發。

基本命令:

gor --input-raw :8080 --http-allow-url /allow/urlx --http-disallow-url /disallow/urlx --output-file  test.gor --output-file-append
gor --input-file 'test.gor|100%'  --output-http 'http://xxx.xxx.xxx.xxx:8080' --output-http-workers-min 100 --output-http-workers 200

輸入有raw、kafka、http、tcp、file

輸出有raw、kafka、http、tcp、file、stdout

配置:

參數及解釋
功能組 配置項 功能解釋 代碼潛析
進程通用配置

--exit-after 5s

進程多久后退出

 
output-http

 

 

--output-http-stats

--output-http-stats-ms 1000

按設定時間間隔打印統計信息,默認5s

latest,mean,max,count,count/second,gcount

https://www.cnblogs.com/it-worker365/p/15113743.html

--output-http-workers-min 100

--output-http-workers 200

--output-http-worker-timeout

http輸出工作線程數

 默認情況下,Gor創建一個動態工作池:它從10開始,並在HTTP輸出隊列長度大於10時創建更多的HTTP輸出工作者。創建的工人數量(N)等於該工作時間的隊列長度檢查並發現其長度大於10.每次將消息寫入HTTP輸出隊列時都檢查隊列長度。在產生N名工人的請求得到滿足之前,不會再有工人產卵。如果動態工作人員當時不能處理消息,它將睡眠100毫秒。如果動態工作人員無法處理消息2秒鍾,則會死亡。您可以使用--output-http-workers=20選項指定固定數量的工人

https://www.cnblogs.com/it-worker365/p/15113764.html 
--output-http-timeout  http輸出訪問http客戶端超時時間
--output-http-queue-len http輸出隊列大小 https://www.cnblogs.com/it-worker365/p/15114622.html
--output-http-response-buffer 響應緩沖區  
 output-file

--output-file-size-limit

--output-file-queue-limit

塊隊列的長度和每個塊的大小。默認值分別是256和32mb。可以使用后綴“k”(KB),“m”(MB)和“g”(GB)
https://www.cnblogs.com/it-worker365/p/15113819.html  
 --output-file-append 單獨文件append存儲
--output-file-flush-interval 刷盤間隔默認100ms https://www.cnblogs.com/it-worker365/p/15114667.html
--output-file-buffer 臨時文件地址,默認/tmp  
 input-file  變速回放  test.gor|1  最大不超過1QPS;  test.gor|100%  不超過原流量的100%; 變速回放支持 https://www.cnblogs.com/it-worker365/p/15113961.html 
--input-file-loop 文件循環使用
input-raw --input-raw-buffer-size 10485760

goreplay基於libpcap和操作系統底層通訊數據包緩沖,組合協議請求

超過緩沖區大小的請求會被丟棄,故設置Buffer

錄制數據丟失可以嘗試調大該參數即可

https://github.com/buger/goreplay/wiki/

Dealing-with-missing-requests-and-responses

https://www.cnblogs.com/it-worker365/p/15114596.html

--copy-buffer-size

每個請求的最大Buffer

https://www.cnblogs.com/it-worker365/p/15114596.html

 --input-raw-track-response

收集返回結果

 
--input-raw-realip-header

保存來源真實ip

--input-raw-realip-header "X-Real-IP"

 
http其他配置 --http-set-header

為請求添加頭部信息--http-set-header 'User-Agent: Gor'

https://www.cnblogs.com/it-worker365/p/15113907.html

--http-rewrite-header

表達式修改頭部信息

--http-rewrite-header Host: (.*).example.com,$1.beta.example.com

--http-set-param 修改頭部信息--http-set-param api_key=1
--http-allow-method

允許的請求方法

--http-allow-method GET --http-allow-method OPTIONS

--http-allow-url 允許的請求url表達式--http-allow-url ^www.
--http-disallow-url 不允許的請求表達式--http-disallow-url ^www.
--http-rewrite-url

表達式重寫

--http-rewrite-url /v1/user/([^\/]+)/ping:/v2/user/$1/ping

--http-allow-header 允許的頭部--http-allow-header api-version:^v1
--http-disallow-header

不允許的頭部

--http-disallow-header "User-Agent: Replayed by Gor"

--http-header-limiter 對頭部信息進行百分比過濾--http-header-limiter user-id:25%
--http-param-limiter 對請求參數進行百分比過濾--http-param-limiter user_id:25%

引用例子比較全的文檔:https://blog.csdn.net/qq_40093255/article/details/117227229

輔助工具:

gor file-server :8000


免責聲明!

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



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