Quarkus应用使用Otel Java Agent如何排除GET /metrics请求上报至Datadog
解决Quarkus+OpenTelemetry Agent上报冗余/metrics链路的问题
你遇到的问题是Quarkus内部定时触发的GET /metrics请求被Otel Agent捕获并上报到Datadog,导致链路数据冗余,之前的排除配置无效是因为路径不匹配(你配置的是/q/metrics,但实际请求路径是/metrics)。以下是几种可行的解决方法:
方法1:修正OpenTelemetry Agent的排除URL配置
直接针对实际请求路径配置排除规则,Otel Java Agent支持ANT风格通配符,可选择以下任一配置:
- 精确匹配单个路径:
OTEL_INSTRUMENTATION_HTTP_SERVER_EXCLUDED_URLS=/metrics - 匹配所有以/metrics开头的路径(如果有变体):
OTEL_INSTRUMENTATION_HTTP_SERVER_EXCLUDED_URLS=/metrics*
配置后重启应用,确保Agent能正确读取到该环境变量。可通过添加OTEL_LOG_LEVEL=debug查看Agent日志,确认排除规则是否加载生效。
方法2:从根源禁用Quarkus的定时metrics采集
如果不需要Quarkus每隔10秒自动采集metrics,可直接在application.properties中关闭相关配置:
# 关闭所有metrics导出 quarkus.micrometer.export.enabled=false # 或者仅关闭Prometheus风格的scrape定时任务(如果是这个触发的请求) quarkus.micrometer.prometheus.scrape.enabled=false
这样就不会产生GET /metrics请求,从源头消除冗余链路。
方法3:在Otel Collector层面过滤冗余链路
如果Agent端配置仍不生效,可在Otel Collector中添加过滤规则,丢弃路径为/metrics的HTTP服务器跨度:
在Collector的配置文件中添加filter处理器:
processors: filter: spans: exclude: match_type: regexp attributes: - key: http.target value: "^/metrics$"
然后在service.pipelines.traces.processors中引入该处理器,确保链路在转发到Datadog前被过滤。
内容的提问来源于stack exchange,提问作者Ram
相关产品推荐
相关产品推荐

