春天侦探 |创建新的(分离的/孤立的)跟踪

Posted

技术标签:

【中文标题】春天侦探 |创建新的(分离的/孤立的)跟踪【英文标题】:Spring Sleuth | Create fresh new (detached/orphaned) Trace 【发布时间】:2018-09-16 02:59:57 【问题描述】:

我有一个Spring Boot 应用程序使用Spring Sleuth 来跟踪服务间调用。在该应用程序中存在一个ScheduledExecutorService,它在循环中执行 http 请求(下面的伪代码):

class HttpCaller implements Runnable 
  public void run() 
    performHttpCall();
    // "loop"
    executor.submit(this::run);
  


// start it once
scheduler.submit(new HttpCaller());

如果我现在查看由 Sleuth 生成并存储在 Zipkin 中的跟踪,我可以看到所有 http 调用都与单个跟踪相关联。很可能是因为跟踪上下文在调用ScheduledExecutorService::submit 期间被移交。

如何在开始下一次迭代之前清除当前跟踪,以便每个 http 调用都会产生一个新的分离/孤立跟踪?

【问题讨论】:

【参考方案1】:

如果您使用的是 Sleuth 2.0,您可以调用 Tracer 方法来创建新跟踪。在旧版本的侦探中,我想我会使用一个 NOT bean 的执行程序。这样你会丢失跟踪,它会在某个时候重新启动(通过休息模板或类似的东西)。

【讨论】:

如何使用 Tracer 开始新的跟踪?我找不到这样的方法。能给个提示吗?

以上是关于春天侦探 |创建新的(分离的/孤立的)跟踪的主要内容,如果未能解决你的问题,请参考以下文章

如何从使用云侦探的跟踪中排除一些使用 Feign 的调用

32、Spring Cloud 服务跟踪总结

在 log4j2 模式布局中使用 Sleuth 跟踪和跨度 id

《Git小书》笔记:3 介绍

日志没有被分离,或者跟踪后日志没有信息。

侦探日志 traceId 未传播到另一个服务