写点什么

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

  • 2025-01-03
    北京
  • 本文字数:2559 字

    阅读完需:约 8 分钟

作者:京东物流 樊芳渝

一、前言

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

二、调研过程

1.forcebot 平台

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


2.jconsole/jvisualvm+Grafana 监控

jconsole

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


jvisualvm

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




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



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

三、性能测试平台搭建

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>:为哪个数据库创建保留策略


•<duration>:该保留策略对应的数据过期时间


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


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


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


CREATE RETENTION POLICY  "influx_retention" ON "telegraf" DURATION 30d REPLICATION 1 DEFAULT;
复制代码


查看数据库保留策略


SHOW RETENTION POLICIES ON telegraf;
复制代码


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


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 看板如下


四、特别提醒

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


jolokia 详细文档: jolokia官网


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

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

五、总结与展望

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


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

发布于: 刚刚阅读数: 5
用户头像

拥抱技术,与开发者携手创造未来! 2018-11-20 加入

我们将持续为人工智能、大数据、云计算、物联网等相关领域的开发者,提供技术干货、行业技术内容、技术落地实践等文章内容。京东云开发者社区官方网站【https://developer.jdcloud.com/】,欢迎大家来玩

评论

发布
暂无评论
业务监控—一站式搭建jmeter+telegraf+influxdb+Grafana看板_京东科技开发者_InfoQ写作社区