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

如何让Prometheus报告实际路径参数(如/v2/account)的监控指标?

解决网关层按实际EndPoint生成Prometheus监控指标的问题

针对你的场景,完全可以通过自定义Micrometer的URI标签解析逻辑来实现按实际路径(如/v2/account、/v2/customer)生成监控指标,以下是两种适配不同网关类型的具体方案:

方案一:自定义Micrometer UriTagProvider(通用Spring Boot网关)

Micrometer默认的DefaultUriTagProvider会保留路径模板(如/v2/{endPoint}),我们可以自定义一个标签解析器,提取实际的endPoint并替换模板路径:

1. 实现自定义UriTagProvider

import io.micrometer.core.instrument.Tag;
import io.micrometer.core.instrument.http.HttpRequest;
import io.micrometer.core.instrument.http.UriTagProvider;
import org.springframework.stereotype.Component;

import java.util.List;

@Component
public class GatewayUriTagProvider implements UriTagProvider {
    // 你的有限endPoint集合,可根据实际情况调整
    private static final List<String> ALLOWED_ENDPOINTS = List.of("account", "customer", "order");

    @Override
    public List<Tag> httpRequestTags(HttpRequest request) {
        String path = request.path();
        // 匹配/v2/{endPoint}格式的路径
        if (path.startsWith("/v2/")) {
            String[] pathSegments = path.split("/", 3);
            if (pathSegments.length >= 3) {
                String endPoint = pathSegments[2];
                // 校验endPoint是否在白名单内,避免生成无效指标
                if (ALLOWED_ENDPOINTS.contains(endPoint)) {
                    return List.of(Tag.of("uri", "/v2/" + endPoint));
                }
            }
        }
        // 不符合规则的路径,沿用默认逻辑
        return UriTagProvider.super.httpRequestTags(request);
    }
}

2. 配置Micrometer使用自定义Provider

创建配置类替换默认的URI标签处理逻辑:

import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.core.instrument.binder.http.HttpMetrics;
import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MetricsConfig {
    @Bean
    public MeterRegistryCustomizer<MeterRegistry> meterRegistryCustomizer(GatewayUriTagProvider uriTagProvider) {
        return registry -> HttpMetrics.builder()
                .uriTagProvider(uriTagProvider)
                .register(registry);
    }
}

方案二:Spring Cloud Gateway专属配置

如果你的网关是Spring Cloud Gateway,除了方案一,还可以通过自定义网关过滤器直接添加服务维度的监控标签:

1. 自定义GatewayMetricsFilter

import org.springframework.cloud.gateway.filter.GatewayFilter;
import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory;
import org.springframework.stereotype.Component;
import io.micrometer.core.instrument.Metrics;

@Component
public class ServiceMetricsFilter extends AbstractGatewayFilterFactory<ServiceMetricsFilter.Config> {

    public ServiceMetricsFilter() {
        super(Config.class);
    }

    @Override
    public GatewayFilter apply(Config config) {
        return (exchange, chain) -> {
            String path = exchange.getRequest().getPath().toString();
            if (path.startsWith("/v2/")) {
                String endPoint = path.split("/")[2];
                // 生成自定义的网关请求指标,包含服务名和实际路径标签
                Metrics.counter("gateway.service.requests", 
                        "service_name", endPoint + "-service", 
                        "uri", path)
                      .increment();
            }
            return chain.filter(exchange);
        };
    }

    // 过滤器配置类(按需添加参数)
    public static class Config {}
}

2. 在路由中绑定过滤器

在application.yml中给对应路由添加该过滤器:

spring:
  cloud:
    gateway:
      routes:
        - id: account-service-route
          uri: lb://account-service
          predicates:
            - Path=/v2/account/**
          filters:
            - ServiceMetricsFilter
        - id: customer-service-route
          uri: lb://customer-service
          predicates:
            - Path=/v2/customer/**
          filters:
            - ServiceMetricsFilter

验证配置

  1. 确保Actuator的Prometheus端点开启:
management:
  endpoints:
    web:
      exposure:
        include: prometheus
  1. 访问网关的/actuator/prometheus端点,查看http_server_requests_seconds_*(方案一)或gateway_service_requests_total(方案二)指标,确认uri或service_name标签已显示实际的endPoint值。

注意:如果endPoint集合后续有扩展,记得同步更新白名单或路由配置,避免监控指标遗漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 07:55:43