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

Spring Boot 3中如何向Prometheus Pushgateway推送指标?

解决Spring Boot向Prometheus PushGateway推送指标的问题

核心问题分析

你当前的误区是混淆了Micrometer的MeterRegistry和Prometheus simpleclient的CollectorRegistry,同时没必要手动初始化PushGateway——Spring Boot已经提供了自动配置能力,能帮你完成指标的收集和推送。


1. 确认依赖配置

你添加的依赖是正确的,micrometer-registry-prometheus-simpleclient已包含simpleclient基础依赖,保留simpleclient_pushgateway也无影响:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus-simpleclient</artifactId>
    <version>${micrometer-registry-prometheus.version}</version>
</dependency>
<dependency>
    <groupId>io.prometheus</groupId>
    <artifactId>simpleclient_pushgateway</artifactId>
    <version>0.16.0</version>
</dependency>

2. 完善application.properties配置

仅开启推送不够,需补充PushGateway地址、任务标识等关键配置:

# 开启PushGateway推送
management.prometheus.metrics.export.pushgateway.enabled=true
# PushGateway服务地址
management.prometheus.metrics.export.pushgateway.base-url=http://your-pushgateway-host:9091
# 推送的任务名称(Prometheus中作为job标签)
management.prometheus.metrics.export.pushgateway.job=order-service
# 定期推送间隔(可选,默认1分钟)
management.prometheus.metrics.export.pushgateway.push-interval=1m
# 推送时保留实例标签(可选)
management.prometheus.metrics.export.pushgateway.instance=${spring.application.name}:${server.port}

3. 正确创建并使用指标

不要用Prometheus simpleclient的Counter.builder,改用Micrometer原生API,配合Spring自动注入的MeterRegistry(实际是PrometheusMeterRegistry实现类):

方式一:提前初始化Counter(推荐)

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

@Component
public class MetricService {

    private final Counter timeoutCounter;

    // 构造器注入MeterRegistry,提前初始化Counter
    @Autowired
    public MetricService(MeterRegistry meterRegistry) {
        this.timeoutCounter = Counter.builder("order_service.cronjob.clean_orphan_order_drafts.timeouts.total")
                .description("Represents how many times the CleanOrphanOrderDraftsJob cronjob failed with timeout")
                .register(meterRegistry);
    }

    public void incrementCleanOrphanOrderDraftsJobTimeoutMetric() {
        timeoutCounter.increment();
    }
}

方式二:快速递增(适合简单场景)

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

@Component
public class MetricService {

    @Autowired
    private MeterRegistry meterRegistry;

    public void incrementCleanOrphanOrderDraftsJobTimeoutMetric() {
        Counter.increment(meterRegistry, "order_service.cronjob.clean_orphan_order_drafts.timeouts.total");
    }
}

4. 自动推送 vs 手动推送

  • 自动推送:配置完成后,Spring Boot的PushGatewayManager会按设置的push-interval自动推送所有Micrometer收集的指标,无需额外代码。
  • 手动推送:如果是定时任务执行后立即推送(如一次性任务),可注入PushGateway手动触发:
import io.prometheus.client.exporter.PushGateway;
import io.micrometer.prometheus.simpleclient.PrometheusMeterRegistry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class ManualPushService {

    @Autowired
    private PushGateway pushGateway;

    @Autowired
    private PrometheusMeterRegistry prometheusMeterRegistry;

    public void pushMetricsManually() throws Exception {
        // 推送当前所有指标到PushGateway
        pushGateway.push(prometheusMeterRegistry.getCollectorRegistry(), "order-service");
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 23:10:12