Java 应用监控:用于收集指标的库与工具

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java 应用监控:工具与库概述



在现代开发中,监控 Java 应用已成为一项必备实践。没有它,就无法了解系统在负载下的表现、瓶颈出现在哪里,以及如何快速响应故障。本文将介绍用于收集指标、追踪和可视化 Java 应用状态的关键库与工具:Micrometer、Prometheus Java Client、JMX 和 Java Flight Recorder。



1. Micrometer —— 指标收集的门面



Micrometer 是 Spring Boot 生态及其他领域中收集指标的事实标准。它提供了一个统一的 API,可与不同的后端系统配合使用:Prometheus、Datadog、Graphite、InfluxDB 等。



主要功能:

  • 支持计数器 (Counter)、计时器 (Timer)、直方图 (Histogram) 和仪表 (Gauge)。
  • 与 Spring Actuator 自动集成。
  • 灵活的标签 (tags) 配置,用于过滤指标。


Micrometer 与 Prometheus 配合使用的示例:

// 在 pom.xml 中添加依赖:// <dependency>//     <groupId>io.micrometer</groupId>//     <artifactId>micrometer-registry-prometheus</artifactId>// </dependency>

import io.micrometer.core.instrument.MeterRegistry;import io.micrometer.core.instrument.Counter;import io.micrometer.prometheus.PrometheusMeterRegistry;import io.micrometer.prometheus.PrometheusConfig;

public class MetricsExample { private final Counter requestCounter;

public MetricsExample() { PrometheusMeterRegistry registry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT); requestCounter = Counter.builder("http.requests.total") .description("Total HTTP requests") .tag("method", "GET") .register(registry); }

public void handleRequest() { requestCounter.increment(); }

public String scrapeMetrics() { return registry.scrape(); // 返回 Prometheus 格式的指标 }}


Micrometer 允许在不修改代码的情况下轻松切换监控系统。



2. Prometheus Java Client —— 直接收集指标



Prometheus Java Client 是用于以 Prometheus 格式导出指标的官方库。它比 Micrometer 抽象程度更低,但提供了对数据收集的完全控制。



主要组件:

  • CollectorRegistry —— 所有指标的注册表。
  • Counter、Gauge、Histogram、Summary —— 指标类型。
  • 内置 HTTP 服务器,用于 /metrics 端点。


使用简单 HTTP 服务器的示例:

import io.prometheus.client.Counter;import io.prometheus.client.exporter.HTTPServer;import io.prometheus.client.hotspot.DefaultExports;

public class PrometheusExample { static final Counter requests = Counter.build() .name("requests_total") .help("Total requests.") .register();

public static void main(String[] args) throws Exception { DefaultExports.initialize(); // 添加 JVM 指标(内存、GC、线程) HTTPServer server = new HTTPServer(8080); // 端点 /metrics

while (true) { requests.inc(); Thread.sleep(1000); } }}


该库非常适合需要快速配置监控且无需额外依赖的场景。



3. JMX (Java Management Extensions)



JMX —— 用于管理和监控 JVM 的内置机制。它允许获取关于内存、线程、类以及

推荐