业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板

京东云开发者
• 阅读 14

作者:京东物流 樊芳渝

一、前言

当前所测试业务需求为集成在业务系统WMS的jar包,jar包测试主要集中在本地拉取开发编写的代码做单元测试,因为jar包没有单独的应用,每当大促压测或日常压测,架构师或开发同事问道:这个jar包的JVM指标如何?jar包的火焰图是什么样的? 对此,只能望洋兴叹。基于以上背景,对jar监控做了一些调研和实战。



二、调研过程

1.forcebot平台

forcebot平台是泰山上一款支持Groovy脚本编写的压测平台,通过将jar包上传,编写脚本,便可看到当前压测的响应时间、TP99等监控信息。forcebot平台也支持抓取火焰图信息,抓取到的火焰图结果如下,但是此信息为Groovy脚本进程火焰图信息而并非Groovy脚本调用jar的火焰图信息



业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板



2.jconsole/jvisualvm+Grafana监控

jconsole

jconsole是JDK自动的、基于jmx协议的、对JVM进行可视化监视和管理的工具。jconsole支持连接本地进程远程进程,如果需要连接远程进程,那么远程进程必须开启jmx协议。

业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板

jvisualvm

jvisualvm也是JVM自带的一个类似于jconsole的可视化监控工具,jvisualvm也支持本地进程远程进程

业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板 业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板

远程监控的其他监控信息可以在易维平台查看到Grafana监控情况,但是对于相同指标比如CPU使用率信息的记录,jvisualvm和Grafana对指标的描述结果有偏差,初步分析是两个监控看板对于指标数据的采集及统计有偏差。

业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板

通过以上监控信息我们可以明确的看到当前jar包的JVM、CPU以及相应方法的耗时情况。但是现有易维平台提供的Grafana看板指标数据有限,无法详细看到TP99、TPS等数据,且通过visuals拿到的数据和Grafana拿到的数据对于相同指标来说数据值有差异,搭建一套统一的看板势在必行。经调研易维平台没有用influxdb来存储数据,用的是ES,易维grafana中展示的数据是在ES中出的,ES中就没有JVM相关的监控信息,遂探究了如何自建性能测试工具进行监控看板的搭建。

三、性能测试平台搭建

业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板

1.jmeter

常用的压力测试软件有:LoadRunner、ApacheJMeter、NeoLoad、WebLOAD、Loadster、Load impact、CloudTest、Loadstorm、阿里云PTS等等,jmeter是一款使用Java开发的,开源免费的测试工具, 主要用来做功能测试和性能测试(压力测试/负载测试),且简单易用,本文便使用了jmeter压测工具。



jmeter可以对http请求做压测,但是做jar包的压测,需要对jmeter做二次开发进行定制化编写,对于以上jemter的二次开发之前已有文章发表对此不做过多赘述,详见 jmeter二次开发发送java请求



我们可以通过使用插件等方式设置线程数、循环次数等信息定制化监控我们我们压测的需要监控的指标数据。

2.telegraf

1.1.Telegraf是什么

Telegraf是一个Go语言编写的代理程序,可收集系统和服务的统计数据,并写入到InfluDB数据库。内存占用小,通过插件系统可轻松添加支持其他服务的扩展。是一个轻量级数据采集系统。



Telegraf metric是用于在处理期间对数据建模的内部表示。这些指标完全基于InfluxDB的数据模型,包含四个主要组件:

•度量名称(Measurement)

•标签(tags)

•字段(Field)

•时间戳(time)

1.2.为什么要用Telegraf

•可以采集多种组件的运行信息,不需要自己手动写定时脚本,降低了数据获取的难度

◦CPU

◦内存

◦不需要自己手动写定时脚本,降低了数据获取的难度

•配置简单

•与InfluxDB完美结合,按照时间序列采集数据

•轻量级,占用内存小

3.influxdb

3.1.InfluxDB简介

是一个由InfluxData开发的开源时序型数据库。它由Go语言写成,着力于高性能地查询与存储时序数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。

Influxdb有如下三大特性

•基于时间序列

•可度量性

•基于事件

相应的,我们也可以使用prometheus数据库采集数据,Prometheus也是由go语言开发的,是一套开源的监控&报警&时间序列数据库的组合。

3.2.InfluxDB使用

InfluxDB数据模型包括Measurement(表)、Tags(维度列)组件、Field(数值列)以及point。

InfluxDB数据保留策略操作

创建数据库保留策略

•<retention_policy_name>:保留策略的名称

•<database_name>:为哪个数据库创建保留策略

:该保留策略对应的数据过期时间

•REPLICATION:副本因子:几个副本

•SHARD DURATION:分片组的默认时长

•[DEFAULT]:是否为默认策略

CREATE RETENTION POLICY  "influx_retention" ON "telegraf" DURATION 30d REPLICATION 1 DEFAULT;

查看数据库保留策略

SHOW RETENTION POLICIES ON telegraf;

使用telegraf+InfluxDB搭建的数据资源管理看板。

业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板

4.Grafana

4.1.Grafana是什么?

Grafana是开源的、炫酷的可视化监控、分析工具,它主要包含以下特点:

•多种展示方式

•支持多数据源:

◦Graphite:时间序列 图形系统

◦InfluxDB

◦Opentsdb:基于HBase

◦Prometheus:开源 服务监控系统和时序数据库

◦ElasticSearch,elk:

•多种通知提醒

◦Email、SMS、

•混合展示

◦同一个图表中,混合使用不同的数据源

4.2.为什么要用Grafana?

Grafana主流数据库:ElasticSearch、InfluxDB、MySQL、Opentsdb、Postgresql。涵盖了大部分数据库,并且有很炫酷的图表库,开源、可以进行二次开发、汉化、可以做前端开发。

搭建的Grafana看板如下 业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板

四、特别提醒

1.jmeter与telegraf的衔接需要使用Jolokia工具,此工具的作用为作为JMX的HTTP桥接器,使得Telegraf能够通过HTTP协议轻松地访问JMX管理的Java应用程序的数据。关于Jolokia的官网及简介链接如下:

jolokia详细文档: jolokia官网

  1. 指标的采集及监控数据对齐可以参考MDC监控 监控指标简介

  2. 火焰图数据的采集可以使用arthas工具,安装过程可参考神灯文章 JVM虚拟机之字节码文件详解

五、总结与展望

千里之行,始于足下,本次从0到1搭建监控性能指标看板的历程中得到了深刻的体现。从最初的设想、规划,到一步步实施、调试,再到最终的呈现与优化,每一步都凝聚了搭建者的心血与智慧。在这个过程中,不仅成功搭建了一个功能完善的监控性能指标看板,更重要的是,学会了如何在压测过程中,根据指标情况提出合理的优化建议,为开发团队提供了有力的数据支持,帮助他们更好地优化代码,提升系统性能。这一成果不仅是对自我技术能力的肯定,更是对团队协作精神的最好诠释。

同时,这次经历也让我深刻感受到了自我技术成长的巨大飞跃。在解决问题的过程中,我不断挑战自我,学习新知识,掌握新技能,逐渐形成了自己的技术体系和方法论。这些宝贵的经验和收获,将成为我未来职业生涯中不可或缺的财富。

点赞
收藏
评论区
推荐文章
Wesley13 Wesley13
3年前
java Spring单元测试详解
介绍在Spring的框架下,做单元测试的两种办法。一、使用spring中对Junit框架的整合功能  除了junit4和spring的jar包,还需要springtest.jar。引入如下依赖:<dependency<groupIdorg.springfra
浩浩 浩浩
3年前
【Flutter实战】包管理
2.3包管理在软件开发中,很多时候有一些公共的库或SDK可能会被很多项目用到,因此,将这些代码单独抽到一个独立模块,然后哪个项目需要使用时再直接集成这个模块,便可大大提高开发效率。很多编程语言或开发工具都支持这种“模块共享”机制,如Java语言中这种独立模块会被打成一个jar包,Android中的aar包,Web开发中的npm包等。为了方便表述,我们将
Stella981 Stella981
3年前
SpringBoot 引入本地或第三方Jar包
在开发过程中,我们会遇到一些Maven仓库没有的Jar包的情况,比如公司其他团队开发的Jar包等。这时我们就不能通过Pom文件引入。这里我们使用hutoolJar为例。一、使用Maven命令把Jar包添加到本地仓库(1)执行maven命令,把Jar添加到本地。mvninstall:installfileDfile/Us
Wesley13 Wesley13
3年前
Unable to instantiate activity ComponentInfo
不知道怎么回事,在libs中添加了jar包后,无法给jar包附加上源码,于是采取以下措施:删除自动生成的依赖:在AndroidDependences目录上右击BuildPathRemovefromBuildPath然后往libs中拖入jar包,然后添加jar的引用,这样,就可以给jar包附上源码了。但是运行程序的时候
Stella981 Stella981
3年前
Dataway 配置数据接口时和前端进行参数对接
Dataway介绍Dataway是基于DataQL服务聚合能力,为应用提供的一个接口配置工具。使得使用者无需开发任何代码就配置一个满足需求的接口。整个接口配置、测试、冒烟、发布。一站式都通过Dataway提供的UI界面完成。UI会以Jar包方式提供并集成到应用中并和应用共享同一个http端口,应用无需单独
Stella981 Stella981
3年前
Jmeter学习笔记三_操作数据库(MySQL)
一、到入JDBC的jar包因为jmeter本身不能直接连接mysql,所以需要导入第三方的jar包,来连接mysql将jar包放在Jmeter安装目录/lib/mysqlconnectorjava5.1.7bin.jar并在测试计划中添加jar包路径!(https://oscimg.oschina.ne
Stella981 Stella981
3年前
Android系统源码集成高德定位SDK
由于项目需要使用定位功能并且系统可自由定制,所以考虑如何在源码中进行集成。在源码集成之前,系统中有至少两个应用使用高德定位SDK,或许需要使用定位的模块更多,如果每个模块单独集成会造成jar包的重复利用,并且编译文件不小心会导致编译冲突,因此考虑修改实现方式,在系统源码中将定位sdk的jar包集成到framework.jar中。既然集成到系统中,那它的使用方
谈谈压测方案的那点事 | 京东物流技术团队
前言在现阶段大促备战的压测不算是一件新鲜事,已经不存在什么技术瓶颈或者资源问题,每个团队都有很多人能够执行性能测试,在一些团队也已经落地了日常常态化,但压测也没有简单到只在压测平台上设置参数、运行脚本,然后去看压测报告中某个指标是否满足压测目标那么简单,我
高效开发与设计:提效Spring应用的运行效率和生产力 | 京东云技术团队
线上的业务jar包基本上普遍比较庞大,动不动一个jar包几百M,启动时间在10分钟级,拖慢了我们在故障时快速扩容的响应、以及本地开发调试效率。于是做了一些分析,看看Spring程序启动慢到底慢在哪里,如何去优化,目前的效果是大部分大型应用启动时间可以缩短70%~80%。
京东云开发者 京东云开发者
5个月前
实际上手体验maven面对冲突Jar包的加载规则
一、问题背景相信大家在日常的开发过程中都遇到过Jar包冲突的问题,emm,在最近处理业务需求时我也遇到了不同版本jar包冲突导致项目加载出错的问题。主要是一个完整的项目会不可避免的使用第三方的Jar包来实现功能开发,各种第三方包之间可能会存在依赖关系,不同