Spring Cloud Sleuth采用的是Google的開源項目Dapper的專業術語。
- Span:基本工作單元,發送一個遠程調度任務 就會產生一個Span,Span是一個64位ID唯一標識的,Trace是用另一個64位ID唯一標識的,Span還有其他數據信息,比如摘要、時間戳事件、Span的ID、以及進度ID。
- Trace:一系列Span組成的一個樹狀結構。請求一個微服務系統的API接口,這個API接口,需要調用多個微服務,調用每個微服務都會產生一個新的Span,所有由這個請求產生的Span組成了這個Trace。
- Annotation:用來及時記錄一個事件的,一些核心注解用來定義一個請求的開始和結束 。這些注解包括以下:
- cs - Client Sent -客戶端發送一個請求,這個注解描述了這個Span的開始
- sr - Server Received -服務端獲得請求並准備開始處理它,如果將其sr減去cs時間戳便可得到網絡傳輸的時間。
- ss - Server Sent (服務端發送響應)–該注解表明請求處理的完成(當請求返回客戶端),如果ss的時間戳減去sr時間戳,就可以得到服務器請求的時間。
- cr - Client Received (客戶端接收響應)-此時Span的結束,如果cr的時間戳減去cs時間戳便可以得到整個請求所消耗的時間。
簡單使用:Trace將一次請求的日志全部串起來;
在日志中配置
%X{X-B3-TraceId:-}-%X{X-B3-SpanId:-}
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %X{X-B3-TraceId:-}-%X{X-B3-SpanId:-} %level ${LOG_SYSTEM} [%logger{100}_%M] - %msg%n</pattern>
在日志中會顯示Traceid;
在程序中獲取Traceid:
@Autowired private Tracer tracer; // 默認注入的是DefaultTracer ......... tracer.getCurrentSpan().traceIdString()
traceId對日志查詢會有極大幫助