SpringCloud - Spring Cloud Sleuth(2) - 特性

参考: https://cloud.spring.io/spring-cloud-static/Edgware.SR5/multi/multi__features_2.html

1. 将trace和span ID添加到Slf4J MDC,因此可以从日志聚合器中的给定trace或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的应用程序的名称
  • traceId  - 包含span的延迟图的id
  • exportable - 是否应将日志导出到Zipkin。你想什么时候span不能导出?在希望在Span中包装某些操作并仅将其写入日志的情况下。

2. 提供对常见分布式跟踪数据模型的抽象:trace,span(形成DAG),注解,键值注解。松散地基于HTrace,但兼容Zipkin(Dapper)。
3. Sleuth记录定时信息以帮助进行延迟分析。使用sleuth,可以查明应用程序中延迟的原因。Sleuth不会记录太多日志,并且不会导致生产应用程序崩溃。

  • 在带内传播有关调用图的结构数据,其余的带外传播。
  • 包括诸如HTTP等层的固定的检测
  • 包括采样政策来管理数量
  • 可以向Zipkin系统报告查询和可视化

4. 组件常见的入口和出口点来自Spring应用程序(servlet过滤器,异步端点,rest模板,定时任务,消息通道,zuul过滤器,feign客户端)。
5. Sleuth包含默认逻辑,用于跨http或消息传递边界连接trace。例如,http传播通过Zipkin兼容的请求报头工作。此传播逻辑通过SpanInjector和SpanExtractor的实现进行定义和定制。
6. Sleuth提供了在进程之间传播上下文(也称为baggage)的可能性。这意味着如果在Span上设置一个baggage元素,那么它将通过HTTP或消息传递方式向下游其他的进程发送。
7. 提供创建/继续span以及通过注解添加标记和日志的方法。
8. 提供接受/丢弃span的简单度量。
9. 如果spring-cloud-sleuth-zipkin在类路径上,则应用程序将生成并收集与Zipkin兼容的trace。默认情况下,它通过HTTP将它们发送到localhost(端口9411)上的Zipkin服务器。使用 spring.zipkin.baseUrl 配置服务的位置。

  •  如果依赖spring-rabbit或spring-kafka,应用程序将向代理发送trace而不是http。
  • spring-cloud-sleuth-stream已经废弃了,不应再使用它。

注:

  • 如果使用Zipkin,请使用spring.sleuth.sampler.percentage配置导出的span百分比(默认值为0.1,即10%)。否则你可能会认为Sleuth无法正常工作,因为它忽略了一些span。
  • 始终设置SLF4J MDC,并且根据上面的示例,回溯用户将立即在日志中看到trace和span ID。其他日志记录系统必须配置自己的格式化程序才能获得相同的结果。logging.pattern.level 默认设置为:%5p [${spring.zipkin.service.name:${spring.application.name:-}},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}](这是Spring Boot提供的为使用Logback提供的功能)。这意味着如果不使用SLF4J,则不会自动应用此模式。

猜你喜欢

转载自blog.csdn.net/mytt_10566/article/details/84932691