如何将 Sleuth 集成到 spring boot 1.5 中以在较新的 spring boot 2.2 中传播跟踪 ID?
How to integrate Sleuth in a spring boot 1.5 to propagate trace id in newer spring boot 2.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 并以编程方式创建 trace/span id,以便它可以使用 Spring Boot 2.2 无缝传播到其他微服务。
我找到的关于 Spring Cloud Sleuth 的较旧文档是 2.1.6。因此,我发现无法将 Sleuth 与 Spring Boot 1.5 一起使用。你知道它是否与它兼容以及我如何集成它吗?
我不喜欢上面的代码片段,因为我正在创建另一个未被 Sleuth 捕获的跟踪 ID。
如果您遵循 B3 Headers 约定,那么应该开箱即用。一般来说,您应该尽快升级到最新版本,因为 1.3.x 很古老。
我说的 headers 是 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) and here for the 2.x version of Sleuth (https://github.com/openzipkin/brave/blob/release-5.10.2/brave/src/main/java/brave/propagation/B3Propagation.java#L102-L125)
我的回答找到问题了。分享给可能觉得有用的其他人。
为了使用spring boot 1.5,Spring Cloud Sleuth 的版本必须是1.3.6。我们遇到的问题是我们有一个自定义 logback.xml,这限制了 Sleuth 打印 trace/span id。
因此,当我们在 logback.xml 中添加 spring 引导 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>
我们有一个使用 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 并以编程方式创建 trace/span id,以便它可以使用 Spring Boot 2.2 无缝传播到其他微服务。
我找到的关于 Spring Cloud Sleuth 的较旧文档是 2.1.6。因此,我发现无法将 Sleuth 与 Spring Boot 1.5 一起使用。你知道它是否与它兼容以及我如何集成它吗?
我不喜欢上面的代码片段,因为我正在创建另一个未被 Sleuth 捕获的跟踪 ID。
如果您遵循 B3 Headers 约定,那么应该开箱即用。一般来说,您应该尽快升级到最新版本,因为 1.3.x 很古老。
我说的 headers 是 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) and here for the 2.x version of Sleuth (https://github.com/openzipkin/brave/blob/release-5.10.2/brave/src/main/java/brave/propagation/B3Propagation.java#L102-L125)
我的回答找到问题了。分享给可能觉得有用的其他人。
为了使用spring boot 1.5,Spring Cloud Sleuth 的版本必须是1.3.6。我们遇到的问题是我们有一个自定义 logback.xml,这限制了 Sleuth 打印 trace/span id。
因此,当我们在 logback.xml 中添加 spring 引导 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>