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

Quarkus原生编译集成Jaeger追踪部署K8s时JDBC URL识别异常

Quarkus Native镜像接入Jaeger时JDBC URL丢失tracing前缀问题排查

问题描述

  • 应用基于Quarkus开发,编译为Native原生镜像同时接入Jaeger Tracing实现分布式链路监控时,在OpenTracing适配阶段出现URL读取错误
  • 本地运行模式下功能完全正常,部署到Kubernetes集群后触发配置加载异常:运行日志显示实际生效的JDBC URL缺失tracing标识段,但日志打印的已加载配置项明确显示读取到了application.properties中配置的正确URL值
  • 代码及其他配置位置无该参数硬编码,所有配置均直接从application.properties文件读取

问题相关application.properties配置

quarkus.datasource.db-kind=oracle
quarkus.datasource.jdbc.driver=io.opentracing.contrib.jdbc.TracingDriver
quarkus.datasource.jdbc.url=jdbc:tracing:oracle:thin:@172.28.2.134:1522/IVR
quarkus.datasource.username=${USERNAME_CONNECTION_BD:xxxxxxxxxxxxx}
quarkus.datasource.password=${PASSWORD_CONNECTION_BD:xxxxxxxxxx}
quarkus.http.port=${PORT:8082}
quarkus.http.ssl-port=${PORT-SSl:8083}
quarkus.jaeger.service-name=find-puk-code-tracing
quarkus.jaeger.sampler-type=const
quarkus.jaeger.sampler-param=1
quarkus.jaeger.endpoint=${URL_JAEGER:http://10.161.169.24:14268/api/traces}
quarkus.native.add-all-charsets=true
quarkus.swagger-ui.path=/api/FindPukCodeBS/swagger-ui
quarkus.smallrye-openapi.path=/api/FindPukCodeBS/swagger
quarkus.swagger-ui.always-include=true

根因分析

这个问题是Quarkus Native构建的静态预处理逻辑和手动配置的OpenTracing JDBC驱动冲突导致:

  1. Quarkus Native镜像在构建阶段会对Agroal连接池的JDBC配置做静态解析,自动识别URL中的驱动前缀做元数据初始化
  2. 当手动指定驱动为io.opentracing.contrib.jdbc.TracingDriver、URL带jdbc:tracing:自定义前缀时,构建阶段的Agroal扩展会把tracing段判定为非标准驱动前缀,自动剥离该段后拼接底层Oracle驱动的标准前缀jdbc:oracle:,这个逻辑仅在Native构建时执行,因此本地JVM运行模式不会触发
  3. 配置打印和实际运行值不一致,是因为Native镜像中配置日志的打印时机早于构建时预处理后的配置生效时机,打印的是原始读取到的配置值,而非实际运行时使用的处理后值

修复方案

  • 优先使用Quarkus官方的链路埋点方案,不需要手动引入opentracing-contrib的JDBC驱动:
    • 删除配置项quarkus.datasource.jdbc.driver=io.opentracing.contrib.jdbc.TracingDriver
    • 将JDBC URL改回Oracle标准格式:quarkus.datasource.jdbc.url=jdbc:oracle:thin:@172.28.2.134:1522/IVR
    • Quarkus Jaeger扩展会自动对Agroal连接池做链路埋点,无需手动修改URL加tracing前缀即可实现JDBC调用链路上报
  • 如果有自定义需求必须手动使用TracingDriver,需要在配置中添加Native构建参数,强制TracingDriver在运行时初始化,避免构建阶段预处理URL:
    quarkus.native.additional-build-args=--initialize-at-run-time=io.opentracing.contrib.jdbc.TracingDriver
    
  • 额外排查K8s部署环境的配置覆盖:Quarkus配置优先级中环境变量高于application.properties,检查集群中是否注入了QUARKUS_DATASOURCE_JDBC_URL同名环境变量,部分场景下环境变量注入时机晚于配置日志打印时机,也会出现打印值和实际运行值不符的问题

内容的提问来源于stack exchange,提问作者Cesar Justo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:54:20