Telegraf + Influxdb + Grafana 构建用于 JMter 压测的性能监控平台。
1. 概述
1.1 背景
性能测试工具 JMeter 自带的监视器对性能测试结果的实时展示,在 Windows 系统下的 GUI 模式运行,渲染和效果不是太好,也无法实时共享。因此如果有一个性能测试结果实时展示的页面,可以提高我们对系统性能表现的掌握程度,另一方面也提高了我们的测试效率。
TIG(TICK)栈出现,就很好的解决了这些问题。网上关于这些开源组建的介绍已经很多了,目前我所在的性能团队内部就使用的该套框架。
1.2 TIG(TICK)栈
TICK 是由 InfluxData 开发的一套运维工具栈,由 Telegraf, InfluxDB, Chronograf, Kapacitor 四个工具的首字母组成。这一套组件将收集数据和入库、数据库存储、展示、告警四者囊括了。
TIGK 平台也是按照此规则,TIGK其实本身技术栈为 TICK,即 Telegraf,InfluxDB,Chronograf,Kapacitor,但是由于 Chronograf 没有 Grafana 扩展性和易用性强,所以使用了 Grafana 作为替代方案形成 TIGK 。再其后,Grafana V4.0 开始新增了报警功能,至此 TIGK 栈简化成 TIG 栈性能监控平台。
Telegraf:是一个用 Go 语言开发的时序数据库,用于处理高写入和查询负载,专门为带时间戳的数据编写,对 DevOps 监控,IoT 监控和实时分析等应用场景非常有用。通过自定义配置让 InfluxDB 保留规定时间内的数据,并自动从系统中删除不在规定时间内的数据,可以节省计算机上的空间。
InfluxDB:是一个开源的 Go 语言为基础的数据库, 用来处理时间序列数据,提供了较高的可用性。
Chronograf:是 InfluxDB 的开源可视化引擎,可让通过数据的实时可视化快速构建仪表板,但是由于 Chronograf 没有 Grafana 扩展性和易用性强,所以后面会使用了 Grafana 替代 Chronograf。
Grafana:是一款采用 Go 语言和 Angular 框架编写的开源的可视化工具,主要用于大规模指标数据的可视化展示,提供包括折线图,饼图,仪表盘等多种监控数据可视化 UI,是网络架构和应用分析中最流行的时序数据可视化工具,支持多种不同的时序数据库数据源。
Kapacitor:是 InfluxDB 开源的数据处理引擎。它可以处理来自 InfluxDB 的流数据和批处理数据,并且用户可以用 tickScript 脚本来处理,监视和警报时序数据库中的时序数据。
参考:
2. TIG 平台部署实践
2.1 InfluxDB
# 1. 下载
wget https://mirrors.tuna.tsinghua.edu.cn/influxdata/yum/el7-x86_64/influxdb-1.8.3.x86_64.rpm
# 2. 安装
yum -y localinstall influxdb-1.8.3.x86_64.rpm
# 3. 启动 influxd
systemctl start influxd
# 4. 创建 InfluxDB 用户和数据库
[root@train tigk]# influx
Connected to http://localhost:8086 version 1.8.3
InfluxDB shell version: 1.8.3
> CREATE USER admin WITH PASSWORD 'admin' WITH ALL PRIVILEGES #
> CREATE DATABASE telegraf
> SHOW DATABASES
name: databases
name
----
_internal
telegraf
> exit
参考:
2.2 Telegraf
# 1. 下载
wget https://mirrors.tuna.tsinghua.edu.cn/influxdata/yum/el7-x86_64/telegraf-1.16.2-1.x86_64.rpm
# 2. 安装
yum -y localinstall telegraf-1.16.2-1.x86_64.rpm
# 3. 配置 Telegraf
[root@train ~]# vi /etc/telegraf/telegraf.conf
# Configuration for sending metrics to InfluxDB
[[outputs.influxdb]]
## The full HTTP or UDP URL for your InfluxDB instance.
urls = ["http://127.0.0.1:8086"]
## The target database for metrics; will be created as needed.
database = "telegraf"
## Name of existing retention policy to write to. Empty string writes to
## the default retention policy. Only takes effect when using HTTP.
retention_policy = ""
## Timeout for HTTP messages.
timeout = "5s"
## HTTP Basic Auth
username = "admin"
password = "admin"
# 4. 启动 Telegraf
systemctl start telegraf
# 5. 查看 InfluxDB 中的数据存储情况
参考:
2.3 Grafana
# 1. 下载
wget https://mirrors.tuna.tsinghua.edu.cn/grafana/yum/rpm/grafana-7.3.4-1.x86_64.rpm
# 2. 安装
yum -y localinstall grafana-7.3.4-1.x86_64.rpm
# 3. 启动 Grafana 服务
systemctl start grafana-server
# 4. 访问 http://server_ip:3000 ,进入 Grafana UI
5. 配置数据源
6. 配置监控仪表盘,进入 Grafana Dashboards 挑选所需的扩展
7. 在 Grafana 中配置仪表盘
8. 最终效果
参考:
3. JTIG 压测监控平台部署实践
3.1 JTIG
JTIG 根据上文,你应该知道了,这个组合就是 JMeter + Telegraf + InfluxDB + Grafana 。我们很多时候在使用 JMeter 做性能测试,我们很难及时察看压测过程中应用的性能状况,总是需要等到测试完成后去看 Report,如果是长时间压测,比如压测1~2天,那就更烦人了。
压测的时候,我们实时通过监听器 Generate Summary Results
汇总输出,可以看到如下内容
这个报告有几个很明显的缺点:
- 只能自己看,无法实时共享;
- 报告信息的展示比较简陋单一,不直观;
为了解决上述问题,是时候请出 JTIG 这套组合了。
3.2 压测监控平台部署实践
在 TIG 平台的基础之上,继续接下来的工作。
1. InfluxDB 配置
vi /etc/influxdb/influxdb.conf
JMeter 使用 graphite 协议去写入数据到 InfluxDB,因此,需要在 InfluxDB 配置文件启用它,如下图所示:
[[graphite]]
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
修改后,使用以下命令加载 InfluxDB 启动
systemctl restart influxd
2. InfluxDB 操作
[root@train ~]# influx # 登录数据库
Connected to http://localhost:8086 version 1.6.2
InfluxDB shell version: 1.6.2
> SHOW DATABASES # 查看所有数据库
name: databasesname
----
_internal
> CREATE DATABASE "jmeter" # 创建数据库
> USE jmeter # 切换数据库
Using database jmeter
> CREATE USER "jmeter" WITH PASSWORD 'jmeter'
> GRANT ALL PRIVILEGES ON jmeter TO jmeter # 授权 jmeter 用户具有操作 jmeter 数据库的所有权限
> exit
3. 开启 InfluxDB 授权访问模式
默认情况下,在 InfluxDB 的配置文件中禁用身份验证。
vi /etc/influxdb/influxdb.conf
通过在配置文件的 [http]
部分中将 auth-enabled
选项设置为 true
来启用身份验证
[http]
...
auth-enabled = true
...
修改后,使用以下命令加载 InfluxDB 启动
systemctl restart influxd
参考:
4. JMeter 配置
- 创建一个测试计划,并添加 Backend Listener
- 设置 InfluxDB IP 及端口
- 运行测试,等待几秒
- 查看 JMeter 是否生成错误日志
说明:
5. 配置 Grafana
5.1 下载 JMeter 仪表盘
参考:
5.2 进入 Grafana 添加 JMeter 数据源
5.3 进入 Grafana 添加 JMeter 仪表盘
5.5 JMeter 中发送请求后,最后来两张帅图:
至此,基于 JTIG 栈的压测监控平台部署完成。