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

Spring Boot Actuator采集Prometheus指标不全,是否存在配置限制?

Spring Boot Actuator Prometheus 指标丢失问题解决

问题根因

你遇到的是Micrometer标签基数限制导致的指标丢失。Micrometer作为Spring Boot指标收集的底层框架,为避免高基数标签(比如uri)引发Prometheus存储、查询性能下降,默认对每个指标的标签值数量(基数)做了限制。当API数量超过该限制时,新API请求对应的uri标签值会被标记为unknown,不会生成独立的指标条目,最终表现为Prometheus无法采集到后续API的指标。

解决方案

1. 通过配置文件全局调整标签基数限制

直接在application.yml或application.properties中配置全局最大标签基数,设置为大于你的API总数(比如350):

YAML格式:

management:
  metrics:
    tags:
      maximum-cardinality: 350
    distribution:
      percentiles-histogram:
        http:
          server:
            requests: true

Properties格式:

management.metrics.tags.maximum-cardinality=350
management.metrics.distribution.percentiles-histogram.http.server.requests=true

2. 自定义MeterFilter单独调整HTTP请求的uri标签基数

如果不想全局调整所有指标的基数限制,可编写配置类,仅针对http_server_requests指标的uri标签设置更高的基数:

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;

@Configuration
public class MetricsConfig {
    @Bean
    public MeterFilter uriCardinalityFilter() {
        return new MeterFilter() {
            @Override
            public Meter.Id map(Meter.Id id) {
                if ("http_server_requests".equals(id.getName())) {
                    return id.withTag("uri", id.getTag("uri"));
                }
                return id;
            }

            @Override
            public MeterFilterReply accept(Meter.Id id) {
                if ("http_server_requests".equals(id.getName())) {
                    // 设置uri标签最大基数为350,可根据实际API数量调整
                    return MeterFilterReply.accept(id, "uri", 350);
                }
                return MeterFilterReply.accept();
            }
        };
    }
}

3. 过滤不需要采集的指标节省基数空间

如果部分API(比如Actuator自身端点、健康检查接口)无需采集指标,可通过MeterFilter过滤这些请求,减少uri标签的基数占用:

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;

@Configuration
public class MetricsFilterConfig {
    @Bean
    public MeterFilter unwantedUriFilter() {
        return MeterFilter.deny(id -> {
            if ("http_server_requests".equals(id.getName())) {
                String uri = id.getTag("uri");
                return uri != null && (uri.startsWith("/actuator/") || uri.equals("/health"));
            }
            return false;
        });
    }
}

验证方法

修改配置后重启应用,调用所有300个API接口,访问/actuator/prometheus端点,搜索http_server_requests_seconds_count等指标,确认是否包含所有API的uri标签值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 21:46:13