Prometheus 采集 JVM 数据

Prometheus 采集 JVM 数据通常通过集成 JMX Exporter(Java Management Extensions Exporter)实现。以下是完整的介绍和操作步骤:


1. 原理概述

  • JVM 数据采集依赖于 JMX(Java Management Extensions),JVM 提供了一些标准的 JMX MBeans,用于监控堆内存、线程、GC 等指标。
  • JMX Exporter 是一个工具,它将 JMX 提供的指标转换为 Prometheus 可读取的格式,暴露在 HTTP /metrics 接口上。
  • Prometheus 定时拉取该接口,存储和分析 JVM 性能数据。

2. 实现步骤

(1)下载 JMX Exporter
(2)配置 JMX Exporter
  1. 创建配置文件: 配置文件用于定义需要暴露的 JVM 指标,可以参考以下示例 config.yaml

    startDelaySeconds: 0
    lowercaseOutputName: true
    lowercaseOutputLabelNames: true
    rules:
      - pattern: ".*"
    
    • startDelaySeconds:延迟启动的秒数。
    • rules:规则,用于定义哪些 JMX 指标需要暴露。.* 表示暴露所有指标。
  2. 启动 JVM 应用程序: 将 jmx_prometheus_javaagent.jar 作为 Java Agent 加载,示例:

    java -javaagent:/path/to/jmx_prometheus_javaagent-<version>.jar=8080:/path/to/config.yaml -jar your-app.jar
    
    • 8080 是 JMX Exporter 暴露的 HTTP 端口。
    • config.yaml 是配置文件路径。
(3)配置 Prometheus

在 Prometheus 的 prometheus.yml 文件中,添加 JVM 数据采集目标:

scrape_configs:
  - job_name: 'jvm'
    static_configs:
      - targets: ['localhost:8080']
(4)启动 Prometheus 和 JVM 应用程序
  • 启动后,Prometheus 会定时从 http://localhost:8080/metrics 采集 JVM 数据。

3. 可采集的 JVM 指标

通过 JMX Exporter,可以采集到以下常见的 JVM 指标:

(1)内存相关
  • jvm_memory_bytes_used:堆内存使用量。
  • jvm_memory_bytes_committed:JVM 已分配的内存。
  • jvm_memory_bytes_max:堆的最大内存。
  • jvm_memory_bytes_init:初始化的堆内存大小。
(2)垃圾回收(GC)
  • jvm_gc_collection_seconds_count:GC 执行次数。
  • jvm_gc_collection_seconds_sum:GC 总耗时。
  • 垃圾回收类型:G1 Young GenerationG1 Old Generation
(3)线程
  • jvm_threads_current:当前活动线程数。
  • jvm_threads_daemon:当前守护线程数。
  • jvm_threads_peak:历史最大线程数。
(4)类加载
  • jvm_classes_loaded:当前加载的类数量。
  • jvm_classes_unloaded:已卸载的类总数。
(5)CPU
  • process_cpu_seconds_total:进程的 CPU 使用总时间。
  • system_cpu_seconds_total:系统的 CPU 使用总时间。

4. 可视化 JVM 数据

  • 使用 Grafana 配合 Prometheus 展示 JVM 数据。
  • 导入现成的 JVM 监控仪表盘:
    • 前往 Grafana Dashboard。
    • 搜索 JVM (Micrometer) Dashboard,导入 ID 为 4701 的仪表盘。

5. 示例场景

假设你在运行一个 Java Web 应用(如 Spring Boot),需要监控其性能指标:

  1. 下载 jmx_prometheus_javaagent.jar 并配置。
  2. 修改应用启动命令,加载 Java Agent:
    java -javaagent:/path/to/jmx_prometheus_javaagent-0.17.2.jar=8080:/path/to/config.yaml -jar my-app.jar
    
  3. 配置 Prometheus 的 prometheus.yml
    scrape_configs:
      - job_name: 'spring_boot'
        static_configs:
          - targets: ['localhost:8080']
    
  4. 启动 Prometheus 并导入 Grafana 仪表盘,开始监控 JVM 指标。

6. 总结

  • JMX Exporter 是 Prometheus 集成 JVM 性能监控的标准工具。
  • 它将 JMX 提供的指标转换为 Prometheus 格式,方便采集和分析。
  • 可监控堆内存、GC、线程、CPU 等关键指标,适用于任何 Java 应用程序。
  • 配合 Grafana,可以轻松构建丰富的 JVM 性能监控面板。
Prometheus JVM监控是通过在Prometheus配置文件中添加适当的作业和目标,以及使用JMX Exporter来实现的。首先,需要编辑Prometheus配置文件(prometheus.yml),并添加一个作业(job),指定metrics路径和目标。 其次,使用JMX Exporter来读取JVM运行时的监控数据,并将其转换为Prometheus所认知的metrics格式,以便Prometheus能够对其进行监控采集。JMX Exporter利用Java的JMX机制来实现这一功能。 最后,为了实现JVM监控,需要准备一个Dockerfile,并在其中添加JMX配置文件和JMX Exporter的jar文件。在Dockerfile中,我们可以选择一个基础镜像(例如tomcat),然后将JMX配置文件和JMX Exporter的jar文件添加到镜像中。 通过以上步骤,我们可以实现对JVM的监控,并使用Prometheus进行数据采集和监控分析。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [prometheus监控java项目(jvm等):k8s外、k8s内](https://blog.csdn.net/weixin_44896406/article/details/122402969)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [手把手教你使用 Prometheus 监控 JVM](https://blog.csdn.net/yunxiao6/article/details/109045399)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值