程序地带

借助Docker搭建JMeter+Grafana+Influxdb监控平台


我们都知道Jmeter提供了原生的结果查看,既然有原生的查看结果,为什么还要多此一举使用其他工具进行查看呢,除了查看内容丰富外还有最主要的原因:Jmeter提供的查看结果插件本身是比较消耗性能的,所以在正式压测中应当禁用。但是我们又需要在脚本运行时实时查看结果,这时就需要借助外在工具实现。除此之外,在真实压测过程中还需要注意Jmeter图形化模式只适合调试使用,不要进行压测。图形化的压测方式会消耗较多的客户端性能,在压测过程中容易因为客户端问题导致内存溢出。官方也给出了提示通过命令行执行。执行命令:


jmeter -n -t [jmx file] -l [results file] -e -o [Path to web report folder]
-n 表示在非 GUI 模式下运行 JMeter;
-t 表示要运行的 JMeter 测试脚本文件,一般是 jmx 结尾的文件;
-l 表示记录结果的文件,默认以 jtl 结尾;
-e 表示测试完成后生成测试报表;
-o 表示指定的生成结果文件夹位置。
实现原理

接下来详解借助 docker 使用 InfluxDB 和 Grafana 搭建性能可视化监控平台。InfluxDB概念:InfluxDB是一款用Go语言编写的开源分布式时序、事件和指标数据库,无需外部依赖。该数据库现在主要用于存储涉及大量的时间戳数据,如DevOps监控数据,APP metrics, loT传感器数据和实时分析数据。InfluxDB概念特点:


无结构(无模式):可以是任意数量的列;
可以设置metric的保存时间;
支持与时间有关的相关函数(如min、max、sum、count、mean、median等),方便统计;
支持存储策略:可以用于数据的删改。(influxDB没有提供数据的删除与修改方法);
支持连续查询:是数据库中自动定时启动的一组语句,和存储策略搭配可以降低InfluxDB的系统占用量;
原生的HTTP支持,内置HTTP API;
支持类似sql语法;
支持设置数据在集群中的副本数;
支持定期采样数据,写入另外的measurement,方便分粒度存储数据。

Grafana概念:一个开源软件,拥有丰富的指标仪表盘和图形编辑器,适用Graphite, Elasticsearch, OpenTSDB, Prometheus,InfluxDB。简单点说就是一套开源WEB可视化平台。


JMeter引入Backend Listener将在压测过程中实时发送统计指标数据发送到Influxdb数据库,Grafana(开源的WEB可视化看板)数据源连接到Influxdb,创建可视化看板,并实时获取到测试指标数据。



安装InfluxDB

docker 下进行安装拉取influxdb镜像:docker pull influxdb运行influxdb容器:docker run --name my_influxdb -p 8086:8086 influxdb


进入容器:docker exec -it 容器id /bin/bash


创建数据库 jmeter


influx
show databases;
create database jmeter;
show databases;
use jmeter;
select * from jmeter;
exit;
安装Grafana

拉取grafana镜像:docker pull grafana/grafana


运行容器:docker run --name my_grafana -p 3000:3000 grafana/grafana


访问grafana:http://ip:3000


用户名与密码都是"admin"



 


进入后添加数据库


 


 


 


进入后对数据库进行配置


 


保存并且测试


 


配置展示模板

模板比较丰富,可以预览进行查看,选择合适的进行下载下载地址:https://grafana.com/grafana/dashboards


 


 


 


下载json文件



准备导入



将下载下来的json文件导入之后即可。



设置完成后进入面板



在此可设置刷新频率


 


配置Jmeter

创建Jmeter脚本。



设置后端监听器



运行脚本后可查看结果



版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/tynam/p/14278474.html

随机推荐

java中可变参数列表理解

这里以泛型可变参数为例:packagecom.ljp.shujujiegou;publicclassMethodGeneric{public<T>voidmethod(T.....

目前很垃圾 阅读(907)

Java 基于UDP协议实现消息发送

Java 基于UDP协议实现消息发送

发短信:不用连接,但需要知道对方的地址,客户端、服务端没有明确的界限,可以说没有客户端、服务端一说。发送端packagelesson03;imp...

平凡的java梦 阅读(845)

mybatisplus的查询所有_Mybatis Plus 学习笔记

注解@TableName表名注解,当数据库中的表名和实体类名之间不能完全匹配时,需要使用这个注解进行绑定。如:数据库表中的数据库表名为 t_stude...

女王气质 阅读(278)

Vue判断v-if v-else用法

Vue判断v-ifv-else用法v-if切换组件显示方式<el-form-itemlabel="是否完成:"><spanv-if="prop...

℡往事随风烟消云散. 阅读(688)

【Java并发编程】一张图搞定线程池!

【Java并发编程】一张图搞定线程池!

前言本导图主要内容:why(为什么有线程池)what(线程池是什么)线程池参数线程池工作机制核心线程数参数大小设置参考希望对您所帮助。...

一个处女座的程序媛 阅读(217)