介绍
在微服务架构中,随着业务的发展,系统越来越复杂,调用关系越来越错综复杂。几乎每一个请求都会形成一条调用链路,每一条链路都有可能由于各种原因出错。这时候发现,对全链路调用跟踪显得越来越重要。
Srping Cloud Sleuth提供了一套完整的解决方案。Sleuth生成的一个ID,叫Trace ID,用来标识一条请求链路路,一条请求链路路中包含一个Trace ID,多个Span ID
1.首先sleuth创建TraceFilter,对所有的网络请求进行拦截,如果请求的header中没有span信息,则创建Span对象,生成span id、trace id等,如果header中有,则直接使用header中的数据创建Span对象
2.之后将span id、trace id设置到sl4j的MDC中。当使用RestTemplate发送请求RestTemplateInterceptorInjector拦截器对请求拦截,将新生成的span id、trace id等信息设置到请求的header中。这样服务端收到请求后就可以从header中解析出Span信息
1.安装zipkin
curl -sSL https://zipkin.io/quickstart.sh | bash -s
2.启动zipkin
nohup java -jar zipkin.jar >> zipkin.log 2>&1 &
访问zipkin 客户端页面 localhost:9411
3.springcloud 项目中 引入sleuth 和zipkin 的依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud </groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
4.配置文件
spring.zipkin.enabled=true
spring.zipkin.discovery-client-enabled=false
spring.zipkin.base-url=http://localhost:9411
spring.sleuth.sampler.probability=1.0
5.启动项目
调用一个接口