You need to enable JavaScript to run this app. Spring Boot中如何让@Timed生成的Histogram buckets按指定标签聚合?
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot中如何让@Timed生成的Histogram buckets按指定标签聚合?

解决方案

有两种成熟方案可以实现你的需求,不需要修改全局WebMvcTagsProvider:

方案一:应用侧通过Micrometer MeterFilter实现

直接注入自定义MeterFilter,仅针对http_server_requests_seconds_bucket指标移除不需要的标签:

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 histogramBucketTagFilter() {
        return new MeterFilter() {
            @Override
            public Meter.Id map(Meter.Id id) {
                // 仅匹配http请求的直方图桶指标
                boolean isHttpBucket = id.getName().equals("http.server.requests.seconds")
                        && id.getTags().stream().anyMatch(tag -> tag.getKey().equals("le"));
                if (isHttpBucket) {
                    return id.replaceTags(tag -> 
                        !tag.getKey().equals("exception")
                        && !tag.getKey().equals("outcome")
                        && !tag.getKey().equals("status")
                    );
                }
                return id;
            }
        };
    }
}

如果你的Micrometer版本低于1.9,调整判断逻辑,通过名称后缀匹配_bucket结尾的指标即可

方案二:Prometheus采集侧通过relabel规则实现

在Prometheus的采集任务配置中添加metricRelabelConfigs,仅针对http_server_requests_seconds_bucket指标移除不需要的标签:

scrape_configs:
  - job_name: 'spring-boot-app'
    metrics_path: '/actuator/prometheus'
    static_configs:
      - targets: ['你的应用地址:端口']
    metric_relabel_configs:
      - source_labels: [__name__]
        regex: 'http_server_requests_seconds_bucket'
        action: labeldrop
        regex: '(exception|outcome|status)'

这个方案不需要修改应用代码,所有标签过滤逻辑在Prometheus侧执行,http_server_requests_seconds_count和http_server_requests_seconds_sum指标会保留全部原有标签。

注意事项

  • 两种方案都不会影响原有全局标签逻辑,http_server_requests_seconds_count、http_server_requests_seconds_sum会完整保留exception、outcome、status标签
  • 直方图桶仅保留uri、method标签后,指标基数会大幅降低,不会影响histogram_quantile函数的计算结果,只要你计算分位数时的分组标签仅用到uri、method即可

内容的提问来源于stack exchange,提问作者I.Brok

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 04:36:03