如何将 Sleuth 集成到 Spring Boot 1.5 中以在较新的 Spring Boot 2.2 中传播跟踪 id?

问题描述 投票:0回答:2

我们有一个使用 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。所以,我找不到将 Sleuth 与 Spring Boot 1.5 一起使用的方法。您知道它是否兼容以及如何集成它?

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

java spring spring-boot spring-cloud-sleuth
2个回答
1
投票

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

为了使用 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>

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) 以及此处的 Sleuth 2.x 版本 (https://github.com/openzipkin/brave/blob/ release-5.10.2/brave/src/main/java/brave/propagation/B3Propagation.java#L102-L125

© www.soinside.com 2019 - 2024. All rights reserved.