该技能用于解决 Micrometer 指标标签基数失控问题:当 URI、ID 等动态值被直接作为标签时,会产生海量唯一指标组合,可能引发 OutOfMemoryError 并推高监控成本。适用场景包括给指标添加标签时确保基数有界、归一化高基数数据(URI、ID)、排查指标增长。不适用于真正无界的数据(应使用分布式追踪)或逐请求细节(应使用结构化日志)。
主要能力包括:安全标签与危险标签的区分(低基数如 HTTP 方法、状态类、环境;高基数如用户 ID、请求 ID、完整 URI);经验阈值,单个指标组合建议少于 1000,应用整体活跃指标少于 10000;URI 归一化(去掉查询参数,将数字替换为 {id}、UUID 替换为 {uuid});业务维度归一化(如把供应商按量级归入 enterprise、mid-market、direct、standard);通过 MeterFilter 设置基数上限,例如 MeterFilter.maximumAllowableTags("http.server.requests", "uri", 100, MeterFilter.deny());以及用定时任务监控 registry.getMeters().size(),超过阈值记录日志并注册 Gauge。替代方案是把 user.id 等放入 tracing span 或 MDC 日志,而非指标标签。
必要用法示例:.tag("status.class", "2xx")、.tag("env", "production")、registry.getMeters().size()、MeterFilter.maximumAllowableTags(...)。
限制:需要 Spring Boot 2.1+、spring-boot-starter-actuator、Java 11+,使用追踪时需 micrometer-tracing-bridge-otel。资料以 Java 示例为主,未提供 Python 实现细节,官方文档与安装命令暂未提供。