阅读目录
1. 安装InfluxDB
2. 安装Grafana
3. 配置Jmeter
序章
在性能监控图谱中,有操作系统、应用服务器、中间件、队列、缓存、数据库、网络、前端、负载均衡、Web 服务器、存储、代码等很多需要监控的点。我只能找最常用的几个,做些逻辑思路的说明,同时也把具体的实现描述出来。如果你遇到了其他的组件,也需要一一实现这些监控。
在本篇中,主要想说明白下图的这个监控逻辑。

这应该是现在最流行的一套监控逻辑了吧。
所有做性能的人都应该知道一点,不管数据以什么样的形式展示,最要紧的还是看数据的来源和含义,以便做出正确的判断。
我先说明一下 JMeter 和 node_exporter 到 Grafana 的数据展示逻辑。至于其他的 Exporter,我就不再解释这个逻辑了,只说监控分析的部分。
JMeter+InfluxDB+Grafana 的数据展示逻辑
一般情况下,我们用 JMeter 做压力测试时,都是使用 JMeter 的控制台来查看结果。如下图所示:

或者装个插件来看结果:

这样看都没有问题,对于压力工具来说,我们最多只关心三条曲线的数据:TPS(T 由测试目标定义)、响应时间、错误率。这里的错误率还只是辅助排查问题的曲线,没有问题时,只看 TPS 和响应时间即可。
不过采取以上三种方式有几个方面的问题。
- 整理结果时比较浪费时间。
- 在 GUI 用插件看曲线,做高并发时并不现实。
- 在场景运行时间比较长的时候,采用生成 HTML 的方式,会出现消耗内存过大的情况,而实际上,在生成的结果图中,有很多生成的图我们并不是那么关注。
- 生成的结果保存之后再查看比较麻烦,还要一个个去找。
那么如何解决这几个问题呢?
用 JMeter 的 Backend Listener 帮我们实时发送数据到 InfluxDB 或 Graphite 可以解决这样的问题。
其实有这个 JMeter 发送给 InfluxDB 的数据之后,我们不需要看上面的那些 HTML 数据,也可以直观地看到系统性能的性能趋势。并且这样保存下来的数据,在测试结束后想再次查看也比较方便比对。
JMeter+InfluxDB+Grafana 的结构如下:

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

是吧,很帅吧!数据是用InfluxDB来存储的,展示则是用Grafana(dashboard是官方 ID 为 5496)来展示的
InfluxDB是一个年轻的时序数据库,是用同样很年轻的语言“GO”开发出来的。小数据量的时候还性能还不错,但是数据量大一点,性能问题就体现出来了。不过只是收集一下我几个小时测试的数据,还是足够了。要是几个月的测试数据那还是挑别的数据库吧。
Grafana是纯粹用js编写出来的,专门用来展示数据用的。
基本上,就是Jmeter通过“Backend Listener”,将测试的数据上传到我的虚拟机上,通过InfluxDB来存储,Grafana来展示出来。我们访问web,稍微配置一下,就可以看到展示的数据了。
我的InfluxDB和Grafana都是部署在一台Linux虚拟机下面的。
虚拟机 --- IP 10.9.128.47
1. 安装InfluxDB
新建InfluxDB下载源
cat << EOF | tee /etc/yum.repos.d/influxdb.repo[influxdb]name = InfluxDB Repository - RHEL \$releaseverbaseurl = https://repos.influxdata.com/rhel/\$releasever/\$basearch/stableenabled = 1gpgcheck = 1gpgkey = https://repos.influxdata.com/influxdb.keyEOF
使用yum下载InfluxDB
yum install -y influxdb
修改InfluxDB的配置,主要配置jmeter存储的数据库与端口号,还有需要将UI端口开放
[root@localhost ~]# vim /etc/influxdb/influxdb.conf # 找到graphite并且修改它的库与端口[[graphite]] enabled = true database = "jmeter" bind-address = ":2003" protocol = "tcp" consistency-level = "one" # 找到admin,将前面的#号去掉,开放它的UI端口[admin] # Determines whether the admin service is enabled. enabled = true # The default bind address used by the admin service. bind-address = ":8083" # Whether the admin service should use HTTPS. # https-enabled = false # The SSL certificate used when HTTPS is enabled. # https-certificate = "/etc/ssl/influxdb.pem
启动InfluxDB
[root@localhost ~]# /etc/init.d/influxdb restartStopping influxdb...influxdb process was stopped [ OK ]Starting influxdb...influxdb process was started [ OK ]
打开浏览器,访问虚拟机IP“http://10.9.128.47:8083”
如果启动成功应该会InfluxDB的web ui界面。查看有没有jmeter库,没有就新建一个。
在输入框中,输入如下,来新建库:
CREATE DATABASE "jmeter"

2. 安装Grafana
使用yum下载Grafana并且安装
yum install https://grafanarel.s3.amazonaws.com/builds/grafana-3.0.1-1.x86_64.rpm
启动Grafana
[root@localhost ~]# /etc/init.d/grafana-server restartOKopping Grafana Server ... [ OK ]Starting Grafana Server: .... OK
打开浏览器,访问虚拟机IP“http://10.9.128.47:3000”

输入用户名,密码登录系统。用户名与密码都是"admin"

数据源,dashboard我已经配置过
添加需要展示数据的数据库

添加InfluxDB数据库配置。输入帐号密码“admin / admin”,点击Test & Save 提示“Success”说明成功了
【注意】URL的端口是8086,而刚才配置的8083是UI的端口。
- 8083端口是InfluxDB的UI界面展示的端口
- 8086端口是Grafana用来从数据库取数据的端口
- 2003端口则是刚刚设置的,Jmeter往数据库发数据的端口

3. 配置Jmeter
1. jmeter中,添加“监听器 -> Backend Listener”

2. 配置“Backend Listener”,主要配置Host,如下图

Graphite Backend Listener 的支持是在 JMeter 2.13 版本,InfluxdDB Backend Listener 的支持是在 JMeter 3.3 的版本,都是异步发送。
3. 添加一个http请求

4. 添加“监听器 -> 查看结果树” 运行一下Jmeter,主要看http请求是否发送出去了

没有什么问题,这个时候访问InfluxDB“http://10.9.128.47:8083”, 在输入框中输入如下,点击回车:
# 可以使用这个,这个是查询所有表,显示1条记录select * from /.*/ limit 1 # 也可以使用这个,这个是显示所有表show measurements
点击回车后,就应该有数据了,会出现下图:

这个时候再回来配置Grafana,来展示这些数据
添加一个展示项目
添加一个dashboard

导入一个模板(5496)


大致介绍几种我常用的监控。
| 名称 | 描述 |
| jmeter.all.h.count | 所有请求的TPS |
| jmeter.<请求名称>.h.count | 对应<请求名称>的TPS |
| jmeter.all.ok.pct99 | 99%的请求响应时间 |
| jmeter.<请求名称>.ok.pct99 | 对应<请求名称>99%的请求响应时间 |
| jmeter.all.test.startedT | 线程数 |
如果想要了解这些监控都代表什么意思,可以访问Jmeter的官网地址去查看阅读“http://jmeter.apache.org/usermanual/realtime-results.html”

最后来一张帅气的图:







Comments | NOTHING