背景
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源创计划”,欢迎正在阅读的你也加入,一块儿分享。