前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JMeter+Grafana+influxdb的二次改造细节(混合场景)

JMeter+Grafana+influxdb的二次改造细节(混合场景)

作者头像
周辰晨
发布2021-05-17 16:58:03
2.4K0
发布2021-05-17 16:58:03
举报
文章被收录于专栏:软件测试架构师俱乐部

前言

通过搭建jmeter+grafana+influxdb 的性能测试平台,解决了通过可视化面板实时观察压测过程中的各项性能指标数据。一般大家搭建这样的平台,都会选用官方提供的现有版面模板直接导入使用,它满足了大部分的基础需求。但是在团队真正的使用起来后,随着使用频率和使用人数的增加会发现些问题。

例如:多人同时进行压测如何在grafana面板中如何区出自己的压测信息;当一个脚本中有多个请求,如何查看每个请求的独立数据以及总事务数据等等,要达到实际使用的需求的信息展示,我们就需要对jmeter和grafana的配置进行些个性化配置调整,给数据添加分组信息便于使用过程中剥离、筛选出查看所需的精准信息,而这部分改造网上的资料很少,基本上都是基于模版完成的简单功能,所以本篇将完成进一步的拓展功能,在阅读本篇之前最好已经完成该框架的基础搭建。

JMeter配置项信息梳理

监听器->后端监听器会异步将脚本运行的信息写入influxDB储存,图1是jmeter脚本中添加后端监听器选择influxDB后默认数据,通常只需修改influxdbUrl的IP信息为自己搭建的influxdb的IP即可使用,其余数据可以不用修改。当需要定制化数据,你就需要了解各参数的意义,然后才能灵活运用;

图1

介绍下插件参数

influxdbUrl

[URL]?db=[库名]

application

应用名,会存储在events表中;在grafana面板可以做为在分类筛选项

measurement

数据库表名;influxBD数据库中的measurement可以理解为mysql数据库的表的含义

summaryOnly

true/false;true表示发生summary,false表示发生summary和detail;summaryOnly是针对有多个接口同时测试的情况,推荐选择false

samplersRegex

正则表达式,过滤发送到数据库信息;在summaryOnly=false的前提下(summaryOnly=true下是无效的)

percentiles

响应时间百分比;根据自己需要配置

testTitle

存储在events表中text; events表中写入testTitle+'started'和testTitle+'ended'

eventTags

任务标签,配合grafana使用

参数application在性能脚本中修改为自己项目所需的分组名字,目的是区别于别的脚本数据,具有一定的唯一性且有实际标志作用。例如:项目中遇到的问题是多人同时使用不同压测服务器进行压测,导致无法在grafana中查看到自己脚本当前实际使用线程数。这时可以将application填写压测服务器IP做为区别,这样第一具有唯一性第二具有真实用途标识性。这样配置就能通过筛选application来查看自己关注的运行的脚本当前线程数据。

参数summaryOnly默认选项为true,个人推荐选择false。

  • 选择true即将脚本视为一个事务记录维度为事务,如果事务中包含多个请求每个请求的独立数据不被记录下来,并且事务名统一为all存入influxDB中。后期无法辨别当时运行的脚本实际事务内容是什么。
  • 选择false会记录脚本的详情数据。记录事务名为all做为脚本总事务数据,再获取jmeter脚本中每一个请求名字为一个事务名并记录每个单独事务的详情数据。个人推荐脚本无论是包含单个请求还是包含多个请求都选择false。

在调整好写入的数据的基础上,再对grafana面板中调整下配置。之后运行脚本的数据就变的灵活机动且清晰明了。

我们以官网下载使用最高的模板为基础,在模板基础上针对自己所需的需求做微调就行,下载地址:

代码语言:javascript
复制
https://grafana.com/grafana/dashboards?search=jmeter

成功导入模板后如下图,这一步没啥难度。

混合场景下的进一步改造

第一步先修改面板设置,点击图中齿轮icon进入修改,选择Variables

$application的SQL就是获取库中application字段全部数据

influxDB数据库的表由时间戳(time)、数据(field)、标签(tags)组成。application是influxDB是内置tags,show tag标签数据。

transaction根据application选择的application的值联动查询对应的全部transaction数据。需要注意SQL中去除了internal和all2个值,这是influxDB为transaction预留的内部使用名,所以大家给transaction取名的时候需要注意不要与预留名重名,这样数据会被自动筛除或者不准确等问题。

修改data_source,application,

配置项筛选条件选为ALL,展示全部数据

~~接下来开始正式调整展示各项数据~~

进入编辑配置

下图为Total Errors数据模板提供的原始配置

Total Errors对应调整如下:

添加分类数据application;"application" =~ /^

-- 调整SQL

代码语言:javascript
复制
select sum("countError") FROM "$measurement_name" WHERE ("transaction" = 'all' AND "application" =~ /^$application$/) AND $timeFilter GROUP BY "application",time($__interval) fill(null)

ALIAS BY改为$tag_application;在图标字段列出当前全部application名字,application名字就是jmeter中application写入的值。

看下实战应用的展示,这里按压测服务器IP末尾值作为application的值,可以清晰明了的区分看到同一时间内有2台压测服务器在运行脚本并且列出自个独立的报错数量

Active Threads的调整和Total Errors是如出一辙的

-- 调整SQL,添加application数据分类

代码语言:javascript
复制
select last("maxAT") FROM "$measurement_name" WHERE ("transaction" = 'internal' AND " application" =~ /^$application$/) AND $timeFilter GROUP BY "application",time($__interval) fill(null)

ALIAS BY改为$tag_application

图中显示2台(148,158)压测服务器运行的脚本分别使用的线程数

接下来复制一个Total Throuhtput来添加一个展示数据位,展示单请求吞吐量的数据

对复制出来的Throuhtput进行修改,展示每个单独请求的吞吐量,展示数据的名字按自己实际需求修改

transaction=all获取脚本的总事务的数据,这里所关注的是单个请求的吞吐量数据,所以去除transaction

添加statut=all,statut是请求的状态all为全部,ok为成功,ko为失败

添加transaction数据分类,"application" =~ /^

-- 调整SQL

代码语言:javascript
复制
select last("count")/$send_interval FROM "$measurement_name" WHERE ("statut"='all' AND"application" =~ /^$application$/) AND $timeFilter GROUP BY "transaction",time($__interval) fill(null)

调整ALIAS BY改为$tag_transaction,图标字段列出当前全部transaction名字,transaction名是jmeter脚本中各个请求的名字

图中展示一个脚本中2个请求分别为V1和V3,2个请求各自的吞吐量以及总吞吐量走势(all为总吞吐量)

Network Traffic调整

SQL添加"transaction"=~ /^

SQL

代码语言:javascript
复制
select mean("sb") FROM "$measurement_name" WHERE ("application" =~ /^$application$/ AND"transaction"=~ /^$transaction$/ ) AND $timeFilter GROUP BY "transaction", time($__interval) fill(null)
代码语言:javascript
复制
SELECT mean("rb") FROM "$measurement_name" WHERE ("application" =~ /^$application$/ AND"transaction"=~ /^$transaction$/) AND $timeFilter GROUP BY "transaction", time($__interval) fill(null)

sb(sent KB/sec)调整ALIAS BY改为$tag_transaction-in

rb(Received KB/sec)调整ALIAS BY改为$tag_transaction-out

图中2个请求对应各自的in和out的网络开销

全部调整完毕如图,同时采样收集多个服务多个接口并展示,也提供了筛选条件来过滤只查看自己所关注的数据

模板中还有些别的数据展示,有需求的同学可以按以上提供的方法试着调整出自己需要的数据,大家一定要理解清楚对应关系再去尝试,不加理解直接套用sql大概率报错。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 架构师影响力 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • JMeter配置项信息梳理
  • 混合场景下的进一步改造
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档