場景:
疑問:
?在微服務中,通常根據業務模塊分服務,項目中前端發起壹個請求,後端可能跨幾個服務調用才能完成這個請求(如下圖)。
?如果系統越來越龐大,服務之間的調用與被調用關系就會變得很復雜,假如壹個請求中需要跨幾個服務調用,其中壹個服務由於網絡延遲等原因掛掉了,那麽這時候我們需要分析具體哪壹個服務出問題了就會顯得很困難。Spring Cloud Sleuth服務鏈路跟蹤功能,就可以幫助我們快速的發現錯誤根源以及監控分析每條請求鏈路上的性能等等。
?Spring Cloud Sleuth是壹個在應用中實現日誌跟蹤的強有力的工具。使用Sleuth庫可以應用於計劃任務 、多線程服務或復雜的Web請求,尤其是在壹個由多個服務組成的系統中。當我們在這些應用中來診斷問題時,即使有日誌記錄也很難判斷出壹個請求需要將哪些操作關聯在壹起。
?如果想要診斷復雜操作,通常的解決方案是在請求中傳遞唯壹的ID到每個方法來識別日誌。 而Sleuth可以與日誌框架Logback、SLF4J輕松地集成,通過添加獨特的標識符來使用日誌跟蹤和診斷問題。
?微服務跟蹤(sleuth)其實是壹個工具,它在整個分布式系統中能跟蹤壹個用戶請求的過程(包括數據采集,數據傳輸,數據存儲,數據分析,數據可視化),捕獲這些跟蹤數據,就能構建微服務的整個調用鏈的視圖,這是調試和監控微服務的關鍵工具。
SpringCloudSleuth有4個特點:
配置應用名稱,以便日誌輸出。
說明:
application name — 應用的名稱,也就是application.properties中的spring.application.name參數配置的屬性。
traceId — 為壹個請求分配的ID號,用來標識壹條請求鏈路。
spanId — 表示壹個基本的工作單元,壹個請求可以包含多個步驟,每個步驟都擁有自己的spanId。壹個請求包含壹個TraceId,多個SpanId
export — 布爾類型。表示是否要將該信息輸出到類似Zipkin這樣的聚合器進行收集和展示。
3f575919b0df993a:traceId相同
3f575919b0df993a,05fddf5ed5bbbf59: spanId不同。
Sleuth將traceId傳入了異步方法並創建了以新的 spanId ,代表這是同壹個請求但進入了另壹個處理階段,由壹個異步線程來執行。
可以看到Sleuth為每個任務實例都創建壹個新的traceId和spanId。
Spring Cloud Sleuth可以應用在各種各樣的單壹Web應用中。我們可以使用這項技術輕松地為壹個請求采集日誌,即使請求跨越多個線程。幫助我們在多線程環境下進行清晰的調試,通過識別traceId和spanId來確定每壹個操作和操作中的每壹步,這樣可以減輕我們做日誌分析的復雜性。
註:當文件名為logback-spring.xml時 不需要配置logging.config
sleuth中的壹些術語: