Micrometer 指标采集
在 Java 生态中,Micrometer 是事实上的指标采集标准 API。它将 Spring Boot、Dropwizard Metrics 等框架的指标抽象为统一接口,允许开发者编写一次指标代码,同时输出到 Prometheus、Datadog、CloudWatch 等多个监控系统。Micrometer 的定位类似于 SLF4J 在日志领域的作用——解耦应用代码与监控后端。
Micrometer 的核心概念是 Meter(计量器),它是所有指标的抽象基类。根据测量类型不同,Meters 分为:Counter、Gauge、Timer、DistributionSummary、LongTaskTimer、MultiGauge 等。每种 Meter 对应特定的测量场景。
核心 API 使用
Micrometer 的 API 设计简洁直观。以下是四种基本 Meter 的使用示例:
标签设计规范
标签(Tags/Labels)是 Micrometer 中最重要的概念,決定了指标的维度划分。良好的标签设计应该遵循以下规范:
层次分明:使用多级标签而非单一复合标签。好的设计:uri="/api/users"、status="200";不好的设计:uri_status="/api/users-200"。多级标签支持灵活的组合查询,而复合标签无法拆分。
基数可控:避免高基数字段作为标签值,如用户 ID、会话 ID。标签基数过高会导致 Prometheus 的内存压力急剧上升。一个标签的基数应该与其分析价值相匹配:服务名、端点名是低基数的,分析价值高;用户 ID 是高基数的,不应作为标签。
命名统一:使用点分隔的全小写命名,如 http.server.requests。避免混合大小写或驼峰命名。