目录
使用 Sleuth 在应用中进行日志跟踪
首先我们需要在跟踪的服务中集成 Sleuth,所有需要跟踪的服务都加上依赖:
<!-- sleuth -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
集成完成之后,我们就可以看效果了,前提是需要有两个以上的服务,比如 A 服务、B 服务,然后 A 服务中调用 B 服务提供的接口,分别在 A 和 B 服务的接口中输出日志。
使用之前的 blog-user-service 和 blog-user-web 子模块。分别添加代码:
logger.info("我是 blog-user-service /user/{}", id);
logger.info("我是 blog-user-web /user/query/{}", id);
然后我们访问 blog-user-service 服务的接口,查看输出的日志信息,具体如下:
2021-02-02 09:06:08.539 INFO [blog-user-service,6d30865dc73f69b6,dd1fb8e4a3e43ba4,true] 2292 --- [nio-8081-exec-9] c.c.s.blog.controller.UserController : 我是 blog-user-service /user/1
2021-02-02 09:06:08.515 INFO [blog-user-web,6d30865dc73f69b6,6d30865dc73f69b6,true] 8252 --- [nio-8091-exec-5] c.c.s.blog.controller.UserController : 我是 blog-user-web /user/query/1
在方法中记录日志,我们会发现在日志的最前面加了一部分内容,这部分内容就是 Sleuth 为服务直接提供的链路信息。
可以看到内容是由 [appname,traceId,spanId,exportable] 组成的,具体含义如下:
-
appname:服务的名称,也就是 spring.application.name 的值。
-
traceId:整个请求的唯一 ID,它标识整个请求的链路。
-
spanId:基本的工作单元,发起一次远程调用就是一个 span。
-
exportable:决定是否导入数据到 Zipkin 中。