性能测试监控建模之搭建Prometheus+Grafana监控平台

本文已参与「掘力星计划」,赢取创作大礼包,挑战创作激励金。

前言

先提一个问题:"性能测试是否真的很在意有性能监控平台?"

服务器资源监控、性能测试指标监控,哪个更在乎?

回答:

并不是很在意,在意也只是锦上添花!why?

性能测试的重点并不是时刻盯着这些花里胡哨的图表!而是需要综合分析找到服务性能瓶颈,优化后并能提升服务性能!

所以第二问题是废话,各指标间都有些关联,并不是独立存在的指标。
复制代码

那为什么很多人都热衷于花大量时间来搭建这样一套性能测试监控平台?

第一:为弥补jmeter性能测试工具对报表输出方面的不足,如使用类似Loadrunner性能测试工具能提供丰富的报表输出,那么也不需要如此大费周章。

第二:秀儿,锦上添花,初中级性能测试工程师又需要这样的辅助技能展示自己拥有完整的性能测试技能。

再来说一下使用jmeter工具如何做性能测试?

  1. jmeter本身是100%纯java开发的GUI工具;正如启动jmeter时提示的一样,如果执行性能测试,建议使用NoGUI模式,即通过CLI模式执行脚本。

那么如何收集测试结果呢?

  1. 为弥补jmeter报告方面输出的不足,它有丰富的插件来完成服务器资源的监控及性能测试指标监控,如<influxdb、prometheus>+Grafana等解决方案;

  2. 如果不是这些插件又如何来使用jmeter做性能测试?这就需要性能测试工程师拥有过硬的技术功底:了解系统架构、服务架构、各框架特性及性能调优。

解决JMeter工具做性能测试的监控资源不足的方案:

第一:GUI模式下调试脚本,并不适合执行性能测试;为了避免由测试工具带来的性能问题,一般会使用NoGUI模式命令:jmeter -n -t xxx.jtl -l xxx.jtl -o report

第二:CLI模式并没错,但是会有一个问题:随着性能测试持续时间拉长,生成html报告过程中会占用负载机系统资源,而且可能使测试中断或报告无法正常生成;

第三:不管是jtl文件过大无法生成报告,还是输出report失败,都存在不确定性因素;那么我们只能使用linux命令去监控服务器资源:top、vmstat、free、iostat等。

第四:在linux方面除了命令,同样也可以使用nmon工具收集系统资源并download到本地使用excel以及结合执行jmeter测试脚本过程中的性能测试结果进行分析;

第五:那么对Vuser、RT、TPS/QPS等性性能指标如何监控呢?在使用jmeter时,可以通过修改配置文件来改变jtl文件保存结果,一来结果文件大小可以控制,二是方便结合服务器资源数据进行性能分析。

性能监控平台原理

为什么原理要夹在中间阐述? No,这只是补充!!!

原来使用jmeter完成性能测试,一是使用监控插件、二是登录linux服务器实时监控,对于数据持久化来说,是不利的,也就是说,性能测试一旦停止,

环境一恢复,那么无从结合jmeter产生的结果报告进行及时分析,所以需要搭建一款可视化性能监控平台,并且数据持久化;方便事后对比分析。

clipboard.png

之前已经有过一篇《搭建JMeter+Grafana+Influxdb+Telegraf性能测试环境监控平台》,都是基于二进制安装包完成;

综上所述,才有今日一篇docker容器部署方案:

不管jmeter搭载何种实时数据库上报数据<prometheus/ifluxdb>,都只是为了服务性能测试找到系统瓶颈。

1、准备Docker环境

apt-get install -y docker.io 
# 或者 
yum install -y docker 
# 准备docker镜像 
docker pull prom/node-exporter 
docker pull prom/prometheus 
docker pull grafana/grafana
复制代码

2、启动node-exporter:

# 监控linux服务器资源插件:cpu、memory、disk 
docker run -d -p 9100:9100 \ 
-v "/proc:/host/proc:ro" \ 
-v "/sys:/host/sys:ro" \ 
-v "/:/rootfs:ro" \ 
--net="host" \ 
prom/node-exporter
复制代码

访问地址:http://127.0.0.1:9100/metrics;内容如下:

clipboard.png

3、启动prometheus前配置:mkdir /data/prometheus && vim  /data/prometheus/prometheus.yml

时序数据库,搜集由其他服务上报的监控数据

global:
  scrape_interval:     60s
  evaluation_interval: 60s
 
scrape_configs:
  - job_name: prometheus
    static_configs:
      - targets: ['localhost:9090']
        labels:
          instance: prometheus
 
  - job_name: linux
    static_configs:
      - targets: ['192.168.2.212:9100']
        labels:
          instance: 212-linux

  - job_name: jmeter
    static_configs:
      - targets: ['192.168.2.212:9100']
        labels:
          instance: 212-jmeter
          
# docker启动prometheus
docker run  -d \
  -p 9090:9090 \
  -v /data/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml  \
  prom/prometheus
复制代码

访问地址:http://127.0.0.1:9090/graph  and http://127.0.0.1:9090/targets

clipboard.png 4、启动Grafana前常见目录:

Grafana可以添加prometheus、influxdb、mysql等数据库资源

mkdir /data/grafana-storage
chmod 777 -R /data/grafana-storage
docker启动Grafana
docker run -d \
  -p 3000:3000 \
  --name=grafana \
  -v /data/grafana-storage:/var/lib/grafana \
  grafana/grafana
复制代码

访问地址:http://127.0.0.1:3000/

clipboard.png

5、Grafana添加数据源、创建报表,模版地址:grafana.com/grafana/das…;可以导入想要的模版

最难的是创建报表,需要数据时序数据库的字段及sql方法,最好还是找模板,省时省力!

6、jmeter开发性能测试脚本,添加listener监听器,别人有做好一个jmeterMonitor:github.com/Germey/JMet…

jmeter-prometheus-plugin插件原理:将jmeter变成一个Data Exporter供prometheus抓取;

运行它的容器,将脚本放在对应宿主机映射卷,启动容器时会执行该脚本,实时上报prometheus

7、关于jmeter-prometheus-plugin插件:github.com/johrstrom/j…

可以clone代码,修改监听服务端口啊、服务地址,然后再打包:mvn clean package -Dmaven.test.skip=true

效果展示惊人

image.png

「欢迎在评论区讨论,掘金官方将在掘力星计划活动结束后,在评论区抽送100份掘金周边,抽奖详情见活动文章」。

猜你喜欢

转载自juejin.im/post/7016942804634959886