前提
本文是基于SpringCloud 商城系统搭建之eureka
SpringCloud Sleuth 简介
Spring Cloud Sleuth为Spring Cloud实现了分布式跟踪解决方案。
Spring Cloud Sleuth借鉴了Dapper的术语。
Span:基本的工作单元。Span包括一个64位的唯一ID,一个64位trace码,描述信息,时间戳事件,key-value 注解(tags),span处理者的ID(通常为IP)。
Trace:一组Span形成的树形结构。
Annotation:用于及时记录存在的事件。常用的Annotation如下:
- cs:客户端发送(client send) 客户端发起一个请求,表示span开始
- sr:服务器接收(server received) 服务器接收到客户端的请求并开始处理,sr - cs 的时间为网络延迟
- ss:服务器发送(server send) 服务器处理完请求准备返回数据给客户端。ss - sr 的时间表示服务器端处理请求花费的时间
- cr:客户端接收(client received) 客户端接收到处理结果,表示span结束。 cr - cs 的时间表示客户端接收服务端数据的时间
Sleuth 集成
按照下面步骤改造之前的项目supermarker-provider
1、在pom.xml 文件中,添加Spring Cloud Sleuth 的jar 包依赖
<!--sleuth -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
2、application.properties 添加日志文件输出,方便查询信息追踪
# 日志记录输出
logging.level.root=Info
logging.level.org.springframework.web.servlet.DispatcherServlet=DEBUG
3、分布式链路信息追踪:分别启动:supermarker-eureka、supermarker-provider、supermarker-consume,浏览器访问:http://localhost:8083/user?id=2
重点查看supermarker-provider 生成的请求链路信息:
2020-12-18 02:12:41.048 DEBUG [provider,140c59722f545377,140c59722f545377,false] 7264 --- [nio-8082-exec-4] o.s.web.servlet.DispatcherServlet : GET "/user?id=1", parameters={masked}
---------------provider端口被调用--------------8082
2020-12-18 02:12:41.357 INFO [provider,140c59722f545377,140c59722f545377,false] 7264 --- [nio-8082-exec-4] o.h.h.i.QueryTranslatorFactoryInitiator : HHH000397: Using ASTQueryTranslatorFactory
Hibernate: select user0_.use_id as use_id1_0_, user0_.create_time as create_t2_0_, user0_.modify_time as modify_t3_0_, user0_.use_age as use_age4_0_, user0_.use_email as use_emai5_0_, user0_.use_id_no as use_id_n6_0_, user0_.use_name as use_name7_0_, user0_.use_phone_num as use_phon8_0_, user0_.use_sex as use_sex9_0_, user0_.use_state as use_sta10_0_ from user user0_ where user0_.use_id=1
2020-12-18 02:12:41.836 DEBUG [provider,140c59722f545377,140c59722f545377,false] 7264 --- [nio-8082-exec-4] o.s.web.servlet.DispatcherServlet : Completed 200 OK
2020-12-18 02:12:43.799 INFO [provider,,,] 7264 --- [tbeatExecutor-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_PROVIDER/provider1 - Re-registering apps/PROVIDER
2020-12-18 02:12:43.799 INFO [provider,,,] 7264 --- [tbeatExecutor-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_PROVIDER/provider1: registering service...
2020-12-18 02:12:43.813 INFO [provider,,,] 7264 --- [tbeatExecutor-0] com.netflix.discovery.DiscoveryClient : DiscoveryClient_PROVIDER/provider1 - registration status: 204
2020-12-18 02:12:48.385 DEBUG [provider,ff83f1addcfe58f1,ff83f1addcfe58f1,false] 7264 --- [nio-8082-exec-7] o.s.web.servlet.DispatcherServlet : GET "/user?id=1", parameters={masked}
其中:140c59722f545377 是traceID, 140c59722f545377 是spanID .
如果想仔细查看链路生成具体信息,可以将日志输出调整如下:
logging.level.root=Info
logging.level.org.springframework.cloud.sleuth=DEBUG