如何在春季靴子1.5中集成Sleuth以在更新的春季靴子2.2中传播跟踪ID?

时间:2020-03-30 14:34:15

标签: java spring spring-boot spring-cloud-sleuth

我们有一个使用Spring Boot 2.2构建的微服务架构,并且我们正在使用Spring Cloud Sleuth传播跟踪ID。

但是,我们有一个使用Spring Boot 1.5.2构建的旧的大型单片,它没有使用Sleuth(不能将其升级到Spring Boot 2.x)。我曾尝试将Spring Cloud Sleuth 1.3.5集成到其中,但是它也没有生成跟踪ID(并且没有关于它的文档)。

我目前已将此过滤器编码为替代方式记录我的交易,但我不想重新发明轮子:

@Component
public class TransactionLoggingFilter implements Filter {

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;

        String txnId = ofNullable(request.getHeader(TXN_ID_HEADER))
                .orElse(randomUUID().toString().substring(0, 8));

        MDC.put(TXN_ID, txnId);
        chain.doFilter(request, servletResponse);
        MDC.remove(TXN_ID);
    }
}

我想知道如何添加Sleuth并以编程方式创建跟踪/跨度ID,以便它可以使用Spring Boot 2.2无缝传播到其他微服务。

我发现的有关Spring Cloud Sleuth的旧文档是2.1.6。因此,我发现无法在Spring Boot 1.5中使用Sleuth。您知道它是否兼容以及如何集成吗?

我不喜欢上面的代码片段,因为我正在创建另一个未被Sleuth捕获的跟踪ID。

2 个答案:

答案 0 :(得分:0)

如果您遵循的B3标头惯例应立即可用。通常,您应该尽快升级到最新版本,因为1.3.x是古老的。

我正在谈论的标头用于1.3.6(https://github.com/spring-cloud/spring-cloud-sleuth/blob/v1.3.6.RELEASE/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/Span.java#L79-L86),适用于2.x版本的Sleuth(https://github.com/openzipkin/brave/blob/release-5.10.2/brave/src/main/java/brave/propagation/B3Propagation.java#L102-L125

答案 1 :(得分:0)

找到了我的答案的问题。与其他人分享可能有用的东西。

要使用Spring Boot 1.5,Spring Cloud Sleuth的版本必须为1.3.6。我们遇到的问题是我们有一个自定义的logback.xml,这限制了Sleuth打印跟踪/跨度ID的权限。

因此,当我们在logback.xml中添加spring boot default.xml配置时,它开始打印所需的日志:

<?xml version="1.0" encoding="UTF-8"?>
<configuration>
    <!-- Needed for Sleuth to print the logs -->
    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>

    <variable name="LOGS_DIR_VAR" value="${LOGS_DIR:-/logs}"/>

    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>
                %clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}
            </pattern>
        </encoder>
    </appender>

    <root level="info">
        <appender-ref ref="STDOUT"/>
    </root>
</configuration>
相关问题