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

Spring Boot 3 Webflux集成Micrometer Tracing无traceId/spanId输出排查

问题:WebFlux下Micrometer Tracing无法生成traceId/spanId,currentSpan为null

我正在将Spring Cloud Sleuth替换为Micrometer Tracing,为Spring Boot 3实现日志关联。按照官方配置示例完成后,WebFlux接口中currentSpan始终为null,控制台日志也未生成traceId和spanId。

接口代码

@GetMapping("/hello")
fun hello(): String {
    val currentSpan: Span? = tracer.currentSpan()
    logger.info("Hello!")
    return "hello"
}

日志输出

2022-11-28T14:53:05.335+01:00  INFO [server,,] 9176 --- [ctor-http-nio-2] d.DemotracingApplication$$SpringCGLIB$$0 : Hello!

配置信息

日志配置

logging.pattern.level=%5p [${spring.application.name:},%X{traceId:-},%X{spanId:-}]

依赖配置

dependencies {
    implementation("org.springframework.boot:spring-boot-starter-actuator")
    implementation("org.springframework.boot:spring-boot-starter-webflux")
    implementation("org.springframework.boot:spring-boot-starter-aop")
    implementation("com.fasterxml.jackson.module:jackson-module-kotlin")
    implementation("io.micrometer:micrometer-tracing-bridge-brave")
    implementation("io.projectreactor.kotlin:reactor-kotlin-extensions")
    implementation("io.micrometer:micrometer-registry-prometheus")
    implementation("org.jetbrains.kotlin:kotlin-reflect")
    implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8")
    implementation("org.jetbrains.kotlinx:kotlinx-coroutines-reactor")
    testImplementation("org.springframework.boot:spring-boot-starter-test")
    testImplementation("io.projectreactor:reactor-test")
}

补充说明:WebMVC应用升级后可正常输出日志关联信息,仅WebFlux应用存在该问题。


问题原因

这个问题的核心是WebFlux + Kotlin协程场景下的Trace上下文传播失效,具体原因如下:

  1. 协程与Reactor上下文未打通:使用Kotlin协程时,Micrometer Tracing的Brave桥接器在早期Spring Boot 3版本中,没有自动将Reactor中的Trace上下文(包含traceId/spanId)同步到Kotlin协程上下文。导致协程执行时,无法从当前上下文获取到Span实例,tracer.currentSpan()返回null,同时MDC中的traceId/spanId也无法填充。
  2. 线程模型差异导致上下文丢失:WebMVC基于阻塞模型,Trace上下文通过ThreadLocal传递;而WebFlux依赖Reactor Context在非阻塞线程间传播Trace信息。但Kotlin协程会切换执行上下文,若没有适配逻辑,Reactor中的Trace上下文无法自动传递到协程环境中。
  3. 版本适配缺陷:这是Spring Boot 3.x早期版本的已知适配问题,后续官方已修复了Micrometer Tracing与Kotlin协程WebFlux场景的上下文传播逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 03:45:33