Spring Cloud Sleuth


Spring Cloud Sleuth為Spring Cloud實現了分布式鏈路跟蹤解決方案。也引入了Google論文 Dapper 中的術語。

Span:基本工作單元,例如,發送RPC是一個新的span,就像向RPC發送響應一樣,Span由span的唯一64位ID標識,另一個64位ID標識其所屬的Trace。Span還有其他數據,例如描述、帶時間戳的事件、鍵值annotations(標簽),導致它們的span的ID以及進程ID(通常是IP地址)。

span可以啟動和停止,它們可以跟蹤自己的時間信息,創建span后,必須在將來的某個時刻停止它。

啟動Trace的初始span稱為 root span ,該span的ID值等於trace ID。

Trace:一組span形成的樹狀結構,例如,如果運行分布式大數據存儲,則可能由 PUT 請求形成trace。

Annotation:用於及時記錄事件的存在,使用 Brave 工具,不再需要為 Zipkin 設置特殊的事件來了解客戶端和 服務器 是誰、請求在哪里開始以及在哪里結束,然而,出於學習目的,標記這些事件以突出發生了什么類型的操作。

  • cs :Client Sent,客戶端發起了一個請求,這個annotation表示span的開始。
  • sr :Server Received,服務器端獲得了請求並開始處理它,從此時間戳中減去 cs 時間戳會顯示網絡延遲。
  • ss :Server Sent,在請求處理完成時注釋(當響應被發送回客戶端時),從此時間戳中減去 sr 時間戳會顯示服務器端處理請求所需的時間。
  • cr :Client Received,表示span的結束,客戶端已成功從服務器端收到響應,從此時間戳中減去 cs 時間戳會顯示客戶端從服務器接收響應所需的全部時間。

下圖顯示了系統中的 Span 和 Trace ,以及Zipkin annotations:

Spring Cloud 參考文檔(Spring Cloud Sleuth介紹)

標記的每種顏色表示一個span(有七個span — 從 A 到 G ),請考慮以下標記:

Trace Id = X Span Id = D Client Sent

此標記表示當前span的 Trace Id 設置為 X , Span Id 設置為 D ,此外,還發生了 Client Sent 事件。

下圖顯示了span的父—子關系:

Spring Cloud 參考文檔(Spring Cloud Sleuth介紹)

https://github.com/spring-cloud/spring-cloud-sleuth

實際項目中若已引入Spring Could sleuth包,則默認會在打印日志時輸出traceId、spanId等內容,若它調用一個也是用Spring Could sleuth的服務,則會自動傳遞traceId

類似這種traceId的傳遞操作,在服務內多采用ThreadLocal或MDC的方式,在分布式微服務時一般在request header或url參數中傳遞。 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM