Spring Cloud Sleuth
Spring Cloud Sleuth是一个相当小的简单项目,它为日志记录和跟踪提供了一些有用的功能。如果仔细研究“使用LogstashTCPAppender"小节中讨论的示例,就可以很容易地看出它不可能过滤与单个请求相关的所有日志。在基于微服务的环境中,在处理进入系统的请求时,关联应用程序交换的消息也非常重要。这是创建Spring Cloud Sleuth项目的主要动机。
如果为应用程序启用了Spring Cloud Sleuth,它会向请求添加一些HTTP标头,这允许开发人员将请求与响应和已交换的消息链接起来,这个交换是由独立应用程序完成的,而链接则可以通过RESTful API 之类的接口完成。它定义了两个基本的工作单位:跨度(Span)和跟踪(Trace) 。每一个单位都由唯一的64位ID标识。跟踪ID的值等于跨度ID的初始值。跨度是指单个交换,其中的响应将作为对请求的反应而发送。
跟踪通常称为关联IT (Correlation IT) ,它将帮助开发人员链接来自不同应用程序的所有日志,而这些日志是在处理进入系统的请求期间生成的。每个跟踪和跨度ID都会添加到Slf4J映射诊断上下文(MDC)中,因此,可以在日志聚合器(Log Aggregator) 中提取具有给定跟踪或跨度的所有日志。MDC只是一个存储当前线程上下文数据的映射。进入服务器的每个客户端请求都由不同的线程处理。由于这个原因,每个线程都可以在线程生命周期内访问其MDC的值。除了spanld和traceld之外,Spring Cloud Sleuth还向MDC添加了以下两个跨度。
口appName: 生成日志条目的应用程序的名称。
口exportable:指定是否应将日志导出到Zipkin。除了上述功能之外,Spring Cloud Sleuth还可以提供以下功能。
口对常见分布式跟踪数据模型的抽象,这允许与Zipkin的集成。
口记录计时信息,以帮助进行延迟分析。它还包括不同的采样策略以管理导出到Zipkin的数据量。
口与参与通信的常见Spring组件集成,如servlet过滤器、异步端点、RestTemplate、消息通道、Zuul 过滤器和Feign客户端等。
将 Sleuth与应用程序集成
要为应用程序启用Spring Cloud Sleuth功能,只需将spring-cloud-starter-sleuth启动器添加到依赖项即可。
<dependeney>
<groupId>org。springframework. cloud</groupId>
<artifactId>spring-cloud- starter-sleuth</artifactId>
</dependency>
包含此依赖项之后,应用程序生成的日志条目的格式已更改。具体如下所示。
2017-12-30 00:21:31. 639
INFO [order-service, 9a3fef0169864e80 , 9a3fef0169864e80, false]
49212 --- [ni0-8090- exec-6]
p.p.s.order。
controller.OrderController :Products found: [("id":2, "name":"Test2", "price":1500},
("id":9, "name" :"Test9","price":245011
2017-12-30 00:21:31.683
INFO [order-service, 9a3fef0169864e80, 9a3fef0169864e80, false ]
49212 --- [n10-8090- exec-6]
p.p.s.order。controller。OrderController :
Customer found: "id":2, "name":"Adam Smith",
"typel":"REGULAR", "accounts":
[("id":4, "number":"1234567893". "balance":50001,
("id":5, "number" :"1234567894", "balance"