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

Spring Boot无法使用Actuator,自定义Prometheus指标不显示如何解决?

问题解决:自定义Prometheus Counter指标无法在端点显示的方案

你的问题根源在于混用了两套独立的Prometheus指标体系:你通过Micrometer的PrometheusMeterRegistry暴露端点,但自定义指标用的是Prometheus原生simpleclient的API创建,后者并未注册到Micrometer的注册表中,因此scrape()无法获取到这些指标。以下是两种可行的解决方法:


方法一:改用Micrometer API创建自定义指标(推荐)

Micrometer是Spring Boot默认的指标抽象层,和你现有的PrometheusMeterRegistry完全兼容,直接用它创建指标即可自动注册到目标注册表:

import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.Metrics;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class YourService {
    // 方式1:通过构造函数注入Registry创建
    private final Counter requests;

    public YourService(PrometheusMeterRegistry prometheusRegistry) {
        // 初始化带默认标签的Counter
        this.requests = prometheusRegistry.counter("requests_total", "someLabel", "initialValue");
    }

    // 方式2:使用全局Metrics注册表(你的配置已将PrometheusMeterRegistry加入全局)
    public void someMethod() {
        // 动态指定标签值并计数
        Metrics.counter("requests_total", "someLabel", "dynamicLabelValue").increment();
        
        // 如果是固定标签,直接用初始化好的Counter
        // requests.increment();
    }
}

方法二:将原生Prometheus指标注册到Micrometer Registry

如果必须保留原生simpleclient的代码,需要手动将原生指标注册到Micrometer的PrometheusMeterRegistry中:

1. 确保依赖完整

确认simpleclient依赖已添加(simpleclient_hotspot已包含该依赖,可显式声明避免版本冲突):

<dependency>
    <groupId>io.prometheus</groupId>
    <artifactId>simpleclient</artifactId>
    <version>0.16.0</version>
</dependency>

2. 修改指标注册逻辑

不要直接调用原生register(),而是将指标注册到Micrometer管理的Prometheus注册表:

import io.prometheus.client.Counter;
import io.micrometer.prometheus.PrometheusMeterRegistry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import javax.annotation.PostConstruct;

@Component
public class YourService {
    private Counter requests;

    @Autowired
    private PrometheusMeterRegistry prometheusRegistry;

    @PostConstruct
    public void initPrometheusMetrics() {
        // 将原生Counter注册到Micrometer管理的Prometheus注册表
        requests = Counter.build()
                .name("requests_total")
                .help("Total requests.")
                .labelNames("someLabel")
                .register(prometheusRegistry.getPrometheusRegistry());
    }

    public void someMethod() {
        requests.labels("someLabel").inc();
    }
}

验证

修改完成后重启应用,调用someMethod()触发计数,再访问https://localhost:8003/prometheus即可看到requests_total指标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 14:50:22