随着微服务的数量增长,一个业务接口涉及到多个微服务的交互,在出错的情况下怎么能够快速的定位错误,这是一个难题。
好在Spring Cloud已经为什么实现了一个非常好的方案来对服务进行追踪。
Sleuth就是做这个事情的,它在日志中引入唯一的请求ID来标识每次请求,通过SpanId来构成整个的链路。
只需要引入依赖就可以集成Sleuth
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
在方法中记录日志我们会发现在日志的最前面对了一部分内容,这部分内容就是Sleuth为什么提供的链路信息
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] ...
可以看到内容是由[appname,traceId,spanId,exportable]
组成的, 具体含义如下:
- appname:服务的名称,也就是spring.application.name的值,这边要注意下,如果需要输出正确的服务名称,需要将spring.application.name的配置写在bootstr