背景
git
目前輸入法服務端的例行性能測試主要使用開源的流量回放工具goreplay,這個工具自己是作流量回放使用的,也能夠在回放流量的時候縮小或者放大倍數,以達到性能測試的目的,可是畢竟不是專業作性能測試的工具,就像這句名言說的「不是他的活他要幹」,因此對於結果統計,goreplay不是很擅長,爲了讓他支持客戶端統計,須要對他作個升級;github
goreplay自帶的統計
說他不支持結果統計,其實有些冤枉他,goreplay自帶命令行也是支持結果統計的,參數是:--stats --output-http-stats
加了這個命令行以後,控制檯輸出是這樣的:centos
其中倒數第二列等同於當前的QPS,可是這就是僅有的統計項了,並無區分返回碼、響應時間、TP90、TP99等指標;微信
prometheus(公衆號回覆prometheus可查看往期prometheus的介紹文章)
官網解釋:開源的監控解決方案ide
metrics
prometheus的監控數據源,詳細解釋可參考https://www.investopedia.com/terms/m/metrics.asp
函數
改造目標
讓goreplay支持實時metrics統計,在goreplay執行流量回放與性能測試時,實時統計出做爲壓測客戶端的goreplay當前的QPS和響應時間等各項指標;工具
實施過程
分析源碼,找到源碼中發出請求的函數;oop
爲了獲取請求狀態碼及對應QPS,在獲取請求返回值的位置插入counter metric;性能
爲了獲取不一樣請求響應時間等指標,須要在發出請求前記錄starttime,請求返回後記錄endtime,記錄時間消耗的histogram metric;測試
在goreplay啓動後註冊metrics接口及服務監聽端口;
prometheus服務中註冊goreplay客戶端的metrics服務;
grafana系統中創建dashboard,統計須要的數據指標;
效果
源碼中http_client.go中加入metrics相關代碼(源碼地址見文末)
main.go進行metrics註冊;
prometheus配置文件中註冊goreplay_client metrics
啓動goreplay的時候須要加命令行
-output-http-compatibility-mode true
以啓動結果統計;啓動goreplay時,查看監聽端口,發現有註冊的28081
接口訪問
http://10.1xx.xx.xx:28081/metrics
grafana中新建dashboard查詢須要的性能測試指標:
至此對goreplay的改造工做就作完了,經過metrics實現了從客戶端統計壓測過程當中的各項指標;
源碼地址,因爲提交分支須要goreplay做者審覈,因此github上新建了一個工程,你們能夠下載使用https://github.com/lidedede/gor
其中gor_ldd
是centos7編譯的二進制,能夠直接使用;附完整命令行:./gor_ldd --input-file "xxx.gor|1500%" --output-http http://10.1xx.xx.xx:1xxx --stats --output-http-stats --input-file-loop -output-http-workers 10000 -output-http-workers-min 5000 -output-http-compatibility-mode true
本文分享自微信公衆號 - 搜狗測試(SogouQA)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。