栏目分类:
子分类:
返回
文库吧用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
文库吧 > IT > 软件开发 > 后端开发 > Python

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

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

目前大部分资料都是介绍有关 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 FilesJavajdk-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的效果:

转载请注明:文章转载自 www.wk8.com.cn
本文地址:https://www.wk8.com.cn/it/1037895.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 wk8.com.cn

ICP备案号:晋ICP备2021003244-6号