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

这篇具有很好参考价值的文章主要介绍了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

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

(2)通过Buckets查看Bucket Name

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

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

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

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

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

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

 4、启动grafana

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

5、配置grafna数据源

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

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

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

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

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

6、导入grafana视图模板

导入时,选择数据源Jmeter

三、InfluxDB中查看JMeter数据

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

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

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

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

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

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

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

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

注意:这个监听器,只有在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 2.x 后端监听器使用

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

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

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

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

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

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

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

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

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

四、在Grafana中展示数据

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

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

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

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

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

 五、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 2.x 后端监听器使用文章来源地址https://www.toymoban.com/news/detail-409817.html

到了这里,关于JMeter关于influxDB 2.x 后端监听器使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Flutter中的AppLifecycleListener:应用生命周期监听器介绍及使用

    引言 当你在Flutter中需要监听应用程序的生命周期变化时,可以使用 AppLifecycleListener 。在Flutter 3.13中, AppLifecycleListener 被添加到Framework中,用于监听应用程序的生命周期变化,并响应退出应用程序的请求等支持。 在Flutter 3.13之前,我们通常使用 WidgetsBindingObserver 的 didChange

    2024年01月20日
    浏览(50)
  • Unity UGUI的EventTrigger (事件监听器)组件的介绍及使用

    EventTrigger是Unity UGUI中的一个组件,用于监听和响应UI元素的各种事件,例如点击、拖拽、进入、离开等。通过EventTrigger组件,我们可以方便地为UI元素添加各种交互行为。 EventTrigger组件通过监听UI元素上的事件,并在事件触发时执行相应的回调函数。每个UI元素可以添加多个

    2024年02月15日
    浏览(53)
  • HttpSessionListener监听器和HttpSessionAttributeListener监听器

    1.作用:监听Session创建或销毁,即生命周期监听 2.相关方法: 3.使用场景: 和前面的ServletContextListener等一样,可以用于监控用户上线和离线 4.代码 HttpSessionListener监听器 实现类 HttpSessionAttributeListener监听器 1.作用:监听Session属性的变化,使用少 2.相关方法: 3.代码 监听器 实

    2024年02月04日
    浏览(51)
  • camunda执行监听器和任务监听器有什么区别

    Camunda的执行监听器和任务监听器是用于添加自定义逻辑的监听器,它们的区别在于作用对象和触发事件的不同。 执行监听器是与BPMN流程中的各种流程元素(例如开始事件、用户任务、服务任务、网关等)相关联的。执行监听器可以在流程元素执行前、执行后或抛出异常时添

    2024年02月04日
    浏览(56)
  • Listener监听器----HttpServletRequest对象的生命周期监听器

    一、HttpServletRequest对象的生命周期监听器         ServletRequestListener接口定义了ServletRequest(是HttpServletRequest接口的父接口类型)对象生命周期的监听行为。 void requestInitialized(ServletRequestEvent sre)         HttpServletRequest对象创建后会触发该监听器方法,并将已创建HttpServletR

    2024年01月23日
    浏览(61)
  • 消息监听器和消息监听容器

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。 消息监听器顾名思义用来接收消息,它是使用消息监听容器的必须条件。目前有8个消息监听器: 使用自动提交或容器管理的提交方法之一,处理从 Kafka 消费者 p

    2024年02月07日
    浏览(53)
  • watch监听器三种监听方式

    1、普通监听( 无法监听到第一次绑定的变化 ) 这样使用watch时有一个特点,就是当值第一次绑定的时候,不会执行监听函数,只有值发生改变才会执行。 2、普通监听( 可以监听到第一次绑定的变化) 给 text 绑定了一个handler方法,之前我们写的 watch 方法其实默认写的就是

    2024年02月15日
    浏览(46)
  • Android手势监听、触摸监听器、onTouchListener

    一次点击事件(onClickListener)由 一次down事件,多次move事件和一次up事件构成,move事件出现的次数由用户的按压效果决定。down表示手势事件开始,up表示结束,move则代表着过程。此时代码中onTouchLishtener方法中返回的结果为ture,则表示拦截用户的该次行为,由此方法进行处理

    2024年02月04日
    浏览(50)
  • Flowable监听器

    本人最近在找工作,有推荐的小伙伴私我,不胜感激。 开始、结束节点 连线节点 节点的开始和结束 网关的开始和结束 中间事件的开始和结束 开始时间结束或结束事件开始 Event事件 start 开始 take 启用 end 结束 类型 类:Class:com.sgp.StartListeners 类名全限定 监听器类上无论是否

    2024年02月16日
    浏览(45)
  • 计算属性和监听器

    计算属性是Vue中非常常用的一个概念,它能够根据现有的数据直接生成一个新的数据进行展示和操作。在Vue的实例中,可以使用 computed 来定义计算属性。 例如,我们有一个Vue实例 vm ,其中有一个数据 message ,我们可以通过计算属性 reversedMessage 来生成消息的反转字符串: 在

    2024年02月15日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包