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