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
相关产品推荐
相关产品推荐

