Java应用通过jmx_exporter对外暴露jvm指标

文章介绍了JMX(JavaManagementExtensions)在Java应用程序管理和监控中的角色,以及jmx_prometheus_javaagent如何将JMX暴露的指标转化为Prometheus可收集的格式,以实现Java应用的远程监控和性能分析。
摘要由CSDN通过智能技术生成

示范代码

public class App 
{
    public static void main( String[] args ) throws InterruptedException {
        while(true){
            Thread.sleep(10000);
            System.out.println( "Hello World!" );
        }

    }
}

maven打包,生成test-prometheus-1.0-SNAPSHOT.jar

编写config.yaml

lowercaseOutputName: true
rules:
- pattern: ".*"

下载jmx_prometheus_javaagent-0.20.0.jar

启动

java -javaagent:./jmx_prometheus_javaagent-0.20.0.jar=12345:./config.yaml -cp test-prometheus-1.0-SNAPSHOT.jar org.example.App

查看jvm相关指标

http://localhost:12345/metrics 浏览器访问,获得结果

# HELP java_lang_operatingsystem_processcpuload java.lang:name=null,type=OperatingSystem,attribute=ProcessCpuLoad
# TYPE java_lang_operatingsystem_processcpuload untyped
java_lang_operatingsystem_processcpuload 0.0
# HELP java_lang_memorypool_usage_committed java.lang.management.MemoryUsage java.lang:name=Metaspace,type=MemoryPool,attribute=committed
# TYPE java_lang_memorypool_usage_committed untyped
java_lang_memorypool_usage_committed{name="Metaspace",} 8126464.0
java_lang_memorypool_usage_committed{name="PS Old Gen",} 1.79306496E8
java_lang_memorypool_usage_committed{name="PS Eden Space",} 6.7108864E7
java_lang_memorypool_usage_committed{name="Code Cache",} 2555904.0
java_lang_memorypool_usage_committed{name="Compressed Class Space",} 1179648.0
java_lang_memorypool_usage_committed{name="PS Survivor Space",} 1.1010048E7

基础内容

JMX是什么?

Java Management Extensions(JMX)是一种用于监视和管理 Java 应用程序、设备和服务的架构。它提供了一种标准化的方式,使得开发人员能够暴露应用程序的管理接口,并允许系统管理员通过这些接口来监视和管理应用程序的运行状态。JMX 是 Java 平台的一部分,被设计用于构建可插拔的管理和监控工具。

以下是 JMX 的一些关键特性和概念:

  1. MBean(Managed Bean):

    • MBean 是 JMX 的基本构建单元。它是一个 Java 对象,具有一组被称为属性、操作和通知的管理接口。通过 MBean,可以公开和操作应用程序的状态和行为。
  2. MBean Server:

    • MBean Server 是 JMX 的核心组件,负责管理和提供对 MBean 的访问。它充当注册表,用于注册和管理 MBean,并为客户端提供发现和访问这些 MBean 的接口。
  3. Agent:

    • JMX Agent 是运行在 Java 虚拟机内或外的组件,负责将应用程序的 MBean 注册到 MBean Server,并与外部系统或工具通信。Java 虚拟机本身通常包含一个内置的 JMX Agent。
  4. Connector:

    • Connector 允许远程客户端通过网络协议(例如 RMI、JMXMP、HTTP)连接到 MBean Server,以便从远程位置监视和管理应用程序。
  5. Instrumentation:

    • JMX 提供了 Instrumentation API,允许开发人员在应用程序中插入自定义的监视和管理代码。这使得开发人员能够灵活地暴露和管理应用程序内部的状态和操作。

JMX 被广泛应用于监控和管理 Java 应用程序,尤其在企业环境中。通过 JMX,开发人员可以轻松地添加监控和管理功能,系统管理员可以使用各种工具对应用程序进行远程监控和调整。 JMX 的标准化接口和灵活性使其成为 Java 生态系统中的重要管理工具。

jmx_prometheus_javaagent是什么?
jmx_prometheus_javaagent 是一个 Java 代理程序,用于将 Java 应用程序通过 JMX(Java Management Extensions)暴露的指标转换成 Prometheus 可以采集的格式。这个代理程序允许 Prometheus 服务器从 Java 应用程序中采集性能指标,以便进行监控和警报。

以下是 jmx_prometheus_javaagent 是如何利用 JMX 获得 JVM 相关指标的基本原理:

  1. 配置 JMX Exporter:

    • 在 Java 应用程序的启动脚本中,添加 jmx_prometheus_javaagent 作为 Java 代理,同时提供一个配置文件,该配置文件指定了要暴露的 JMX 指标和 Prometheus 服务器的地址。
    java -javaagent:/path/to/jmx_prometheus_javaagent.jar=port=1234:/path/to/config.yaml -jar your_application.jar 

    在上述命令中,/path/to/jmx_prometheus_javaagent.jarjmx_prometheus_javaagent 的 JAR 文件路径,port=1234 指定代理程序监听的端口,/path/to/config.yaml 是配置文件路径。

  2. 配置文件:

    • 配置文件定义了要从 JMX 中暴露的指标和如何转换它们。这个文件通常是一个 YAML 文件,其中包含了关于哪些 MBean、属性和操作要暴露的信息。

    例如,配置文件可能包含类似以下的内容:

    lowercaseOutputName: true
    lowercaseOutputLabelNames: true
    rules:
      - pattern: '.*'
        name: '$1'
    
  3. 这个例子中的配置表示暴露所有 MBean,并将它们的名称转换成小写。

  4. JMX Exporter 启动:

    • 代理程序通过连接到 JMX 服务,获取 MBean 的信息。它使用 Java 的 JMX 技术与应用程序中注册的 MBean 进行通信,读取其属性值、执行操作等。
  5. Prometheus 采集:

    • Prometheus 服务器通过 HTTP 协议从 jmx_prometheus_javaagent 获取指标。代理程序按照配置文件中的规则,将从 JMX 获取的指标转换成 Prometheus 的格式,并在指定的端口上提供 HTTP 端点。

    例如,Prometheus 配置文件中可能包含类似以下的内容:

    - job_name: 'java'
      static_configs:
        - targets: ['localhost:1234']
    

    这个配置告诉 Prometheus 在 localhost:1234 地址上查找 Java 应用程序的指标。

总的来说,jmx_prometheus_javaagent 利用 Java 的 JMX 技术,通过配置文件定义的规则,将应用程序的性能指标转换成 Prometheus 格式,以便 Prometheus 服务器进行采集和存储。这使得 Prometheus 能够有效地监控和警报 Java 应用程序的运行状态。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值