Quarkus 3.2.3中Reactive Routes的Prometheus指标收集问题
解决Quarkus响应式路由端点未出现在Prometheus指标中的问题
1. 先检查基础配置与依赖
确保quarkus-micrometer-registry-prometheus依赖正确引入,然后在application.properties中开启Vert.x Web的监控支持(默认不会自动采集响应式路由指标):
# 开启Vert.x Web的Micrometer监控采集 quarkus.micrometer.vertx-web.enabled=true # 启用Prometheus指标导出 quarkus.micrometer.export.prometheus.enabled=true # 配置Prometheus指标暴露路径 quarkus.micrometer.export.prometheus.path=/q/metrics
2. 配置不生效?手动添加指标拦截器
如果上述配置仍未生效,可以通过全局路由拦截器手动为@Route端点采集指标:
import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.Timer; import io.quarkus.vertx.web.RouteFilter; import io.vertx.ext.web.RoutingContext; import jakarta.inject.Inject; public class RouteMetricsInterceptor { @Inject MeterRegistry meterRegistry; @RouteFilter(100) // 设置高优先级,确保在业务逻辑前执行 public void recordRequestMetrics(RoutingContext ctx) { String requestMethod = ctx.request().method().name(); // 剔除查询参数,避免不同参数值生成重复指标 String cleanPath = ctx.normalizedPath().contains("?") ? ctx.normalizedPath().split("\\?")[0] : ctx.normalizedPath(); Timer.Sample timerSample = Timer.start(meterRegistry); // 请求结束后记录指标 ctx.addEndHandler(v -> { int responseStatus = ctx.response().getStatusCode(); timerSample.stop(Timer.builder("http.server.requests") .tag("method", requestMethod) .tag("uri", cleanPath) .tag("status", String.valueOf(responseStatus)) .register(meterRegistry)); }); ctx.next(); } }
3. 验证指标是否生成
启动应用后,直接访问/q/metrics端点,搜索http_server_requests指标,查看是否包含/something路径对应的条目。若仍未出现,检查拦截器是否在Quarkus扫描范围内(需放在应用包路径下),或是否有其他路由过滤器优先级冲突。
内容的提问来源于stack exchange,提问作者Денис Анд
相关产品推荐
相关产品推荐

