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

如何修改Spring默认Micrometer指标的URI标签以匹配实际请求路径

如何修改Micrometer HTTP请求指标的URI标签

结论

完全可以实现,不需要创建自定义指标,通过调整Spring的请求处理配置和Micrometer的URI标签生成逻辑就能达成需求。

具体操作步骤

1. 自定义URI标签生成器

Micrometer默认用DefaultUriTagProvider生成URI标签,我们可以写个自定义的子类,专门处理你的TMS路径规则:

import io.micrometer.core.instrument.Tag;
import io.micrometer.spring.web.servlet.DefaultUriTagProvider;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.stream.Collectors;

public class CustomTmsUriTagProvider extends DefaultUriTagProvider {
    // 匹配实际请求URL的正则,提取{L}对应的实际值
    private static final Pattern TMS_REQUEST_PATTERN = Pattern.compile("^/TMS/([^/]+)/\\d+/\\d+/\\d+$");
    // 原始的模板URI
    private static final String ORIGINAL_TEMPLATE = "/TMS/{L}/{Z}/{Y}/{X}";

    @Override
    public List<Tag> httpRequestTags(HttpServletRequest request) {
        List<Tag> defaultTags = super.httpRequestTags(request);
        // 遍历标签,找到uri标签就修改
        return defaultTags.stream().map(tag -> {
            if ("uri".equals(tag.getKey()) && ORIGINAL_TEMPLATE.equals(tag.getValue())) {
                String actualRequestUri = request.getRequestURI();
                Matcher matcher = TMS_REQUEST_PATTERN.matcher(actualRequestUri);
                if (matcher.matches()) {
                    // 提取实际的L值,替换模板里的{L}
                    String actualL = matcher.group(1);
                    String newUriTag = "/TMS/" + actualL + "/{Z}/{Y}/{X}";
                    return Tag.of("uri", newUriTag);
                }
            }
            return tag;
        }).collect(Collectors.toList());
    }
}

2. 替换默认的URI标签生成器

在Spring配置类里注册自定义的生成器,让Spring用它替换默认实现:

import io.micrometer.spring.web.servlet.UriTagProvider;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MicrometerCustomConfig {
    @Bean
    public UriTagProvider uriTagProvider() {
        return new CustomTmsUriTagProvider();
    }
}

验证结果

当请求/TMS/OSM/3/4/4时,生成的指标会变成你想要的样子:

http_server_requests_seconds_sum{error="none",exception="none",method="GET",outcome="SUCCESS",status="200",uri="/TMS/OSM/{Z}/{Y}/{X}",} 3.5174407

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 01:35:10