谷粒商城-高級篇完結-Sleuth+Zipkin 服務鏈路追蹤

1、基本概念和整合

1.1、為什么用


微服務架構是一個分布式架構,它按業務劃分服務單元,一個分布式系統往往有很多個服務單元。由于服務單元數量眾多,業務的復雜性,如果出現了錯誤和異常,很難去定位 。主要體現在,一個請求可能需要調用很多個服務 ,而內部服務的調用復雜性,決定了問題難以定位。所以微服務架構中,必須實現分布式鏈路追蹤,去跟進一個請求到底有哪些服務參與,參與的順序又是怎樣的,從而達到每個請求的步驟清晰可見,出了問題,很快定位
鏈路追蹤組件有 Google 的 Dapper , Twitter 的 Zipkin ,以及阿里的 Eagleeye (鷹眼)等,它們都是非常優秀的鏈路追蹤開源組件。


1.2、基本術語

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 時間戳便可以得到整個請求所消耗的時間。
官方文檔:GitHub - spring-cloud/spring-cloud-sleuth at 2.2.x

如果服務調用順序如下

那么用以上概念完整的表示出來如下:

Span 之間的父子關系如下:

2、整合 Sleuth


1、gulimall-common導入依賴

    <!--鏈路追蹤 sleuth--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId></dependency>

2 、每個微服務配置:打開 debug 日志

logging:level:org.springframework.cloud.openfeign: debugorg.springframework.cloud.sleuth: debug


3、發起一次遠程調用,觀察控制臺

查看商品詳情:http://item.gulimall.com/10.html

DEBUG [gulimall-product,541450f08573fff5,541450f08573fff5,false]
gulimall-product:服務名
541450f08573fff5:是 TranceId,一條鏈路中,只有一個 TranceId
541450f08573fff5:是 spanId,鏈路中的基本工作單元 id
false:表示是否將數據輸出到其他服務,true 則會把信息輸出到其他可視化的服務上觀察

3、整合 zipkin 可視化觀察


通過 Sleuth 產生的調用鏈監控信息,可以得知微服務之間的調用鏈路,但監控信息只輸出到控制臺不方便查看。我們需要一個圖形化的工具-zipkin 。 Zipkin 是 Twitter 開源的分布式跟蹤系統,主要用來收集系統的時序數據,從而追蹤系統的調用問題。
zipkin 官網地址如下: OpenZipkin · A distributed tracing system

1、docker 安裝 zipkin 服務器

docker run --name zipkin-server -d --restart=always -p 9411:9411 openzipkin/zipkin

2、導入

        <!--鏈路追蹤 zipkin--><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId></dependency>

zipkin 依賴也同時包含了 sleuth,可以省略 sleuth 的引用

3、添加 zipkin 相關配置

spring:application:name: gulimall-product  zipkin:base-url: http://192.168.56.10:9411/ # zipkin 服務器的地址# 關閉服務發現,否則 Spring Cloud 會把 zipkin 的 url 當做服務名稱discoveryClientEnabled: falsesender:type: web # 設置使用 http 的方式傳輸數據sleuth:sampler:probability: 1 # 設置抽樣采集率為 100%,默認為 0.1,即 10%

發送遠程請求,測試 zipkin。

訪問:http://192.168.56.10:9411/

服務調用鏈追蹤信息統計

使用本地zipkin

Central Repository: io/zipkin/java/zipkin-server

java -jar zipkin-server-2.9.4-exec.jar

啟動成功:

訪問:http://127.0.0.1:9411/

spring:application:name: gulimall-product  zipkin:base-url: http://127.0.0.1:9411/ # zipkin 服務器的地址# 關閉服務發現,否則 Spring Cloud 會把 zipkin 的 url 當做服務名稱discoveryClientEnabled: falsesender:type: web # 設置使用 http 的方式傳輸數據sleuth:sampler:probability: 1 # 設置抽樣采集率為 100%,默認為 0.1,即 10%

4、Zipkin 數據持久化


Zipkin 默認是將監控數據存儲在內存的,如果 Zipkin 掛掉或重啟的話,那么監控數據就會丟失。所以如果想要搭建生產可用的 Zipkin,就需要實現監控數據的持久化。而想要實現數據持久化,自然就是得將數據存儲至數據庫。好在 Zipkin 支持將數據存儲至:
內存(默認)
MySQL
Elasticsearch
Cassandra


Zipkin 數據持久化相關的官方文檔地址如下:
GitHub - openzipkin/zipkin: Zipkin is a distributed tracing system


Zipkin 支持的這幾種存儲方式中,內存顯然是不適用于生產的,這一點開始也說了。

而使用MySQL 的話,當數據量大時,查詢較為緩慢,也不建議使用。

Twitter 官方使用的是 Cassandra作為 Zipkin 的存儲數據庫,但國內大規模用 Cassandra 的公司較少,而且 Cassandra 相關文檔也不多。
綜上,故采用 Elasticsearch 是個比較好的選擇,關于使用 Elasticsearch 作為 Zipkin 的存儲數據庫的官方文檔如下:
elasticsearch-storage :
zipkin/zipkin-server at master · openzipkin/zipkin · GitHub
zipkin-storage/elasticsearch
zipkin/zipkin-storage/elasticsearch at master · openzipkin/zipkin · GitHub
通過 docker 的方式

docker run --env STORAGE_TYPE=elasticsearch --env ES_HOSTS=192.168.56.10:9200
openzipkin/zipkin-dependencies

使用 es 時 Zipkin Dependencies 支持的環境變量

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/65329.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/65329.shtml
英文地址,請注明出處:http://en.pswp.cn/web/65329.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小米智能啞鈴上市,代理 IP 視角下的智能健身新篇

在智能科技與健康生活深度融合的時代&#xff0c;小米以其敏銳的市場洞察力和強大的創新能力&#xff0c;不斷拓展智能生態版圖。米家智能啞鈴的發布&#xff0c;無疑是其在智能健身領域的又一重要舉措。而當我們從代理 IP 的獨特視角來審視這一產品&#xff0c;會發現其中蘊含…

基于Python的音樂播放器 畢業設計-附源碼73733

摘 要 本項目基于Python開發了一款簡單而功能強大的音樂播放器。通過該音樂播放器&#xff0c;用戶可以輕松管理自己的音樂庫&#xff0c;播放喜愛的音樂&#xff0c;并享受音樂帶來的愉悅體驗。 首先&#xff0c;我們使用Python語言結合相關庫開發了這款音樂播放器。利用Tkin…

實際開發中,常見pdf|word|excel等文件的預覽和下載

實際開發中,常見pdf|word|excel等文件的預覽和下載 背景相關類型數據之間的轉換1、File轉Blob2、File轉ArrayBuffer3、Blob轉ArrayBuffer4、Blob轉File5、ArrayBuffer轉Blob6、ArrayBuffer轉File 根據Blob/File類型生成可預覽的Base64地址基于Blob類型的各種文件的下載各種類型…

微信小程序中的 storage(本地存儲)和內存是兩個完全不同的存儲區域

這是一個非常關鍵且容易混淆的概念 既然 this.globalData.appId appId 是將 appId 存儲在內存中&#xff0c;為什么微信小程序中的 wx.getStorage 和 wx.setStorage&#xff08;本地存儲&#xff09;中沒有 appId&#xff0c;并且您提出了一個非常重要的疑問&#xff1a;stor…

【C++數據結構——查找】二叉排序樹(頭歌實踐教學平臺習題)【合集】

目錄&#x1f60b; 任務描述 相關知識 1. 二叉排序樹的基本概念 2. 二叉排序樹節點結構體定義 3. 創建二叉排序樹 4. 判斷是否為二叉排序樹 5. 遞歸查找關鍵字為 6 的結點并輸出查找路徑 6. 刪除二叉排序樹中的節點 測試說明 通關代碼 測試結果 任務描述 本關任務&a…

計算機網絡(第8版)第3章課后習題--透明傳輸

【3-11】 試分別討論以下各種情況在什么條件下是透明傳輸&#xff0c;在什么條件下不是透明傳 輸。(提示&#xff1a;請弄清什么是“透明傳輸”,然后考慮能否滿足其條件。) (1)普通的電話通信。 (2)互聯網提供的電子郵件服務。 解 答 &#xff1a; 透明傳輸是指在數據傳輸…

Linux(17)——使用 DNF 安裝和更新軟件包

目錄 一、使用 DNF 管理軟件包&#xff1a; 1、 DNF 查找軟件&#xff1a; 2、DNF 安裝軟件&#xff1a; 3、DNF 刪除軟件&#xff1a; 二、使用 DNF 管理軟件包組&#xff1a; 1、DNF 顯示組信息&#xff1a; 2、DNF 安裝組&#xff1a; 三、使用 DNF 查看事務歷史記錄…

基于32單片機的智能語音家居

一、主要功能介紹 以STM32F103C8T6單片機為控制核心&#xff0c;設計一款智能遠程家電控制系統&#xff0c;該系統能實現如下功能&#xff1a; 1、可通過語音命令控制照明燈、空調、加熱器、窗戶及窗簾的開關&#xff1b; 2、可通過手機顯示和控制照明燈、空調、窗戶及窗簾的開…

Qt 5.14.2 學習記錄 —— ? 新項目

文章目錄 1、創建2、查看代碼 ---- main.cpp3、查看代碼 ---- widgt.h4、查看代碼 ---- widgt.cpp和widget.ui5、查看代碼 ---- Empty.pro6、運行產生的中間文件 1、創建 左上角的文件&#xff0c;新建文件或項目。如果要寫一個GUI程序&#xff0c;應當選擇Application&#x…

linux wsl配置 redis遠程連接

? 1. 修改 Redis 配置文件 在 WSL 的 Redis 配置文件中&#xff0c;找到 redis.conf 或 /etc/redis/redis.conf 文件&#xff0c;編輯以下配置項&#xff1a; ?? 更新 bind 配置項 將 bind 127.0.0.1 ::1 修改為&#xff1a; bind 0.0.0.0這樣&#xff0c;Redis 將監聽所…

Transformer從零詳細解讀——DASOU講AI

1. 從全局角度概括Transformer transformer的任務是什么&#xff1f; 進一步細化 進一步細化&#xff0c;注意&#xff1a;每個encoder結構相同&#xff0c;參數不同&#xff1b;decoder同理 原論文中的圖如下&#xff1a; 2.Encoder 2.1 輸入部分 &#xff08;1&#xff09…

ARM發布Armv9.5架構:邁向更強性能與靈活性的新時代

2024年11月30日&#xff0c;ARM正式發布了其最新的Armv9.5架構&#xff0c;這是Arm技術發展的又一重要里程碑。從表中信息來看&#xff0c;Armv9.5架構的發布標志著該公司的架構系列在性能、靈活性和可擴展性方面取得了進一步突破。本次發布不僅是技術上的提升&#xff0c;更是…

【Python運維】使用Python與Docker進行高效的容器化應用管理

《Python OpenCV從菜鳥到高手》帶你進入圖像處理與計算機視覺的大門! 解鎖Python編程的無限可能:《奇妙的Python》帶你漫游代碼世界 隨著容器化技術的廣泛應用,Docker已成為現代軟件開發與運維中不可或缺的工具。Docker容器提供了一種輕量級、可移植的方式來部署和管理應用…

分布式系統架構6:鏈路追蹤

這是小卷對分布式系統架構學習的第6篇文章&#xff0c;關于鏈路追蹤&#xff0c;之前寫過traceId的相關內容&#xff1a;https://juejin.cn/post/7135611432808218661&#xff0c;不過之前寫的太淺了&#xff0c;且不成系統&#xff0c;只是簡單的理解&#xff0c;今天來捋一下…

Ubuntu 20.04安裝gcc

一、安裝GCC 1.更新包列表 user596785154:~$ sudo apt update2.安裝gcc user596785154:~$ sudo apt install gcc3.驗證安裝 user596785154:~$ gcc --version二 編譯C文件 1.新建workspace文件夾 user596785154:~$ mkdir workspace2.進入workspace文件夾 user596785154:~…

問題:Flask應用中的用戶會話(Session)管理失效

我來分享一個常見的PythonWeb開發問題&#xff1a; 問題&#xff1a;Flask應用中的用戶會話(Session)管理失效 這是一個在Flask開發中經常遇到的問題。當用戶登錄后&#xff0c;有時會話會意外失效&#xff0c;導致用戶需要重復登錄。 解決方案&#xff1a; 1. 首先&#x…

ansible-性能優化

一. 簡述&#xff1a; 搞過運維自動化工具的人&#xff0c;肯定會發現很多運維伙伴們經常用saltstack和ansible做比較&#xff0c;單從執行效率上來說&#xff0c;ansible確實比不上saltstack(ansible使用的是ssh,salt使用的是zeromq消息隊列[暫沒深入了解])&#xff0c;但其實…

.net core 線程鎖,互斥鎖,自旋鎖,混合鎖

線程鎖、互斥鎖、自旋鎖和混合鎖是多線程編程中的重要概念&#xff0c;它們用于控制對共享資源的訪問&#xff0c;避免數據競爭和不一致性。每種鎖有其特定的適用場景和特點。我們來逐一解釋它們&#xff0c;并進行比較。 1. 線程鎖&#xff08;Thread Lock&#xff09; 線程…

【ArcGISPro/GeoScenePro】檢查并處理高程數據

數據 https://arcgis.com/sharing/rest/content/items/535efce0e3a04c8790ed7cc7ea96d02d/data 數字高程模型 (DEM) 是一種柵格,可顯示地面或地形的高程。 數字表面模型 (DSM) 是另一種高程柵格,可顯示表面的高度,例如建筑物或樹冠的頂部。 您需要準備 DEM 和 DSM 以供分析…

【C++面向對象——類與對象】Computer類(頭歌實踐教學平臺習題)【合集】

目錄&#x1f60b; 任務描述 相關知識 一、不同訪問屬性成員的訪問方式 1. public成員 2. private成員 3. protected成員 二、觀察構造函數和析構函數的執行過程 1. 構造函數 2. 析構函數 三、學習類的組合使用方法 1. 類的組合概念 2. 實現示例 實驗步驟 測試說明 …