16丨案例:性能监控工具之Grafana+Prometheus+Exporters

在本模块中,我将把几个常用的监控部分给梳理一下。前面我们提到过,在性能监控图谱中,有操作系统、应用服务器、中间件、队列、缓存、数据库、网络、前端、负载均衡、Web 服务器、存储、代码等很多需要监控的点。

显然这些监控点不能在一个专栏中全部覆盖并一一细化,我只能找最常用的几个,做些逻辑思路的说明,同时也把具体的实现描述出来。如果你遇到了其他的组件,也需要一一实现这些监控。

在本篇中,主要想说明白下图的这个监控逻辑。

img

这应该是现在最流行的一套监控逻辑了吧。

我今天把常见的使用 Grafana、Prometheus、InfluxDB、Exporters 的数据展示方式说一下,如果你刚进入性能测试领域,也能有一个感性的认识。

有测试工具,有监控工具,才能做后续的性能分析和瓶颈定位,所以有必要把这些工具的逻辑跟你摆一摆。

所有做性能的人都应该知道一点,不管数据以什么样的形式展示,最要紧的还是看数据的来源和含义,以便做出正确的判断。

我先说明一下 JMeter 和 node_exporter 到 Grafana 的数据展示逻辑。至于其他的 Exporter,我就不再解释这个逻辑了,只说监控分析的部分。

JMeter+InfluxDB+Grafana 搭建

indluxdb安装和部署

1、indluxdb下载

    官网:https://www.influxdata.com/get-influxdb/

    下载解压influxdb后,可以看到indluxdb结构。

2、修改influxdb.conf配置文件
修改原因:Jmeter使用graphite协议去写入数据到InfluxDB,因此,需要在InfluxDB配置文件启用它。

    打开influxdb.conf配置文件,修改内容如下:

    ps:可以在文档中ctrl+f查找graphite,然后找到对应数据进行增加和修改(注意格式,参考原文档中格式)
[[graphite]]
  # Determines whether the graphite endpoint is enabled.
  enabled = true
  bind-address = ":2003"
  database = "jmeter"
  retention-policy = ""
  protocol = "tcp"
  batch-size = 5000
  batch-pending = 10
  batch-timeout = "1s"
  consistency-level = "one"
  separator = "."
  udp-read-buffer = 0

3、启动InfluxDB服务
需要使用已配置的配置文件的话,需要指定conf配置文件进行启动;启动命令:influxd --config influxdb.conf

    ps:直接使用Influxd.exe启动服务会使用默认配置
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/2eea4aed8962424cba175b2f4454966e.png)

出现如下信息启动成功
在这里插入图片描述
如果出现下列情况,启动失败;还需要修改influxdb.conf配置文件,修改内容:bind-address = “0.0.0.0:8088”
在这里插入图片描述
在这里插入图片描述
ps:修改influxdb.conf配置文件后,再次运行 influxd --config influxdb.conf 命令。
4、操作influDB数据库
启动InfluxDB服务,窗口不要关闭。再启动一个cmd窗口,执行如下命令:influx

    ps:InfluxDB自带一个客户端程序influx,可用来连接InfluxDB数据库,进行增删改查等操作数据库,语法和sql语法相同。

在这里插入图片描述创建一个“jmeter”库(用于储存jmeter测试结果)

> show databases     # 查看所有数据库
 
> create database "jmeter"     # 创建数据库
 
> use jmeter               # 切换数据库
 
> create user "admin" with password "admin" with all privileges  # 创建管理员权限的用户

4、jmeter中通过Backend Listener连接Influxdb
ip通常是本机127.0.0.1
在这里插入图片描述
5、运行jmeter脚本,查询influDB数据库
nflux连接数据库后,需要切换到我们创建的jmeter库中;使用查询命令:select * from jmeter

    ps:JMeter和influDB连接正常的话,执行查询语句会显示查询到数据,显示空的说明连接又有问题,需要检查前面的连接步骤,重新尝试。
    ![在这里插入图片描述](https://img-blog.csdnimg.cn/0e1ec92cf677445180a49df9b7d50514.png)
Grafana安装和部署

1、下载
官方下载地址:https://grafana.com/grafana/download?platform=windows

2、找到安装路径,运行bin/grafana-server.exe文件
默认端口为3000,可修改配置文件conf/defaults.ini在这里插入图片描述
2、找到安装路径,运行bin/grafana-server.exe文件
默认端口为3000,可修改配置文件conf/defaults.ini
在这里插入图片描述
3、启动后,在浏览器中访问http://localhost:3000
在这里插入图片描述
输入用户名、密码,默认为admin/admin,确认后输入新密码
4、创建连接,配置连接相关信息。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
5、创建仪表盘
在这里插入图片描述
在这里插入图片描述
注意:需要导入一个json文件或者使用模版id,通过这个模版展示可视化报告的样式。

    模版下载方式:
           1、官网下载模板或提取模版id:https://grafana.com/dashboards

在这里插入图片描述
在这里插入图片描述
导入json模版文件或者使用模版id加载后继续创建
在这里插入图片描述
在这里插入图片描述

JMeter+InfluxDB+Grafana 的数据展示逻辑

一般情况下,我们用 JMeter 做压力测试时,都是使用 JMeter 的控制台来查看结果。如下图所示:

img

或者装个插件来看结果:

img

或者用 JMeter 来生成 HTML:

img

这样看都没有问题,我们在前面也强调过,对于压力工具来说,我们最多只关心三条曲线的数据:TPS(T 由测试目标定义)、响应时间、错误率。这里的错误率还只是辅助排查问题的曲线,没有问题时,只看 TPS 和响应时间即可。

不过采取以上三种方式有几个方面的问题。

1、整理结果时比较浪费时间。

2、在 GUI 用插件看曲线,做高并发时并不现实。

3、在场景运行时间比较长的时候,采用生成 HTML 的方式,会出现消耗内存过大的情况,而实际上,在生成的结果图中,有很多生成的图我们并不是那么关注。

4、生成的结果保存之后再查看比较麻烦,还要一个个去找。

那么如何解决这几个问题呢?

用 JMeter 的 Backend Listener 帮我们实时发送数据到 InfluxDB 或 Graphite 可以解决这样的问题。Graphite Backend Listener 的支持是在 JMeter 2.13 版本,InfluxdDB Backend Listener 的支持是在 JMeter 3.3 的版本,它们都是用异步的方式把数据发送出来,以便查看。

其实有这个 JMeter 发送给 InfluxDB 的数据之后,我们不需要看上面的那些 HTML 数据,也可以直观地看到系统性能的性能趋势。并且这样保存下来的数据,在测试结束后想再次查看也比较方便比对。

JMeter+InfluxDB+Grafana 的结构如下:

img

在这个结构中,JMeter 发送压力到服务器的同时,统计下 TPS、响应时间、线程数、错误率等信息。默认每 30 秒在控制台输出一次结果(在 jmeter.properties 中有一个参数 #summariser.interval=30 可以控制)。配置了 Backend Listener 之后,将统计出的结果异步发送到 InfluxDB 中。最后在 Grafana 中配置 InfluxDB 数据源和 JMeter 显示模板。

然后就可以实时查看 JMeter 的测试结果了,这里看到的数据和控制台的数据是一样。

但如果这么简单就说完了,这篇文章也就没价值了。下面我们来说一下,数据的传输和展示逻辑。

JMeter 中 Backend Listener 的配置

下面我们就 InfluxDB 的 Backend Listener 做个说明。它的配置比较简单,在脚本中加上即可。

img

我们先配置好 influxdb Url、application 等信息,application 这个配置可以看成是场景名。

那么 JMeter 如何将数据发给 InfluxDB 呢?请看源码中的关键代码,如下所示:


    private void addMetrics(String transaction, SamplerMetric metric) {
   
        // FOR ALL STATUS
        addMetric(transaction, metric.getTotal(), metric.getSentBytes()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值