Prometheus监控Java应用的指标采集指南

prometheus监控java应用的核心方法是使用micrometer或jmx exporter暴露指标。1. 使用micrometer时,添加spring-boot-starter-actuator和micrometer-registry-prometheus依赖,配置management.endpoints.web.exposure.include启用/prometheus端点,并通过meterregistry创建counter、gauge、timer等指标类型记录数据。2. 使用jmx exporter时,下载jmx_prometheus_javaagent.jar并编写config.yaml定义jmx到prometheus指标的映射规则,通过-javaagent参数加载代理并指定端口和配置文件,使prometheus可抓取jmx转换后的指标。两者分别适用于spring boot应用和传统java应用,实现对运行状态的有效监控。

Prometheus监控Java应用的指标采集指南

Prometheus监控Java应用,核心在于让Java应用以Prometheus可识别的格式(通常是OpenMetrics文本格式)暴露其内部指标。这通常通过在应用内部集成特定的客户端库(如Micrometer)或使用外部代理(如JMX Exporter)来实现。一旦指标暴露出来,Prometheus服务器就能周期性地抓取(scrape)这些数据,进行存储、查询和告警。

Prometheus监控Java应用的指标采集指南

解决方案

要让Prometheus顺利监控到你的Java应用,最主流且推荐的方式是使用Micrometer。它是一个度量门面(metrics facade),支持多种监控系统,包括Prometheus。对于一些遗留或非Spring Boot的应用,JMX Exporter则是一个非常实用的选择,它能将Java应用通过JMX暴露的MBeans转换为Prometheus指标。

1. 使用Micrometer (推荐)

立即学习“Java免费学习笔记(深入)”;

Prometheus监控Java应用的指标采集指南

如果你在使用Spring Boot,Micrometer的集成简直是无缝的。它内置了对各种指标类型的支持,并且通过Spring Boot Actuator自动暴露/actuator/prometheus端点。

Maven依赖:

Prometheus监控Java应用的指标采集指南

    org.springframework.boot    spring-boot-starter-actuator    io.micrometer    micrometer-registry-prometheus    runtime

Gradle依赖:

implementation 'org.springframework.boot:spring-boot-starter-actuator'runtimeOnly 'io.micrometer:micrometer-registry-prometheus'

配置 (application.properties 或 application.yml):

确保Actuator的Prometheus端点被启用。

management.endpoints.web.exposure.include=health,prometheus

自定义指标示例 (Java代码):

import io.micrometer.core.instrument.Counter;import io.micrometer.core.instrument.MeterRegistry;import org.springframework.stereotype.Service;@Servicepublic class MyService {    private final Counter requestCounter;    public MyService(MeterRegistry registry) {        // 创建一个名为 "my_service_requests_total" 的计数器        // 带有标签 "status" 和 "method"        this.requestCounter = Counter.builder("my_service_requests_total")                .description("Total number of requests to MyService")                .tag("status", "success")                .register(registry);    }    public String processRequest() {        // 每次调用此方法,计数器加1        requestCounter.increment();        return "Request processed successfully!";    }}

启动应用后,访问 http://localhost:8080/actuator/prometheus 就能看到你的指标了。

2. 使用JMX Exporter (适用于传统或非Spring Boot应用)

JMX Exporter是一个独立的Java代理,它通过JMX连接到运行中的JVM,并根据配置文件将JMX MBean属性转换为Prometheus指标。

下载JMX Exporter JAR:

你可以从Maven Central下载最新版本的 jmx_prometheus_javaagent.jar。比如,搜索 io.prometheus.jmx:jmx_prometheus_javaagent

创建配置文件 (config.yaml):

这个文件定义了哪些JMX MBean应该被暴露,以及如何命名它们。

# config.yaml 示例startDelaySeconds: 0 # 代理启动后立即开始暴露指标rules:  - pattern: "java.langSystemLoadAverage"    name: "jvm_system_load_average"    help: "System load average for the last minute"    type: GAUGE  - pattern: "java.langcommitted"    name: "jvm_heap_memory_committed_bytes"    help: "Committed heap memory in bytes"    type: GAUGE  - pattern: "java.langcommitted"    name: "jvm_memory_pool_committed_bytes"    help: "Committed memory for a given memory pool in bytes"    labels:      pool: "$1"    type: GAUGE

启动Java应用时加载JMX Exporter:

java -javaagent:/path/to/jmx_prometheus_javaagent.jar=9090:/path/to/config.yaml -jar your-application.jar

这里 9090 是JMX Exporter暴露指标的端口,/path/to/config.yaml 是你的配置文件路径。

为什么选择Prometheus来监控Java应用?

在我看来,Prometheus和Java的结合简直是天作之合。首先,它是一个强大的开源监控系统,尤其是其基于拉取(pull)模型的指标采集方式,与Java应用的服务发现机制能很好地协同工作。你不需要担心应用主动推送数据的问题,Prometheus会定期来“拜访”你的应用,把需要的数据拿走。这种模式在微服务架构下特别香,服务启动了,Prometheus自然就能发现它并开始监控。

其次,Prometheus的PromQL查询语言真的非常强大。它可以让你对收集到的时间序列数据进行各种复杂的聚合、过滤和计算,从而深入洞察应用的运行状况。我记得有一次,我用PromQL几行代码就快速定位了一个内存泄露问题,那种效率是传统监控工具很难比拟的。

当然,它也有一些小“脾气”。比如,PromQL的学习曲线对于新手来说可能有点陡峭,而且Prometheus本身是单机的,虽然有联邦(federation)和远程存储(remote storage)方案来扩展,但大规模集群的规划和维护确实需要一些经验。不过,这些挑战相比它带来的价值来说,我觉得完全值得投入。

Micrometer在Java应用中如何快速集成并暴露自定义指标?

Micrometer的魅力在于它的“门面”特性,这意味着你写一次代码,就可以适配多种监控后端,Prometheus只是其中之一。对于Spring Boot应用,集成简直是傻瓜式的。

添加依赖:上面已经提到了 spring-boot-starter-actuatormicrometer-registry-prometheus。前者提供了Spring Boot的监控端点基础设施,后者是Prometheus注册表的实现。

启用Actuator端点:在 application.propertiesapplication.yml 中配置 management.endpoints.web.exposure.include=prometheus。这样,Spring Boot就会在 /actuator/prometheus 路径上暴露Prometheus格式的指标。

创建自定义指标:Micrometer提供了几种核心的度量类型:

Counter (计数器):只增不减的数值,适合统计请求总数、错误总数等。

Counter myCounter = registry.counter("my_app_processed_events_total", "type", "success");myCounter.increment(); // 每次事件发生时调用

Gauge (计量器):表示瞬时值,可增可减,适合表示当前内存使用、队列大小等。

// 监控一个List的当前大小List myList = new ArrayList();registry.gaugeCollectionSize("my_app_list_size", Tags.empty(), myList);

或者直接绑定一个函数:

registry.gauge("my_app_active_connections", this, MyService::getActiveConnections);// MyService中需要有 public double getActiveConnections() 方法

Timer (计时器):测量短时间事件的持续时间,如方法执行时间、请求处理时间。它同时提供了计数和总时间。

Timer myTimer = registry.timer("my_app_task_duration", "task", "data_processing");myTimer.record(() -> {    // 这里是需要计时的代码块    try {        Thread.sleep(100);    } catch (InterruptedException e) {        Thread.currentThread().interrupt();    }});

DistributionSummary (分布摘要):用于统计事件的分布,如请求体大小、响应延迟等,可以提供分位数(percentiles)信息。

DistributionSummary mySummary = registry.summary("my_app_payload_size_bytes");mySummary.record(1024); // 记录一个1024字节的负载

关键点是,你需要通过 MeterRegistry 实例来注册这些指标。在Spring Boot中,MeterRegistry 会被自动注入到你的组件中。

我个人在使用Micrometer时,最喜欢它的标签(tags)功能。你可以为每个指标添加任意数量的键值对标签,比如 method="GET", path="/api/v1/users", status="success"。这让你的数据变得异常灵活,在PromQL查询时能进行非常细粒度的过滤和聚合。

JMX Exporter:如何为传统Java应用配置Prometheus监控?

JMX Exporter对于那些不是Spring Boot,或者你不想修改应用代码来集成Micrometer的传统Java应用来说,简直是救星。它的工作原理是作为一个Java代理运行,通过JVM的JMX接口获取运行时的各种MBeans信息,然后转换成Prometheus能理解的格式。

获取JMX Exporter Jar包:从Maven Central下载 jmx_prometheus_javaagent.jar。通常,你会把它放在应用服务器能访问到的某个路径下。

编写 config.yaml 配置文件:这是JMX Exporter的核心。它定义了哪些JMX MBean应该被暴露,以及如何将它们的属性映射到Prometheus指标。这个配置文件是基于YAML格式的,包含一系列的 rules

pattern: 这是匹配JMX MBean名称的正则表达式。JMX MBean的名称通常是 domain:key=value,key=value,... 的形式,比如 java.lang:type=Memoryname: 转换后Prometheus指标的名称。help: 指标的描述信息,会在Prometheus的 /metrics 页面显示。type: 指标类型(GAUGE, COUNTER, SUMMARY, HISTOGRAM)。labels: 可以从Mbean名称或属性中提取值作为Prometheus指标的标签。$1, $2 等代表 pattern 中捕获组的值。

举个例子,要监控Tomcat连接池:

rules:  - pattern: "CatalinacurrentThreadCount"    name: "tomcat_thread_pool_current_threads"    help: "Current number of threads in Tomcat thread pool"    type: GAUGE    labels:      name: "$1" # 从name="(.*?)"捕获组中提取线程池名称  - pattern: "CatalinaNumActive"    name: "tomcat_datasource_active_connections"    help: "Number of active connections in Tomcat datasource"    type: GAUGE    labels:      name: "$1"

配置 rules 是JMX Exporter使用过程中最需要花时间的地方。因为不同的Java应用服务器(Tomcat, Jetty, WildFly等)或库(HikariCP, Druid等)暴露的JMX MBean名称和结构都不尽相同。你可能需要借助JConsole或VisualVM这样的工具来查看目标JVM的MBeans结构,然后根据它们来编写你的 pattern

启动Java应用时加载JMX Exporter:通过JVM参数 -javaagent 来加载JMX Exporter。

java -javaagent:/path/to/jmx_prometheus_javaagent.jar=9090:/path/to/config.yaml -jar your-application.jar

这里 9090 是JMX Exporter将暴露指标的端口,Prometheus会从这个端口抓取数据。

JMX Exporter的优点是侵入性极低,你不需要修改应用代码。但缺点也很明显,就是 config.yaml 的编写和调试可能比较繁琐,特别是当你需要监控的MBeans结构复杂或不明确时。有时候,一个正则表达式写不对,就可能导致一大堆指标无法被正确采集。不过,一旦配置好了,它就能非常稳定地工作,为你的老应用提供现代化的监控能力。

以上就是Prometheus监控Java应用的指标采集指南的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/133296.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月29日 05:26:03
下一篇 2025年11月29日 05:54:33

相关推荐

  • SUI价格飙升:这种加密货币准备好起飞了吗?

    sui价格飙升!我们拆解最新一波涨势,分析关键点位,并探讨这种加密货币的下一步走向。它会触及5美元吗?还是回调即将来临? SUI价格反弹:这种加密货币是否已准备好起飞? SUI在加密货币市场中再度引发关注,经历了一波显著的价格攀升。这次上涨背后的原因是什么?它是否具备持续的动力?我们一起来看看背后的…

    2025年12月8日
    000
  • 新手账户频繁操作被风控?该如何申诉解冻?

    不少新手在使用交易平台时因频繁登录、快速转账或频繁下单被系统判定为异常行为,导致账户被临时冻结。这类风控措施是为了防止被盗与资金风险,但也可能误伤普通用户。 首选稳定平台,并完成注册验证 使用币安和火币等主流平台,能大大降低误触风控系统的概率。这两家平台申诉流程较为清晰,恢复效率高。 币安官网: 币…

    2025年12月8日
    000
  • 为什么有时候无法看到已购买的币?新手应如何排查?

    不少新手在完成交易后发现账户里“看不到刚买的币”,常误以为交易失败或平台出问题。其实多数情况并非系统故障,而是操作路径不熟或界面理解有误。 为了确保买币后第一时间能看到资产,建议优先选择界面清晰、功能完善的主流平台,如币安操作指引清楚,能大幅减少此类困扰。 币安官网: 币安下载地址: 注册与身份验证…

    2025年12月8日
    000
  • 在问答之夜测试你的2000年代情景喜剧知识!

    重返欢笑时光!一场专属于2000年代情景喜剧迷的问答之夜即将重磅回归。奖品、游戏、还有满满的怀旧情怀等你来挑战! 嗨,电视控们!准备好穿越回那个情景喜剧风靡荧屏的黄金十年了吗?本地将举办“2000年代情景喜剧问答之夜”,这是一次检验你对这些经典剧集了解程度的绝佳机会——千万别错过这场盛会! 这是一场…

    2025年12月8日
    000
  • 火币APP官方下载与登录指南:注册、实名认证全流程一文看懂

    作为老牌交易平台之一,火币htx一直是许多用户关注的选择,特别是在政策合规、安全机制和币种丰富度方面具备一定优势。新手若想快速体验火币平台交易功能,可通过以下步骤完成注册与认证。 火币HTX官网: 火币HTX下载地址: 注册流程详细说明 1、打开App后点击“立即注册”,选择手机号或邮箱注册方式; …

    2025年12月8日
    000
  • 币圈交易30秒平台

    数字货币交易的瞬息万变,尤其是在30秒这样的极短周期内,对交易平台的速度、稳定性和用户体验提出了极高的要求。选择一个合适的交易平台是参与币圈交易的关键一步,它直接影响到交易的效率和资金的安全。在快速变化的数字资产市场中,一个能够提供流畅交易体验、丰富交易工具和可靠服务的平台,能够帮助交易者抓住稍纵即…

    2025年12月8日 好文分享
    000
  • 以太坊,2025年预测与Ozak AI:它们是新的吗?

    探索以太坊的未来、2025年展望与区块链领域ozak ai的崛起 以太坊、2025年展望与Ozak AI:迈向新时代? 以太坊、2025年展望与Ozak AI:有何新意? 加密货币世界正风起云涌!本文梳理了对以太坊在2025年的发展预测,以及其与新兴平台如Ozak AI之间的互动关系,并介绍了这些创…

    2025年12月8日
    000
  • Solana 与以太坊:代币化资产大比拼

    solana 引领 rwa 浪潮挑战以太坊霸主地位:能否成为通证化资产新王者? 各位注意了,因为通证化资产市场正迅速升温!Solana 正掀起一股热潮,对以太坊长期的主导地位发起有力挑战。让我们一起深入了解这场竞争背后的故事。 Solana 在 RWA 领域强势崛起 Solana 正在快速成长为通证…

    2025年12月8日
    000
  • MemeCore狂热:模因币如何席卷加密货币排行榜

    memecore 正在掀起模因币的革命,推动其实用性与文化影响力的发展。像 token6900 这样的币种是否也会紧随其后? 嘿,加密世界的伙伴们!模因币市场正迎来一波热潮,而 MemeCore($M)则站在了这场风暴的中心。别再谈论那些老套的拉高出货骗局了,我们现在关注的是真正的实用价值和文化的持…

    2025年12月8日
    000
  • 雪崩、Ruvi AI 和审计代币:加密货币的新时代?

    探索avalanche的崛起、ruvi ai的前景以及在当前加密货币市场中经过审计代币的关键作用。它们是否会引领下一波趋势? Avalanche、Ruvi AI与审计型代币:开启加密新时代? 加密货币领域始终处于快速演变之中,近期的关注焦点集中在Avalanche(AVAX)、Ruvi AI(RUV…

    2025年12月8日
    000
  • Meme币蓄势待发:寻找下一个被低估的宝石

    忘记那些老面孔吧!本文将深入探讨一些被低估的模因币,比如 little pepe 和 bonk,分析它们在即将到来的牛市中可能实现爆发式增长的潜力。 迎接牛市的新势力:挖掘下一个隐藏的模因币宝藏 模因币市场正逐步升温,精明的投资者正在寻找下一个可能爆发的机会。与其追逐已经过热的老项目,不如关注那些在…

    2025年12月8日
    000
  • Polkadot(DOT)价值几何?新手能否借此分散风险?

    在主流区块链项目中,polkadot(dot)因其独特的跨链能力与生态构建方式受到高度关注。对于新手而言,它不仅是一个值得了解的投资标的,也可能是分散投资风险的有效工具。 什么是 Polkadot? Polkadot 是由以太坊联合创始人 Gavin Wood 发起的项目,核心理念是实现多链互操作性…

    2025年12月8日
    000
  • Chainlink 有何用处?是否值得作为首个入门币?

    在众多加密项目中,chainlink(link)被誉为“区块链世界的预言机标准”。它并非单纯的支付代币,而是为整个区块链生态提供关键数据支持。那么,它适合新手作为首个入门币吗? 什么是 Chainlink? Chainlink 是一个去中心化预言机网络,可以让区块链获取链外数据(如价格、天气、赛事结…

    2025年12月8日
    000
  • AI 标记 meme 币即将爆发:逆势投资者指南

    探索ai如何重塑meme币投资:识别fartcoin、bonk和popcat等潜力币种,以及币安的新策略 AI识别即将爆发的meme币:逆势投资者指南 别再被噪音干扰!AI正在寻找真正具备潜力的meme币,关注的是社区活跃度、代币经济模型及生态整合能力。这不是炒作,而是结构性优势的体现。同时,币安也…

    2025年12月8日
    000
  • 虚拟货币为什么总出现充值不到账?该怎么检查?

    在数字资产交易中,充值不到账是许多新手常遇到的问题。这类情况多数并非平台故障,而是因用户操作疏忽或网络延迟所致。尤其是在初次使用交易所时,选择可靠平台+掌握正确充值流程尤为关键。 目前主流平台如币安与欧易OKX都支持自动识别链上充值记录,并提供清晰的区块确认进度、充值状态追踪等功能,极大降低资产卡顿…

    2025年12月8日
    000
  • 菠萝公司乘风RWA浪潮:为未来知识产权赋予代币化价值

    菠萝公司全力拓展数字资产市场,尝试将知识产权进行代币化处理。这项创新举措是否能够挖掘潜在价值,并改变传统投资方式? 菠萝公司乘RWA浪潮:为未来代币化知识产权 菠萝公司(Pineapple Inc.)正通过将其知识产权转化为可交易的数字代币引发关注。这一行动有望推动投资门槛的降低,在区块链金融领域树…

    2025年12月8日
    000
  • 小佩佩、加密货币价格与Gemini AI:有什么热议?

    小佩佩(lilpepe)的崛起,离不开gemini ai对其未来价值的预测,以及其独特的代币经济模型,这与比特币的强劲走势和柴犬币所面临的挑战形成了鲜明对比。我们来一起看看当前的市场趋势。 小佩佩、加密货币价格与Gemini AI:为何引发关注? 加密市场再次热闹非凡!比特币屡破新高,Meme币持续…

    2025年12月8日
    000
  • Aave的500亿美元里程碑:净存款和替代币如何塑造去中心化金融

    aave净存款突破500亿美元,defi与传统银行展开竞争,而低价山寨币则为投资者提供了高收益潜力。深入解析不断发展的去中心化金融生态。 Aave 500亿美元里程碑:净存款与山寨币如何塑造DeFi未来 去中心化借贷平台Aave的净存款总额近期成功突破500亿美元门槛,这不仅展现了DeFi在主流金融…

    2025年12月8日
    000
  • PI恢复,SEI闪现,BEAT解锁:有什么新动态?

    加密市场热度持续攀升!pi network价格反弹、sei看涨趋势初现,以及blockdag推出的beat质押通行证正引发广泛关注。接下来我们一起来看看这些最新动态! 随着第三季度逐步深入,加密市场热度不断上升。“PI反弹,SEI显露上涨迹象,BEAT质押机制”成为加密圈内热议的话题。下面我们逐一分…

    2025年12月8日
    000
  • 加密货币市场的疯狂之旅:$C 代币飙升引发热议!

    加密市场热议神秘 $c 代币暴涨,是牛市来临还是昙花一现?深入解析,一探究竟! 各位加密圈的朋友,大家好!最近的加密市场异常火热,尤其是这个名为 $C 的代币频繁出现在各大新闻头条。它真的出现价格飙升了吗?还是只是炒作?今天我们就来揭开这背后的真相。 探索 $C 代币的暴涨传言 有消息称,2025 …

    2025年12月8日
    000

发表回复

登录后才能评论
关注微信