Micrometer for Java: 完整指南与示例
\n\n1. 什么是 Micrometer 以及为什么需要它
\n\nMicrometer 是一个用于 Java(以及 JVM 语言)应用程序的指标收集库,它为 Prometheus、Graphite、Datadog、InfluxDB、New Relic 等流行的监控系统提供了一个外观层。它实现了 Micrometer Observation API 规范,并且是 Spring Boot 生态系统(从 2.0 版本开始)中指标收集的事实标准。
\n\n为什么需要它?在现代微服务架构中,了解应用程序的运行状况至关重要:处理了多少请求、响应延迟如何、消耗了多少内存、错误发生的频率如何。Micrometer 允许您统一收集这些数据,而无需绑定到特定的监控后端。您只需编写一次代码,通过更改 pom.xml 或 build.gradle 中的依赖项,即可在 Prometheus、Graphite 或 CloudWatch 之间切换。
该库提供了丰富的工具集:计数器 (Counter)、直方图 (Histogram)、计时器 (Timer)、分布摘要 (DistributionSummary),以及对标签 (tags) 的支持,用于多维指标聚合。与 JVM(垃圾回收、线程、内存)和流行框架(Spring、Hibernate、Jetty、Tomcat)的内置集成使其成为生产环境监控不可或缺的工具。
\n\n2. 安装
\n\nMicrometer 通过 Maven Central 分发。对于 Java 项目,使用 Maven 或 Gradle。以下是添加依赖项的具体命令。
\n\nMaven (pom.xml)
\n<!-- Micrometer 核心模块 -->\n<dependency>\n <groupId>io.micrometer</groupId>\n <artifactId>micrometer-core</artifactId>\n <version>1.14.5</version> <!-- 请在 mvnrepository.com 查看最新版本 -->\n</dependency>\n\n<!-- Prometheus 注册器 -->\n<dependency>\n <groupId>io.micrometer</groupId>\n <artifactId>micrometer-registry-prometheus</artifactId>\n <version>1.14.5</version>\n</dependency>\n\nGradle (build.gradle)
\ndependencies {\n implementation 'io.micrometer:micrometer-core:1.14.5'\n implementation 'io.micrometer:micrometer-registry-prometheus:1.14.5'\n}\n\n重要提示: 如果您使用 Spring Boot,只需添加 spring-boot-starter-actuator 和 micrometer-registry-prometheus 即可——Spring Boot 会自动配置 MeterRegistry。
3. 快速入门——最小工作示例
\n\n让我们创建一个简单的控制台应用程序,用于收集指标并以 Prometheus 格式导出。
\n\nimport io.micrometer.core.instrument.Counter;\nimport io.micrometer.core.instrument.MeterRegistry;\nimport io.micrometer.prometheus.PrometheusConfig;\nimport io.micrometer.prometheus.PrometheusMeterRegistry;\n\npublic class QuickStart {\n public static void main(String[] args) throws InterruptedException {\n // 1. 创建 Prometheus 指标注册表\n PrometheusMeterRegistry registry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);\n\n // 2. 创建一个计数器\n Counter counter = Counter.builder("my.counter")\n .description("示例计数器")\n .tag("env", "test")\n .register(registry);\n\n // 3. 在循环中递增计数器\n for (int i = 0; i < 5; i++) {\n counter.increment();\n Thread.sleep(1000);\n }\n\n // 4. 以 Prometheus 格式输出指标\n System.out.println("=== Prometheus Metrics ===");\n System.out.println(registry.scrape());\n }\n}\n\n控制台输出:
\n=== Prometheus Me