Quarkus Reactive SQL Client是否支持链路追踪?配置后未生成查询Span
Quarkus Reactive Postgres Client 链路追踪问题解析与解决方案
核心结论
Quarkus的Reactive Postgres Client不支持你当前配置的JDBC链路追踪方案,因为它不属于JDBC实现,JDBC相关的追踪配置对它完全无效。
原因分析
组件本质差异:
- 你配置的
quarkus.datasource.jdbc.tracing=true和io.opentracing.contrib:opentracing-jdbc依赖,都是针对传统JDBC数据源的追踪方案。 - Reactive Postgres Client是基于Netty的异步非JDBC客户端,底层不依赖JDBC API,因此JDBC追踪逻辑无法捕获它的查询请求。
- Flyway能生成Span是因为它使用的是JDBC数据源,和业务层的Reactive Client是完全独立的组件。
- 你配置的
官方支持现状:
- Quarkus官方文档中,JDBC链路追踪确实仅针对非Reactive数据源。Reactive Postgres Client的追踪支持需要依赖OpenTelemetry或特定的OpenTracing集成,而非JDBC追踪体系。
解决方案
方案1:切换到OpenTelemetry集成(推荐)
OpenTelemetry是Quarkus官方主推的追踪方案,能自动支持Reactive Postgres Client的Span生成,同时兼容Datadog:
- 依赖调整:
移除io.opentracing.contrib:opentracing-jdbc,添加以下Gradle依赖:implementation "io.quarkus:quarkus-opentelemetry" implementation "io.quarkus:quarkus-opentelemetry-exporter-otlp" - 配置调整:
在application.properties中添加:quarkus.opentelemetry.tracer.exporter.otlp.endpoint=http://${DD_AGENT_HOST}:4317 quarkus.opentelemetry.tracer.exporter.otlp.protocol=grpc - 启动参数简化:
移除JDBC相关的Datadog参数(如dd.integration.jdbc-datasource.enabled=true),保留Datadog Agent相关配置即可,OpenTelemetry会自动处理所有追踪逻辑。
方案2:手动实现OpenTracing追踪(不推荐)
如果坚持使用OpenTracing,需要手动为Reactive Postgres Client的查询添加Span:
- 在每个查询方法中,手动创建并激活Span,关联到当前追踪上下文:
@Inject Tracer tracer; public Uni<MyEntity> findById(Long id) { Span span = tracer.buildSpan("reactive-pg-query") .withTag("db.statement", "SELECT * FROM my_entity WHERE id = $1") .withTag("db.type", "postgresql") .start(); try (Scope scope = tracer.activateSpan(span)) { return client.preparedQuery("SELECT * FROM my_entity WHERE id = $1") .execute(Tuple.of(id)) .map(row -> row.map(MyEntity.class)) .onItem().invoke(() -> span.finish()) .onFailure().invoke(e -> { span.setTag(Tags.ERROR, true); span.log(Map.of(Fields.ERROR_OBJECT, e)); span.finish(); }); } } - 这种方式需要手动维护所有查询的Span,工作量大且容易遗漏。
验证步骤
- 部署更新后的服务,发起包含Reactive Postgres查询的请求。
- 查看Datadog的APM面板,确认是否生成了
reactive-pg-client相关的Span。 - 检查Datadog Agent的OTLP接收端口(默认4317)是否正常监听。
内容的提问来源于stack exchange,提问作者GeauxEric
相关产品推荐
相关产品推荐

