示范代码
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 的一些关键特性和概念:
-
MBean(Managed Bean):
- MBean 是 JMX 的基本构建单元。它是一个 Java 对象,具有一组被称为属性、操作和通知的管理接口。通过 MBean,可以公开和操作应用程序的状态和行为。
-
MBean Server:
- MBean Server 是 JMX 的核心组件,负责管理和提供对 MBean 的访问。它充当注册表,用于注册和管理 MBean,并为客户端提供发现和访问这些 MBean 的接口。
-
Agent:
- JMX Agent 是运行在 Java 虚拟机内或外的组件,负责将应用程序的 MBean 注册到 MBean Server,并与外部系统或工具通信。Java 虚拟机本身通常包含一个内置的 JMX Agent。
-
Connector:
- Connector 允许远程客户端通过网络协议(例如 RMI、JMXMP、HTTP)连接到 MBean Server,以便从远程位置监视和管理应用程序。
-
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 相关指标的基本原理:
-
配置 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.jar
是jmx_prometheus_javaagent
的 JAR 文件路径,port=1234
指定代理程序监听的端口,/path/to/config.yaml
是配置文件路径。 - 在 Java 应用程序的启动脚本中,添加
-
配置文件:
- 配置文件定义了要从 JMX 中暴露的指标和如何转换它们。这个文件通常是一个 YAML 文件,其中包含了关于哪些 MBean、属性和操作要暴露的信息。
例如,配置文件可能包含类似以下的内容:
lowercaseOutputName: true lowercaseOutputLabelNames: true rules: - pattern: '.*' name: '$1'
-
这个例子中的配置表示暴露所有 MBean,并将它们的名称转换成小写。
-
JMX Exporter 启动:
- 代理程序通过连接到 JMX 服务,获取 MBean 的信息。它使用 Java 的 JMX 技术与应用程序中注册的 MBean 进行通信,读取其属性值、执行操作等。
-
Prometheus 采集:
- Prometheus 服务器通过 HTTP 协议从
jmx_prometheus_javaagent
获取指标。代理程序按照配置文件中的规则,将从 JMX 获取的指标转换成 Prometheus 的格式,并在指定的端口上提供 HTTP 端点。
例如,Prometheus 配置文件中可能包含类似以下的内容:
- job_name: 'java' static_configs: - targets: ['localhost:1234']
这个配置告诉 Prometheus 在
localhost:1234
地址上查找 Java 应用程序的指标。 - Prometheus 服务器通过 HTTP 协议从
总的来说,jmx_prometheus_javaagent
利用 Java 的 JMX 技术,通过配置文件定义的规则,将应用程序的性能指标转换成 Prometheus 格式,以便 Prometheus 服务器进行采集和存储。这使得 Prometheus 能够有效地监控和警报 Java 应用程序的运行状态。