Spring Sleuth - 相关 ID 未记录

Posted

技术标签:

【中文标题】Spring Sleuth - 相关 ID 未记录【英文标题】:Spring Sleuth - Correlation Id not logging 【发布时间】:2021-10-30 19:44:48 【问题描述】:

当前流量: SchedulerA -> ServiceA -> FeignOfB (Other ServiceB) -> ControllerB

log.xml

<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>
            %dyyyy-MM-dd HH:mm:ss,SS [%thread] %-5level %logger36 -
            %msg
            $appName:-, %XCorrelation-Id:-, %XtraceId:-, %XspanId:-%n
        </Pattern>
    </layout>
</appender>

application.yml

spring:
   sleuth:
     baggage:
       correlation-enabled: true
       correlation-fields:
         - Correlation-Id
       remote-fields:
         - Correlation-Id

调度程序代码:

public void scheduleFixedDelayTask() 
    String cId = UUID.randomUUID().toString().replace("-", "");
    BaggageField bField = BaggageField.getByName("Correlation-Id");
    if (bField != null) 
        bField.updateValue(tracer.currentSpan().context(), cId);
    
    //MDC.put("Correlation-Id", cId);
    log.info("scheduleFixedDelayTask, ", new Date());
    List<Foo> foos = this.feignService.getData("foo");
    log.info("scheduleFixedDelayTask - completed", new Date());

生成 UUID 并设置 BaggageField 值。 Correlation-Id 值打印在 ServiceB 控制器中,但在发出请求的 serviceA 的调度程序日志中,它不会打印 Correlation-Id。它在两个服务中打印 spanId 和 traceId(自行生成)。

如果我使用 MDC(注释行)手动设置值,则它会打印。 这是手动设置值的正确方法吗?

【问题讨论】:

【参考方案1】:

您需要配置 Brave 以在更新时执行刷新 - https://docs.spring.io/spring-cloud-sleuth/docs/current/reference/html/project-features.html#features-baggage

@Bean
ScopeDecorator mdcScopeDecorator() 
    return MDCScopeDecorator.newBuilder()
            .clear()
            .add(SingleCorrelationField.newBuilder(BaggageField.create("Correlation-Id"))
                    .flushOnUpdate()
                    .build())
            .build();

【讨论】:

太棒了,它正在工作。 @JmsListener 有可用的仪器吗?在消息接收到侦听器之前,我想要某种拦截器,并想检查是否需要 Correlation-Id 和标头中可用的其他内容。

以上是关于Spring Sleuth - 相关 ID 未记录的主要内容,如果未能解决你的问题,请参考以下文章

精通springcloud:分布式日志记录和跟踪使用,Spring Cloud Sleuth

如何配置 spring-cloud-gateway 以使用 sleuth 记录请求/响应正文

如何使用 Spring Sleuth 2.0 记录 MDC?

Spring Cloud Sleuth 使用教程

Spring Cloud Sleuth 全链路日志跟踪解决方案(强烈推荐)

Spring Cloud Sleuth的特点