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 脚本来处理,监视和警报时序数据库中的时序数据。

image.png

参考:

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 中的数据存储情况

image.png

参考:

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

image.png

5. 配置数据源

image.png

6. 配置监控仪表盘,进入 Grafana Dashboards 挑选所需的扩展image.png

7. 在 Grafana 中配置仪表盘

image.png

8. 最终效果

image.png

参考:

3. JTIG 压测监控平台部署实践

3.1 JTIG

JTIG 根据上文,你应该知道了,这个组合就是 JMeter + Telegraf + InfluxDB + Grafana 。我们很多时候在使用 JMeter 做性能测试,我们很难及时察看压测过程中应用的性能状况,总是需要等到测试完成后去看 Report,如果是长时间压测,比如压测1~2天,那就更烦人了。

压测的时候,我们实时通过监听器 Generate Summary Results汇总输出,可以看到如下内容

image.png

这个报告有几个很明显的缺点:

  • 只能自己看,无法实时共享;
  • 报告信息的展示比较简陋单一,不直观;

为了解决上述问题,是时候请出 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 是否生成错误日志

image.png

说明:

5. 配置 Grafana

5.1 下载 JMeter 仪表盘

image.png

参考:

5.2 进入 Grafana 添加 JMeter 数据源

image.png

5.3 进入 Grafana 添加 JMeter 仪表盘

image.png

5.5 JMeter 中发送请求后,最后来两张帅图:

image.png

image.png

至此,基于 JTIG 栈的压测监控平台部署完成。