程序員必知必會的分佈式鏈路追蹤技術:SpringCloudSleuth-Zipkin
Sleuth 與 Zipkin 技術
Spring Cloud Sleuth 爲 Spring Cloud 實現了分佈式跟蹤解決方案,Sleuth 可以結合 Zipkin 做鏈路跟蹤。Spring Cloud Sleuth 的服務鏈路跟蹤功能可以幫助我們快速發現錯誤根源,以及監控分析每條請求鏈路上的請求性能。Sleuth 的主要工作原理是攔截請求,並在日誌中加入額外的 Span 和 Trace 的相關信息。從 Sleuth 2.0.0 開始,Sleuth 使用 Brave 作爲調用鏈工具庫。Brave 是一個用於捕捉分佈式系統之間調用信息的工具庫,可以將這些信息以 Span 的形式發送給 Zipkin。
Zipkin 是一個分佈式跟蹤系統,用戶可以將 Sleuth 發送的時序數據存儲在 Elasticsearch 或者 MySQL 中,Zipkin UI 根據數據存儲顯示服務之間的請求調用詳情和依賴調用關係圖。
Spring Cloud Sleuth 的主要特性
-
Sleuth 的調用鏈消息日誌採用 [Appname,TraceID,SpanID,Exportable] 條 目 添 加 到 Slf4J MDCS , 該 日 志 格 式 兼 容 Zipkin,其條目含義如下。
-
SpanID:發生的特定操作的 ID。
-
Appname:記錄 Span 的應用程序的名稱。
-
TraceID:包含 Span 的延遲圖的 ID。
-
Exportable:是否應將日誌導出到 Zipkin。
-
Sleuth 具有采樣和延遲分析等特性,減少了 Sleuth 日誌採集輸出對應用性能的影響,帶內傳播調用圖相關數據,其他數據基於帶外傳播,可以向 Zipkin 系統報告查詢和可視化分析。
-
Sleuth 提供進程之間的上下文傳播,可以在 Span 上設置添加額外的信息,並通過 HTTP 給其他進程傳遞消息。
-
Sleuth 實 現 了 對 Spring 生 態 下 不 同 組 件 ( Feign 、RestTemplate、Zuul 過濾器、Filter 等)的攔截策略,並將 Span 信息植入 HTTP Head 等載體。
Spring Cloud Sleuth 與 Zipkin 接入
創 建 兩 個 工 程 :
SampleSleuthZipkinApplication 和 ZipkinServerApplication。
-
SampleSleuthZipkinApplication 工程:負責模擬應用生產者和應用消費者,在 3379 端口監聽,並生成 Sleuth 的調用鏈日誌供 Zipkin 採集分析。
-
ZipkinServerApplication 工程:負責啓動 ZipkinServer,默認在 9411 端口監聽,使用 HTTP 的方式收集 Sleuth 日誌,展現調用鏈的調用關係。
SleuthZipkinApplication 的代碼實例
- 添加 Maven 依賴
情況一:如果你只使用 Sleuth,在不需要集成 Zipkin 的情況下,請將如下 Maven 依賴添加到工程中。
情況二:如果你想要 Sleuth 和 Zipkin 結合使用,請添加 Zipkin 依賴項。
- 修改配置文件
- 創建 SampleZipkinApplication 工程
- 創建一個異步的 Service 測試驗證服務
- 創建 Sleuth 的接受用戶請求的 Controller 實現類
下面是通過模擬不同 HTTP 調用請求的調用鏈日誌輸出。
http://127.0.0.1:3380/hi 對應同步請求場景,日誌輸出內容如下。
http://127.0.0.1:3380/async 對應異步請求場景,日誌輸出內容如下。
http://127.0.0.1:3380/start 對應同步異步混合請求場景,日誌輸出內容如下。
說明:上述代碼參考了 Spring Cloud Sleuth 官方源碼實現(Sleuth 源碼可在 GitHub 中查找),更多關於 Sleuth 的有趣實例可參考官網代碼。
ZipkinServerApplication 代碼實例
- 引入 Maven 依賴
- 使用 @EnableZipkinServer 啓動應用
訪 問 http://127.0.0.1 :9411/zipkin/ 首 頁 , 將 展 示 所 有 在 testsleuthzipkin 應用上發生的調用鏈信息,可以看到一次請求的調用整體延遲和 Span 數,如下圖所示。
下面一行代表一次完整的請求 http://127.0.0.1:3380/start,單擊可以查看調用鏈詳情,如下圖所示。
來源:
https://www.toutiao.com/article/7136385535459590691/?log_from=375fb615e0fb2_1661913671467
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/SDqDzm9wGEQ8lDVaLX9MaQ