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

如何在Spring Boot中为Prometheus目标添加标签?

在Spring Boot端为Prometheus指标添加自定义标签的可行方案

1. 检查基础配置与依赖

首先确认你的Spring Boot版本和Micrometer依赖是否正确:

  • 必须引入spring-boot-starter-actuator和micrometer-registry-prometheus依赖
  • 对于Spring Boot 2.2及以上版本,management.metrics.tags默认给所有Micrometer指标添加全局标签,若未生效,检查是否开启了Prometheus端点:
    management:
      endpoints:
        web:
          exposure:
            include: prometheus # 必须暴露prometheus端点
      metrics:
        tags:
          application: ${spring.application.name}
          threadLimitInPrometheus: 40
    
    若仍未生效,可能是自定义MeterFilter覆盖了全局标签,可采用下面的自定义MeterFilter方案。

2. 自定义MeterFilter实现全局标签

通过注册MeterFilter Bean,可强制给所有指标添加自定义标签,优先级更高,能确保标签生效:

import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.config.MeterFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

@Configuration
public class MetricsConfig {

    private final Environment env;

    public MetricsConfig(Environment env) {
        this.env = env;
    }

    @Bean
    public MeterFilter addCustomTags() {
        return new MeterFilter() {
            @Override
            public Meter.Id map(Meter.Id id) {
                return id.withTags(
                    "application", env.getProperty("spring.application.name"),
                    "threadLimitInPrometheus", "40"
                );
            }
        };
    }
}

3. 为特定指标添加标签

如果仅需给某类指标(比如线程池相关)添加标签,可自定义MeterBinder创建带标签的指标:

import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.Tags;
import io.micrometer.core.instrument.binder.MeterBinder;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.env.Environment;

@Configuration
public class ThreadPoolMetricsConfig {

    private final Environment env;

    public ThreadPoolMetricsConfig(Environment env) {
        this.env = env;
    }

    @Bean
    public MeterBinder threadLimitMetrics() {
        return (registry) -> {
            registry.gauge("thread.pool.limit",
                Tags.of("application", env.getProperty("spring.application.name")),
                40);
        };
    }
}

验证方式

访问/actuator/prometheus端点,查看返回的指标是否包含你添加的自定义标签即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 08:25:20