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

Prometheus中相同URL高基数问题:如何聚合动态路径指标?

解决Micrometer动态路径导致的Prometheus高基数问题

完全可以通过自定义Micrometer的请求标签生成逻辑,将带动态code参数的路径统一聚合为同一维度,具体实现分两种场景:

Spring MVC 场景

  1. 自定义WebMvcTagsProvider,重写路径解析逻辑
    创建继承自DefaultWebMvcTagsProvider的自定义类,用正则替换动态code部分:
import io.micrometer.core.instrument.Tags;
import io.micrometer.spring.web.servlet.DefaultWebMvcTagsProvider;
import jakarta.servlet.http.HttpServletRequest;
import java.util.regex.Pattern;

public class CustomWebMvcTagsProvider extends DefaultWebMvcTagsProvider {
    private static final Pattern DYNAMIC_CODE_PATTERN = Pattern.compile("/api/\\d+/authvalue");

    @Override
    protected String resolveUri(HttpServletRequest request, Object handler) {
        String originalUri = super.resolveUri(request, handler);
        // 将/api/数字/authvalue替换为统一占位符路径
        return DYNAMIC_CODE_PATTERN.matcher(originalUri).replaceAll("/api/xxxx/authvalue");
    }
}
  1. 注册自定义Bean
    在配置类中将自定义WebMvcTagsProvider注册为Spring Bean:
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.micrometer.spring.web.servlet.WebMvcTagsProvider;

@Configuration
public class MicrometerMetricConfig {
    @Bean
    public WebMvcTagsProvider webMvcTagsProvider() {
        return new CustomWebMvcTagsProvider();
    }
}

WebFlux 场景

如果是响应式WebFlux环境,逻辑类似,自定义WebFluxTagsProvider即可:

import io.micrometer.spring.web.reactive.DefaultWebFluxTagsProvider;
import org.springframework.web.server.ServerWebExchange;
import java.util.regex.Pattern;

public class CustomWebFluxTagsProvider extends DefaultWebFluxTagsProvider {
    private static final Pattern DYNAMIC_CODE_PATTERN = Pattern.compile("/api/\\d+/authvalue");

    @Override
    protected String resolveUri(ServerWebExchange exchange) {
        String originalUri = super.resolveUri(exchange);
        return DYNAMIC_CODE_PATTERN.matcher(originalUri).replaceAll("/api/xxxx/authvalue");
    }
}

注册Bean:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import io.micrometer.spring.web.reactive.WebFluxTagsProvider;

@Configuration
public class MicrometerMetricConfig {
    @Bean
    public WebFluxTagsProvider webFluxTagsProvider() {
        return new CustomWebFluxTagsProvider();
    }
}

扩展说明

  • 如果有多个需要聚合的动态路径,可扩展正则表达式,比如Pattern.compile("/api/\\d+/authvalue|/user/\\d+/info")
  • 这种方式会统一修改Micrometer生成的uri标签值,Prometheus接收到的指标会将所有匹配的请求聚合到同一维度,彻底解决高基数问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 00:30:55