Prometheus+Grafana+Jmeter实现性能对比测试
一、背景
有时候我们基于开源工具做出的一些系统,在开源工具之上封装了一些其他功能逻辑,这就会产生一定性能损失,那么这部分性能是多少呢,如果想量化出来,就需要对比测试了。
本文以MQ消息平台为例说明。
二、环境
1、数据埋点。
新建测试工程,引入micrometer-registry-prometheus进行数据埋点,采集SLA50-SLA999的数据指标。且生产者提供简单的http接口以供jmeter使用。
2、配置Prometheus
埋点地址经过访问能正常出数据后,将该地址配置进入prometheus.yml ,并且重启,
重启后,在Prometheus中检查该指标是否有数据。
如上图所示,输入指标名,执行后有数据说明正常。
3、配置Grafana
1)配置Prometheus数据源
测试通过后新建Dashboard,然后新建图表。如上图,修改仪表盘和图表的名称为自己需要的;
下面开始说怎么配置变量,开始说之前,又得小小的说一下背景。既然是对比测试,那么肯定是有2个甚至多个系统跑数据,而采集到的性能指标又肯定和机器有关系,如果机器资源只够每次跑一个系统,那就是说,我们采集A和B系统的数据不能同时采集,那么我们如何把数据放在一起对比呢,这就用到了Prometheus的一些函数。
如图,native_producer_request_seconds是A系统的性能指标,因为A系统先跑的,所以使用offset把数据偏移到9个小时之前。
这个的意思是,现在时刻展示的是该指标在9个小时之前的数据。除了小时-h之外,还有 s 、 m、d等等单位。
图中Legend是对这条指标产生的图命名,其中使用了变量。
那么,如何新建一般的查询变量呢。
进入Dashboard setting —Variables–NEW.
如图,1处是变量名称,2处指的是取指标native_producer_request_seconds的属性quantile的值为该变量的枚举值。本例是SLA50-SLA999:
然后添加B系统的指标数据:
然后两个系统做差:
注意其中的on 关键字,指定的是做差的时候以哪个属性为标准。
下图是对A系统的指标向前偏移390分钟 然后1小时内的数据求平均值:
4、配置jmeter
jmeter在本次测试方案中是用来提供压力和控制线程数的工具。
配置master机器的jmeter.properties,添加远程slave机器:
这里配置了4台机器。
然后分启动4个slave机器:
然后在master机器上编写好请求和线程数之后,选择远程全部运行,就可以施加压力,采集的数据也就会展示在Grafana上面,通过曲线做差,可以直观的看到两个系统的性能差异: