Micrometer 1.13.0指标名称声明错误导致Prometheus采集失败
问题解决:Micrometer 1.13.0 jvm_info指标格式导致Prometheus采集失败
问题背景
Micrometer 1.13.0对jvm_info指标做了格式变更,将原本的gauge类型改为Prometheus的info类型,但Prometheus 2.53.0及以下版本不支持info类型,会抛出invalid metric type "info"错误,导致指标采集失败。
已知解决方案/规避措施
1. 升级Prometheus到2.54.0及以上版本
Prometheus从2.54.0版本开始正式支持info类型指标,升级后可直接兼容Micrometer 1.13.0的新格式,无需额外配置。
2. 强制将jvm_info指标类型改回gauge
如果暂时无法升级Prometheus,可通过自定义MeterFilter强制修改指标类型:
import io.micrometer.core.instrument.config.MeterFilter; import io.micrometer.prometheusmetrics.PrometheusMeterRegistry; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class PrometheusMetricConfig { @Bean public MeterRegistryCustomizer<PrometheusMeterRegistry> prometheusTypeFixCustomizer() { return registry -> registry.config().meterFilter(new MeterFilter() { @Override public Type type(String id, Type type) { if ("jvm_info".equals(id.getName())) { return Type.GAUGE; } return type; } }); } }
3. 禁用默认jvm_info,自定义兼容旧格式的指标
先通过配置禁用默认指标:
management.metrics.enable.jvm.info=false
然后自定义一个gauge类型的jvm_info指标:
import io.micrometer.core.instrument.Gauge; import io.micrometer.core.instrument.MeterRegistry; import org.springframework.context.annotation.Configuration; import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; @Configuration public class CustomJvmInfoMetric { public CustomJvmInfoMetric(MeterRegistry registry) { RuntimeMXBean runtimeMXBean = ManagementFactory.getRuntimeMXBean(); Gauge.builder("jvm_info", () -> 1.0) .tag("runtime", runtimeMXBean.getVmName()) .tag("vendor", runtimeMXBean.getVmVendor()) .tag("version", runtimeMXBean.getVmVersion()) .description("JVM version info") .register(registry); } }
补充说明
该变更是Micrometer 1.13版本的既定变更,目的是对齐Prometheus官方指标规范,但由于Prometheus版本兼容性问题导致采集失败,上述方案均可有效解决。
内容的提问来源于stack exchange,提问作者Eli Skoran
相关产品推荐
相关产品推荐

