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

Spring MVC集成Prometheus:如何生成http_server_requests_seconds_max指标

生成HTTP请求指标(如http_server_requests_seconds_max)的解决方案

1. 确认依赖配置

如果是纯Spring MVC项目,需确保引入Micrometer核心、Prometheus注册器及Web MVC监控依赖:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-core</artifactId>
    <version>适配你的Spring版本的Micrometer版本</version>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
    <version>同上版本</version>
</dependency>
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-webmvc</artifactId>
    <version>同上版本</version>
</dependency>

Spring Boot项目可直接依赖spring-boot-starter-actuator和micrometer-registry-prometheus,自动包含上述依赖。

2. 注册WebMvcMetricsFilter

修改你的PrometheusController构造方法,添加Web MVC请求监控过滤器的注册逻辑,绑定到已有的PrometheusMeterRegistry并传入自定义标签:

@Autowired
public PrometheusController(Environment env, ServletContext servletContext) {
    
    ImmutableTag tag = new ImmutableTag(env.getProperty("promotheus.metric.key.name"), env.getProperty("promotheus.metric.key.value"));
    List<Tag> tags = new ArrayList<>();
    tags.add(tag);
    
    // 保留你已有的各类Metrics注册代码
    new JvmThreadMetrics(tags).bindTo(registry);
    new JvmGcMetrics(tags).bindTo(registry);
    new JvmMemoryMetrics(tags).bindTo(registry);
    new JvmHeapPressureMetrics(tags, Duration.ofMinutes(5), Duration.ofMinutes(1)).bindTo(registry);
    
    new DiskSpaceMetrics(new File("/"), tags).bindTo(registry);
    new ProcessorMetrics(tags).bindTo(registry);
    new UptimeMetrics(tags).bindTo(registry);
    new Log4j2Metrics(tags).bindTo(registry);
    new ClassLoaderMetrics(tags).bindTo(registry);
    new JvmCompilationMetrics(tags).bindTo(registry);
    new TomcatMetrics(null, tags).bindTo(registry);
    
    // 新增:注册Web MVC HTTP请求指标过滤器
    WebMvcMetricsFilter webMvcMetricsFilter = new WebMvcMetricsFilter(
            registry,
            new DefaultWebMvcTagsProvider(), // 默认标签提供器,包含方法、路径、状态码等
            "http.server.requests", // 指标名称前缀
            tags // 全局自定义标签
    );
    
    // 将过滤器绑定到所有请求路径
    servletContext.addFilter("webMvcMetricsFilter", webMvcMetricsFilter)
            .addMappingForUrlPatterns(null, false, "/*");
}

3. 自定义请求标签(可选)

如果需要给HTTP请求指标添加额外自定义标签,可扩展DefaultWebMvcTagsProvider:

public class CustomWebMvcTagsProvider extends DefaultWebMvcTagsProvider {
    @Override
    public Iterable<Tag> getTags(HttpServletRequest request, HttpServletResponse response, Object handler, Throwable exception) {
        List<Tag> tags = new ArrayList<>(super.getTags(request, response, handler, exception));
        // 添加自定义标签示例:应用名称
        tags.add(Tag.of("app_name", "your-application-name"));
        return tags;
    }
}

替换构造方法中的标签提供器:

WebMvcMetricsFilter webMvcMetricsFilter = new WebMvcMetricsFilter(
        registry,
        new CustomWebMvcTagsProvider(),
        "http.server.requests",
        tags
);

验证

启动应用后,调用任意REST接口,再访问/prometheus端点,即可看到http_server_requests_seconds_max、http_server_requests_seconds_count、http_server_requests_seconds_sum等指标,指标会包含请求方法、路径、状态码及你自定义的全局标签。

注意事项

  • 确保Micrometer版本与Spring版本兼容,避免依赖冲突
  • Spring Boot项目可通过配置management.endpoints.web.exposure.include=prometheus自动暴露Prometheus端点并生成HTTP请求指标,无需手动注册大量Metrics类;若需自定义Registry,上述手动配置方式依然适用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 13:45:38