我们有一个使用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。
答案 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>