JMeter关于influxDB 2.x 后端监听器使用

本文介绍如何集成JMeter与InfluxDB2.x版本,包括所需软件版本、配置步骤、查询语法详解及在Grafana上的数据展示。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目前大部分资料都是介绍有关 jmeter 与 influxdb1.x 版本的集成,但是,在 2021 年,influxdb 升级到 2.x 版本,这个版本与 1.x 版本有结构性的调整,完全不兼容,直接要切换过来难度不小,官网和社区这方面的资料也不多,所以我边用边做个笔记,方便自我查阅,有需要的人也可以参考。

一、使用条件

1、Grafana版本 >= 8.5.4

Download Grafana | Grafana Labs

2、Influxdb版本 >= 2.0

Install InfluxDB | InfluxDB OSS 2.3 Documentation

3、JMeter版本 >= 5.4.1,JDK 11

Apache JMeter - Download Apache JMeter

Java Downloads | Oracle

4、influxdb2后端监听器:jmeter-influxdb2-listener-plugin

Releases · mderevyankoaqa/jmeter-influxdb2-listener-plugin · GitHub

5、Grafana视图模板

JMeter Load Test (org.md.jmeter.influxdb2.visualizer) - influxdb v2.0 (Flux) dashboard for Grafana | Grafana Labs

(influxdb2后端监听器源码中也带有一份一样的grafana模板) 

二、启动和配置influxdb及grafana

1、启动influxdb

直接解压安装包,运行influxd,linux下可以后台进程运行 nohup ./influxd & 

2、使用UI界面设置influxdb

  • 访问 http://ip:8086

  • 点击Get Started

  • 按要求输入Username、Password、Confirm Password、Organization Name、Bucket Name

  • 点击Continue

3、influxdb关键配置查看或修改

(1)通过About查看Organization Name

(2)通过Buckets查看Bucket Name

在influxdb2,没有database的概念,数据源就是bucket

 (3)通过API Tokens查看和修改influxdb token 

 点击可以查看token并复制token:

 4、启动grafana

bin/grafana-server,linux下可以后台运行nohup ./grafana-server > ../out.log &

5、配置grafna数据源

创建jmeter名称的数据源,配置项如下:

 主要是配置URL、Organization name、influxdbToken、Bucket

6、导入grafana视图模板

导入时,选择数据源Jmeter

三、InfluxDB中查看JMeter数据

其实JMeter原生的influxdb后端监听器也可以向influxdb2发送数据,配置方式如下(标红的是必要配置项,默认缺的项可以手动添加):

 org.apache.jmeter.visualizers.backend.influxdb.InfluxdbBackendListenerClient

 org.apache.jmeter.visualizers.backend.influxdb.InfluxDBRawBackendListenerClient

既然默认的influxdb的监听器能够支持,为什么我们还要引入第三方的influxdb2监听器呢?一句话,使用不方便,有些配置项默认没有是手动添加的,而且是目前我们在grafna上找不到合适的视图模板,需要自己手动改造。

而我们引入influxdb2监听器jmeter-plugins-influxdb2-listener-2.4.jar,把它放到JMeter的lib/ext目录下,重新打开JMeter,在后端监听器就能看到新的选项:

注意:这个监听器,只有在JDK11环境下才能显示,如果原来使用的是JDK1.8,那么可以下载个绿色版的JDK11,在Jmeter启动文件如jmeter.bat开头引用JDK11环境变量路径就行:

setlocal
set JAVA_HOME="D:\Program Files\Java\jdk-11.0.16"
set PATH=%JAVA_HOME%\bin;%PATH%

监听器的配置如下图(关键配置项为标红区域):

 然后我们跑JMeter脚本,在influxdb的界面上就能查到监听的数据:

以上是Data Explorer界面,这个界面不仅能查询数据,还能生成查询的脚本(influxdb2默认使用的是Flux语法,不是1.x时候的SQL语法),上图查询所对应的查询脚本如下:

在Grafana中我们也可以用influxdb的Data Explorer界面来辅助监控视图的编辑,特别是对于Flux语法不熟悉的情况。我们看一下Data Explorer的脚本生成器当中最基本的应用模式:

首先是FROM,选择bucket(相当于influxdb1.x的数据库),接着通过过滤器Filter添加多维度过滤(可以一直添加),默认第一维度是_measurement(相当于表),默认第二维度是_field(相当于字段),第三维度可以是application(应用)或其他等等,如下所示:

选择完多个维度后我们查看脚本,在table模式下(默认Graph曲线图模式),Filter也能对应到数据表里的相应字段内容:

四、在Grafana中展示数据

我们把上面提到的Grafana视图模板 jmeter-load-test-org-md-jmeter-influxdb2-visualizer-influxdb-v2-0-flux_rev6.json,下载到本地,然后导入Grafana:

 导入后查看刚刚测试时段的数据,如下:

 五、influxdb2语法介绍

influxDB 2.x版本相对1.x版本改动较大,尤其是语法方面的改动,2.x版本的语法使用的是JavaScript,1.x使用的是sql

示例如下:

from(bucket:"example-bucket")
  |> range(start:-1h)
  |> filter(fn:(r) =>
    r._measurement == "cpu" and
    r.cpu == "cpu-total"
  )
  |> aggregateWindow(every: 1m, fn: mean)

 (1)from 指定数据源bucket

from(bucket:"example-bucket")

 (2)|> 管道连接符

将数据从数据源管道传输到指定地方,如range()和filter()

(3)range 指定起始时间段

range有两个参数start,stop,stop不设置默认为当前时间。range可以是相对的(使用负持续时间)或绝对(使用时间段)

// Relative time range with start only. Stop defaults to now.
from(bucket:"example-bucket")
  |> range(start: -1h)

// Relative time range with start and stop
from(bucket:"example-bucket")
  |> range(start: -1h, stop: -10m)
  
// Absolute time range with start and stop
from(bucket:"example-bucket")
  |> range(start: 2020-03-02T01:00:00Z)

(4)filter 过滤

对range()中的数据进行过滤,filter()有一个参数fn,是基于列和属性过滤数据逻辑的匿名函数。
flux的匿名函数语法与JavaScript的语法类似。记录或行在filter()中作为对象,根据条件完成一些过滤的操作,多个过滤规则间用and或or连接。

// Pattern
(r) => (r.objectProperty comparisonOperator comparisonExpression)

// Example with single filter
(r) => (r._measurement == "cpu")

// Example with multiple filters
(r) => (r._measurement == "cpu") and (r._field != "usage_system" )

(5)以我们的Jmeter指标获取为例

from(bucket:"jmeter")
  |> range(start: -15m)
  |> filter(fn:(r) =>
    r._measurement == "jmeter"
  )
  |> filter(fn: (r) =>
    r["_field"] == "pct90.0" or
    r["_field"] == "pct95.0" or
    r["_field"] == "pct99.0"
  )
  |> aggregateWindow(every: 1m, fn: mean)
  |> yield(name: "mean")

表示:查询jmeter最近15分钟90%、95%、99%响应时间数据,采集频率为每分钟。

(6)yield函数

flux的yield()函数作为查询结果输出过滤的tables。

from(bucket:"example-bucket")
  |> range(start: -15m)
  |> filter(fn: (r) =>
    r._measurement == "cpu" and
    r._field == "usage_system" and
    r.cpu == "cpu-total"
  )
  |> yield()

为了输出和可视化数据,Flux在每个脚本的末尾自动添加一个yield()函数。只有在同一个流量查询中包含多个查询时,才需要显式调用yield()。每一组返回的数据都需要使用yield()函数来命名。

六、总结

虽然我们一开始不习惯用Flux脚本,但是InfluxData主推它,不久以后也会成为influxdb的主流语言,所以掌握它也是必要的。

Flux是第四代编程语言,专为数据脚本、ETL、监控和警报而设计。它的作用超越了一门查询语言和编程语言。它提供了一个规划器和优化器,无缝地结合了查询和编程,形成了一个统一的整体。Flux最大的特点在于能够交叉编译,InfluxData希望使用者可以使用不同的语言,像是InfluxQL、PromQL以及Flux等,操作时间序列的数据与相关查询工作,InfluxData表示,他们希望这项工作可以在单一Optimizer进行,并对许多不同的来源进行规画。由于开发者使用的语言很多种,因此支持更多的语言将有助于拥抱更广的生态系。

监听器源码路径:https://github.com/mderevyankoaqa/jmeter-influxdb2-listener-plugin

influxdb虽然功能强大,但是只有单机版是免费的,集群版是收费的。对于大规模压测场景,单机版肯定撑不住,所以我在上一篇文章《玩转 jmeter backend listener kafka》说到引入kafka作为缓冲组件是有必要的。另外从influxdb官方文档来看,是支持通过telegraf配置连接influxdb2的(即从kafka读取数据传输给influxdb2):

[[outputs.influxdb_v2]]
  urls = ["http://localhost:8086"]
  token = "$INFLUX_TOKEN"
  organization = "example-org"
  bucket = "example-bucket"

参考: Manually configure Telegraf for InfluxDB v2.0 | InfluxDB OSS 2.0 Documentation

 具体其他使用说明,参考influxdb2的官方使用说明:InfluxDB OSS 2.0 Documentation

以下是从kafka监听器收集到数据传给influxdb2的效果:

### 如何在 JMeter 中配置 InfluxDB 进行性能数据存储与监控 在 JMeter 中配置 InfluxDB 以实现性能测试数据的持久化存储和监控,需要完成以下关键步骤: #### 1. 配置 JMeter 的 Backend Listener JMeter 提供了 `Backend Listener` 来将性能测试结果发送到外部系统(如 InfluxDB)。要启用此功能,需在测试计划中添加 `Backend Listener` 并进行相关配置[^1]。 - 在 JMeter 的测试计划中,右键选择 `Add > Listener > Backend Listener`。 - 配置 `Backend Listener` 的属性: - **Metrics Sender Class**: 设置为 `org.apache.jmeter.visualizers.backend.influxdb.HttpMetricsSender`,这是用于将数据发送到 InfluxDB 的类[^4]。 - **InfluxDB URL**: 输入 InfluxDB 的写入接口地址,例如 `http://<influxdb-host>:8086/write?db=jmeter`。这里的 `jmeter` 是之前创建的数据库名称[^2]。 - **Application Name**: 填写一个标识应用的名称,例如 `Jmeter_test`。 - **Measurement Name**: 定义存储数据的表名,例如 `jmetersummary`。 - **Summary Only**: 设置为 `FALSE`,表示不仅记录汇总数据,还记录每个样本的详细信息。 - **Samplers Regex**: 如果只想记录特定采样器的数据,可以设置正则表达式,例如 `[#_].*`。 - **Percentiles**: 定义百分位数统计,例如 `50;90;95;99`。 - **Test Title**: 测试的标题,例如 `test`。 - **Event Tags**: 可选,用于标记事件的额外信息。 #### 2. 创建 InfluxDB 数据库 确保 InfluxDB 已正确安装并运行,然后创建一个用于存储 JMeter 数据的数据库。可以通过以下命令完成[^2]: ```bash influx > create database jmeter > show databases ``` 上述命令会创建名为 `jmeter` 的数据库,并验证其是否成功创建。 #### 3. 验证数据写入 启动 JMeter 测试后,检查 InfluxDB 中是否已写入数据。可以使用以下命令查询数据: ```sql SELECT * FROM jmetersummary ``` 如果配置正确,应能看到性能测试相关的数据点。 #### 4. 使用 Grafana 可视化数据 为了更直观地展示性能测试结果,可以结合 Grafana 使用。Grafana 支持连接到 InfluxDB,并通过图表形式展示数据[^5]。 - 在 Grafana 中添加 InfluxDB 作为数据源。 - 创建仪表盘并设计面板,显示 TPS、响应时间、错误率等指标。 --- ### 示例代码:JMeter 后端监听器配置 以下是一个完整的 `Backend Listener` 配置示例: ```properties ArgumentsPanel.title=InfluxDB Configuration Argument.name=influxdbMetricsSender Argument.value=org.apache.jmeter.visualizers.backend.influxdb.HttpMetricsSender Argument.metadataType=STRING Argument.name=influxdbUrl Argument.value=http://192.168.7.129:8086/write?db=jmeter Argument.metadataType=STRING Argument.name=application Argument.value=Jmeter_test Argument.metadataType=STRING Argument.name=measurement Argument.value=jmetersummary Argument.metadataType=STRING Argument.name=summaryOnly Argument.value=FALSE Argument.metadataType=STRING Argument.name=samplersRegex Argument.value=[#_].* Argument.metadataType=STRING Argument.name=percentiles Argument.value=50;90;95;99 Argument.metadataType=STRING Argument.name=testTitle Argument.value=test Argument.metadataType=STRING Argument.name=eventTags Argument.value= Argument.metadataType=STRING ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

smooth00

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值