48. Features

  • 将 trace 和 span id 添加到 Slf4J MDC,因此您可以从 log 聚合器中的给定跟踪或 span 中提取所有日志。 示例日志:
2016-02-02 15:30:57.902  INFO [bar,6bfd228dc00d216b,6bfd228dc00d216b,false] 23030 --- [nio-8081-exec-3] ...
2016-02-02 15:30:58.372 ERROR [bar,6bfd228dc00d216b,6bfd228dc00d216b,false] 23030 --- [nio-8081-exec-3] ...
2016-02-02 15:31:01.936  INFO [bar,46ab0d418373cbc9,46ab0d418373cbc9,false] 23030 --- [nio-8081-exec-4] ...

注意 MDC 的[appname,traceId,spanId,exportable]条目:

  • spanId - 发生的特定操作的 ID

  • appname - 记录 span 的 application 的 name

  • traceId - 包含 span 的延迟图的 id

  • 可导出 - 是否应将 log 导出到 Zipkin。你想什么时候 span 不能出口?在您想要在 Span 中包装某些操作并将其写入日志的情况下。

  • 提供对 common 分布式跟踪数据模型的抽象:跟踪,spans(形成 DAG),注释,key-value 注释。松散地基于 HTrace,但 Zipkin(Dapper)兼容。

  • Sleuth 记录时序信息以帮助进行延迟分析。使用 sleuth,您可以查明 applications 中的延迟原因。 Sleuth 写得不太多 log,并且不会导致 production application 崩溃。

  • 传播有关 call-graph in-band 和 rest out-of-band 的结构数据。

  • 包括诸如 HTTP 之类的层次的固定仪器

  • 包括采样 policy 来管理音量

  • 可以向 Zipkin 系统报告查询和可视化

  • 乐器 common 入口和出口点来自 Spring applications(servlet 过滤器,async endpoints,rest template,预定动作,消息 channels,zuul 过滤器,feign client)。

  • Sleuth 包含用于跨 http 或消息传递边界连接跟踪的默认逻辑。对于 example,http 传播通过 Zipkin-compatible request headers 工作。通过SpanInjectorSpanExtractor_mplempleations 定义和定制此传播逻辑。

  • Sleuth 使您可以在进程之间传播 context(也称为 baggage)。这意味着如果你在 Span 上设置一个 baggage 元素,那么它将通过 HTTP 或消息传递到下游,发送到其他进程。

  • 提供一种创建/ continue spans 并通过 annotations 添加标签和日志的方法。

  • 提供接受/删除 spans 的简单 metrics。

  • 如果spring-cloud-sleuth-zipkin在 classpath 上,则应用程序将生成并收集 Zipkin-compatible 跟踪。默认情况下,它通过 HTTP 将它们发送到 localhost(port 9411)上的 Zipkin 服务器。使用spring.zipkin.baseUrl配置服务的位置。

  • 如果您依赖于spring-rabbitspring-kafka,您的应用程序会将痕迹发送到 broker 而不是 http。

  • 注意:不推荐使用spring-cloud-sleuth-stream,不应再使用spring-cloud-sleuth-stream

如果使用 Zipkin,请使用spring.sleuth.sampler.percentage配置 spans 导出的百分比(默认 0.1,i.e.10%)。 否则你可能会认为 Sleuth 不起作用,因为它省略了一些 spans.

SLF4J MDC 始终设置,并且 logback 用户将立即在上面的 example 中查看日志中的 trace 和 span id。其他 logging 系统必须配置自己的格式化程序才能获得相同的结果。默认值为logging.pattern.level设置为%5p [${spring.zipkin.service.name:${spring.application.name:-}},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}](对于 logback 用户,这是 Spring Boot feature)。 这意味着如果您不使用 SLF4J,则此 pattern 将不会自动应用