You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 2.X集成Micrometer/Prometheus自定义指标不显示问题

问题解决:Spring Boot 2.X自定义Micrometer指标未在Prometheus端点显示

核心问题为手动实例化了独立的CompositeMeterRegistry与PrometheusMeterRegistry,而Spring Boot Actuator的/actuator/prometheus端点只会读取Spring容器自动管理的MeterRegistry实例中注册的指标,两者完全隔离,因此自定义的指标不会被暴露。

1. 补全必要依赖

确保build.gradle中同时包含Actuator和Prometheus注册器依赖:

implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-registry-prometheus:latest.release'

2. 调整配置文件

在application.properties或application.yml中暴露Prometheus端点:

# 暴露prometheus端点
management.endpoints.web.exposure.include=prometheus
# 可选配置:开启全局指标标签,方便多实例指标聚合
management.metrics.tags.application=${spring.application.name}

3. 调整代码实现

无需手动创建MeterRegistry实例,直接注入Spring自动管理的实例即可:

import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Timer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.time.Duration;

@Component
public class CustomMetricService {

    // 直接注入Spring自动配置的MeterRegistry,内部已自动组合Prometheus注册器
    @Autowired
    private MeterRegistry meterRegistry;

    public void doSomethingWithMetric() {
        long start = System.currentTimeMillis();

        doSomething();

        long duration = System.currentTimeMillis() - start;

        // 注册并记录Timer
        Timer timer = 
            Timer.builder("test.times")
                .publishPercentiles(0.5, 0.75, 0.95)
                // 注意:最大/最小预期值不要设为相同,会影响统计准确性,建议按实际业务耗时调整
                .maximumExpectedValue(Duration.ofSeconds(15))
                .minimumExpectedValue(Duration.ofMillis(10))
                .register(meterRegistry);
        timer.record(duration, TimeUnit.MILLISECONDS);
        meterRegistry.timer("test.times.new").record(duration, TimeUnit.MILLISECONDS);
        
        // 注册Gauge
        AtomicInteger test = meterRegistry.gauge("custom.gauge", new AtomicInteger(8));
        test.set(30);
        
        // 注册并递增Counter
        meterRegistry.counter("custom.counter").increment();
    }
}

效果验证

重启服务后触发一次上述业务方法的执行,再次访问/actuator/prometheus即可看到所有自定义指标。

内容的提问来源于stack exchange,提问作者prix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 16:15:03