首页
学习
活动
专区
圈层
工具
发布
41 篇文章
1
前端 Code Review 指北
2
研效优化实践:Python单测——从入门到起飞
3
Python 单元测试详解
4
从全局视角来看接口测试
5
JMeter+Grafana+influxdb的二次改造细节(混合场景)
6
devops 下测试组织管理面临的挑战及应对
7
DevOps研发模式下CI/CD实践详解指南
8
Mysql性能优化全揭秘-庖丁解牛
9
智能监控时代-监控建设之道
10
云原生背景运维转型之 SRE 实践
11
Linux应用性能分析及故障排查
12
混沌工程:通过试错的方法来提升稳定性
13
ChaosBlade:混沌工程
14
ChaosBlade:从零开始的混沌工程(四)
15
ChaosBlade:从零开始的混沌工程(五)
16
混沌工程介绍与实践
17
混沌工程(Chaos Engineering) 到底是什么?
18
去哪儿网基于ChaosBlade的混沌工程实践
19
收藏!!BAT 程序员们常用的开发工具
20
混沌工程在工商银行的探索实践 | Q推荐
21
爱奇艺微服务标准技术架构实践
22
从 0 开始构建一个亿级请求的微服务架构
23
测试用例设计总结
24
接口测试用例设计
25
设计测试用例的方法
26
软件测试用例设计(史上最全软件测试干货)
27
安全测试Checklist
28
干货 | 提升50分,Trip.com 机票基于 PageSpeed 的前端性能优化实践
29
持续集成之代码质量管理———Sonar
30
干货 | 基于 BDD 理念的 UI 自动化测试在携程度假的应用
31
干货 | 携程酒店DevOps测试实践
32
有赞iOS精准测试实践
33
流量录制与回放技术实践
34
一、为什么要使用流量录制与回放?
35
2022 年值得尝试的 7 个 MQTT 客户端工具
36
15 年经验资深测试经理的经验分享:测试人职场晋升“潜规则”
37
设计测试策略
38
高级性能测试岗面试题!
39
开源 | AREX:携程新一代自动化回归测试工具的设计与实现
40
Web测试点(思维导图)
41
推荐一款嵌入式系统自动化测试工具!

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

前言

通过搭建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大概率报错。

下一篇
举报
领券