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

Spring Boot集成OpenTelemetry+Jaeger v2:Kafka Span未显示问题

解决Spring Boot + OpenTelemetry + Jaeger v2 中Kafka链路追踪Span缺失问题

核心排查与修复步骤

1. 补充Kafka专属Instrumentation依赖

当前仅引入opentelemetry-spring-boot-starter不足以自动捕获Kafka链路,需添加对应版本的Kafka客户端 instrumentation 依赖到pom.xml:

<dependency>
    <groupId>io.opentelemetry.instrumentation</groupId>
    <artifactId>opentelemetry-kafka-clients-2.6</artifactId>
    <scope>runtime</scope>
</dependency>

注意:artifactId中的版本号需与项目实际使用的kafka-clients版本匹配(如用Kafka 3.0+则替换为opentelemetry-kafka-clients-3.0),且需保证该版本与opentelemetry-instrumentation-bom的2.6.0版本兼容。此前手动添加kafka-clients导致项目结构异常,建议先移除手动添加的kafka-clients依赖,由Spring Boot依赖管理自动适配版本。

2. 修正配置参数

调整application.yml中的两处关键配置:

  • 移除resource.attributes下重复的service属性,仅保留service.name避免冲突:
    otel:
      resource:
        attributes:
          service.name: acq-txn-processor
    
  • 添加传播协议配置,明确使用W3C Trace Context确保链路传递:
    otel:
      propagators: tracecontext,baggage
    

3. 规范Java Agent使用(若启用)

若使用Java Agent方式,必须保证agent版本与opentelemetry依赖版本完全一致(均为2.6.0),VM启动参数示例:

-javaagent:path/to/opentelemetry-javaagent-2.6.0.jar

注意:opentelemetry-spring-boot-starter与Java Agent二选一即可,同时使用可能引发重复 instrumentation 问题。

4. 清理冲突依赖

移除所有micrometer-opentracing相关依赖,@NewSpan属于OpenTracing体系,与当前OpenTelemetry方案完全不兼容,会干扰链路捕获逻辑。

5. 验证Kafka客户端使用方式

确保代码中通过Spring Kafka的KafkaTemplate发送消息、@KafkaListener消费消息,而非手动创建KafkaProducer/KafkaConsumer实例——OpenTelemetry的自动 instrumentation 基于标准Kafka客户端拦截器实现,手动创建客户端会绕过拦截器导致Span丢失。

验证方法

  1. 重启服务后发送一条Kafka消息
  2. 在Jaeger UI中筛选acq-txn-processor服务,检查是否出现kafka.producer/kafka.consumer类型的Span
  3. 若问题仍存在,开启OpenTelemetry调试日志排查:
    logging:
      level:
        io.opentelemetry: debug
    
    查看日志中是否有Kafka instrumentation初始化信息,或拦截器加载失败的报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 22:06:07