Apache Dubbo 云原生可觀測性的探索與實踐

作者:宋小生 - 平安壹錢包中間件資深工程師

Dubbo3 可觀測能力速覽

Apache Dubbo3 在云原生可觀測性方面完成重磅升級,使用 Dubbo3 最新版本,你只需要引入 dubbo-spring-boot-observability-starter 依賴,微服務集群即原生具備以下能力:

能力一:可視化查看集群、單機流量指標與健康狀態

Dubbo 3.2 最新版本支持以應用、單機、單條服務等多種不同粒度觀測運行狀態,包括 qps、rt、線程池、錯誤分類統計等。

在這里插入圖片描述

能力二:全鏈路追蹤

Dubbo 3.2 最新版本通過內置鏈路過濾器在 RPC 請求中對鏈路數據進行采集,采集之后通過導出器將鏈路數據導出到各大廠商。

在這里插入圖片描述

https://cn.dubbo.apache.org/zh-cn/overview/tasks/observability/

云原生可觀測性的探索

云原生升級的挑戰

高質量交付的前一部分有 DevOps 保證開發與測試的質量與效率,后有云原生保證運維部署效率與質量,但是大規模快速迭代意味著頻繁變更,變更與系統運行帶來的穩定性問題不能被忽視,比如宕機,網絡與系統異常等,很多未知的問題難以避免,借助可觀測系統來及時感知問題、高效分析異常、快速恢復系統,提前規避已知問題,深度挖掘未知問題,高效提升運維質量,可以看到建設一個完善的可觀測平臺對于發現已知和未知異常,提升系統的穩定性是非常必要的。

image.png

Dubbo 可觀測建設目標

Dubbo 作為微服務 RPC 基礎框架直接建設大而全的可觀測系統與定位不符合也不是很現實,但是可以從自身出發提供更多的基礎監控數據來為企業建立可觀測系統提供助力,可觀測性與傳統單維度監控不同,更關注的是數據的關聯性,通過單維度和多維度角度整體觀測和分析問題,首先從流行的三大支柱指標出發,在此基礎之上,Dubbo 提供多維度聚合與非聚合指標幫助用戶快速發現問題與診斷問題,多維指標中進而可以通過應用、主機等標簽信息關聯到鏈路系統,鏈路系統提供了服務請求級別的鏈路性能與異常問題分析功能,Dubbo 通過提供鏈路門面對接各大全鏈路廠商,鏈路分析之后可以通過鏈路數據例如:TraceId,SpanId 自定義數據等來追蹤到詳細日志,詳情日志中 Dubbo 側提供了豐富的專家建議與錯誤碼供開發與運維同學快速診斷與定位問題。

在這里插入圖片描述

Dubbo 多維度指標體系

Dubbo 多維度指標體系建設中從縱向和橫向兩個角度來看,縱向 Dubbo 側提供簡易接入的門面外觀,然后將系統中采集到的指標存儲在內存指標容器中,接著根據指標類型決定是否進行聚合計算,最后將指標導出到不同的指標系統。從橫向角度來看采集維度也覆蓋到容易出問題的 RPC 請求鏈路,三大中心交互與線程資源使用情況等場景。

在這里插入圖片描述

Dubbo 多維度指標體系采集哪些指標?

前面介紹了大面上的指標采集,但是 Dubbo 應該采集哪些詳細的指標呢?接下來可以看到 Dubob 采集指標時參考的一些方法論。

根據谷歌 SRE 書:Google 針對大量分布式監控的經驗總結提出 4 個黃金指標(延遲、流量、錯誤以及飽和度)可以在服務級別幫助衡量終端用戶體驗、服務中斷、業務影響等層面的問題。

在這里插入圖片描述

RED 方法(來自 Tom Wilkie),RED 方法則關注請求、實際工作以及外部視角(即來自服務消費方的視角)包含:速率、錯誤與持續時間。

在這里插入圖片描述

USE 方法(來自 Brendan Gregg):USE 方法主要著眼于資源內部,包含:利用率、飽和度與錯誤。

在這里插入圖片描述

Dubbo 多維度指標體系接入-導出到 QOS

多維度指標體系在 3.2 之后的版本已經發布與持續迭代中,對用戶來說只需要引入一個依賴即可:

<dependency><groupId>org.apache.dubbo</groupId>   <artifactId>dubbo-spring-boot-observability-starter</artifactId>        <version>3.2.x</version>
</dependency>

依賴引入之后默認情況下一些關鍵指標會默認被打開,只需要在命令行訪問當前服務 22222 服務端口和 metrics 路徑即可獲取到指標數據,其中 22222 端口是 Dubbo 提供的服務質量,健康管理端口可以用過 QOS 配置進行修改。

在這里插入圖片描述

查詢到的 Dubbo 指標以命名:dubbo_type_action_unit_otherfun 的格式進行展現。

當然也會有用戶直接使用 SpringBoot 管理端口的情況,針對這種場景 Dubbo 側已經做了自動適配直接使用 SpringBoot 導出普羅米修斯格式的指標數據即可,如下配置所示:

在這里插入圖片描述

在訪問 SpringBoot 管理端口查詢指標數據時就可以看到 SpringBoot 內置的一些指標和 Dubbo 提供的一些指標一起展示給用戶了。

在這里插入圖片描述

Dubbo 多維度指標體系 Prometheus 查詢

前面直接通過 curl 命令訪問指標服務獲取到的只是瞬時的指標數據,對于指標數據我們往往更需要的是時序化的向量數據,這時候就要借助普羅米修斯來進行在外部采集,存儲 Dubbo 指標,對于傳統應用部署在物理機和虛擬機的服務可以使用靜態,基于文件或者基于自有 CMDB 系統建設的指標發現服務,當然后續也可以使用 Dubbo Admin 為指標系統提供的服務發現服務,對于部署在 K8s 中的系統來說可以直接借助 K8s 支持的服務發現,接入 Prometheus 自動采集配置如下:

在這里插入圖片描述

普羅米修斯中查詢指標如下所示:

在這里插入圖片描述

Dubbo 多維度指標體系 Grafana 展示

普羅米修斯側重于采集指標和存儲指標等場景,在展示指標這里相對簡陋,Grafana 提供了豐富的指標面板,使用 Grafana 來建立指標大盤更直觀,也更容易,可以看到下面的圖片中提供了多維度的篩選如應用級、實例級,接口級等場景對服務數據進行查詢。在指標監控大盤中也可以看到基于前面指標方法論的一些維度指標,比如流量、請求數、延遲、錯誤,飽和度等。另外也可以看到一些應用于實例信息比如 Dubbo 版本分布,實例分布等。

在這里插入圖片描述

Dubbo 鏈路追蹤門面建設

Agent 用戶接入簡單,但是動態修改字節碼的形式來提供支持,風險較大,一個代理層 agent 只做一個 Dubbo 層的鏈路功能似乎有點大材小用,Dubbo 定位為微服務 RPC 框架,做通用的鏈路門面相對更好一些,專業的事情交給專業的人做,Dubbo 通過適配各大全鏈路系統來讓用戶接入更簡單。

在這里插入圖片描述

Dubbo 鏈路追蹤門面選型

業界比較通用的 OpenTelemetry 鏈路追蹤門面更傾向于標準統一的規范,支持各大廠商,同時也是與 CNCF 孵化的項目,Micrometer 的優勢在于與指標埋點所用依賴來源相同,并且在 SpringBoot3 中也默認集成用戶接入更為方便,另外 Micrometer 定位為可觀測門面與 Dubbo 鏈路系統建設的定位相符,其中也可以通過橋接的形式來橋接 OpenTelemetry。

在這里插入圖片描述

Micrometer + OpenTelemetry Bridge:

在這里插入圖片描述

Dubbo 鏈路追蹤結構

Dubbo 通過內置鏈路過濾器在 RPC 請求中對鏈路數據進行采集,采集之后通過導出器將鏈路數據導出到各大廠商。

在這里插入圖片描述

Dubbo 鏈路追蹤接入

Dubob 鏈路追蹤門面已經發布,需要接入鏈路追蹤系統只需要簡單的引入對應鏈路追蹤的 starter 集成包然后進行單件的配置即可,更詳細的接入手冊可以參考文檔和案例。 [ 1]

在這里插入圖片描述

在鏈路追蹤配置中可以配置開關,采樣率,導出器等配置。

在這里插入圖片描述

最后鏈路追蹤系統往往也需要通過鏈路 id 與日志進行關聯來分析更詳細的根因,這個時候就需要提前在日志配置中增加日志 MDC 打印的配置了,如下 traceId 和 spanId 的獲取。

在這里插入圖片描述

Dubbo 鏈路追蹤 Zipkin

這里是 Dubbo 接入鏈路追蹤 Zipkin 的展示,可以看到一些接口的性能與元數據。

在這里插入圖片描述

Dubbo 鏈路追蹤 Skywalking

這里是 Dubbo 接入鏈路追蹤 Skywalking 的展示,通過鏈路 id 檢索到的請求級別的鏈路分析。

在這里插入圖片描述

Dubbo 日志管理

Dubbo 日志管理異常

Dubbo 框架發展多年,功能越來越豐富, 其中包含了與三大中心的交互,客戶端服務端的交互,這種內外部交互的場景更容易出現一些異常,如果遇到問題通過通過觀察日志經常摸不著頭腦,最后通過分析代碼來定位根因又是相對頭疼的事情。

在這里插入圖片描述

遇到問題不知道原因:

在這里插入圖片描述

Dubbo 日志管理專家建議

如果仔細觀察 Dubbo3.x 新版本打印出的日志就可以看到日志中會打印一個問題幫助手冊,當發現問題時候復制此鏈接在瀏覽器中打開就可以看到出現異常日志時候的專家建議,比如下圖所示的問題原因排查步驟,隨著 Dubbo 的發展專家建議也會越來越詳細,當讓這個過程要建設的更為完善就需要用戶、開發者一起參與進來,Dubbo 社區非常 Open,鼓勵用戶、開發者一起參與進來進行建設。

在這里插入圖片描述

在這里插入圖片描述

Dubbo 可觀測性-穩定性實踐

最后就是圍繞整個可觀測平臺來做穩定性實踐了,穩定性實踐中通過觀測服務健康狀況、排查分析系統問題、最后快速恢復系統。其中觀測系統異常的情況可以通過值班人員主動觀測監控大盤,也可以將異常分析告警,被動接收到告警郵件、IM、短信、電話等來及時發現問題,發現異常時可以借助指標來分析聚合與非聚合的服務信息來定位異常位置,然后通過鏈路追蹤系統找到服務級別的異常進行分析,最后也可以根據鏈路信息找到詳細的日志來分析異常上下文排除根因,排查的過程要借助整個觀測平臺以快速恢復系統為目標通過流量隔離,服務降級等策略恢復系統減少損失,事后可以借助可觀測平臺提供的這些持久化的信息來詳細分析異常與規律來定位根因。

在這里插入圖片描述

[1] 文檔和案例

https://cn.dubbo.apache.org/zh-cn/overview/tasks/observability/tracing/

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

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

相關文章

貪心算法實現找零問題

思路&#xff1a; 使用 貪心算法 的思想 題目&#xff1a; 檸檬水找零 在檸檬水攤上&#xff0c;每一杯檸檬水的售價為5美元。顧客排隊購買你的產品,一次購買一杯。 每位顧客只買一杯檸檬水,然后向你付5美元、10美元或20美元。必須給每個顧客正確找零 注意,一開始你手頭沒有任何…

PSP - 基于擴散生成模型預測蛋白質結構 EigenFold 算法與環境配置

歡迎關注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/132357976 Paper: EigenFold: Generative Protein Structure Prediction with Diffusion Models EigenFold 是用于蛋白質結構預測的擴散生成模型…

使用深度學習實現的圖像偽造檢測: 一個Python畢業項目指南

1. 引言 在當前的數字化時代&#xff0c;圖像處理和偽造技術越來越先進。從影視制作到社交媒體&#xff0c;人們常常與修飾或改變過的圖片打交道。雖然這為創意產業提供了無數機會&#xff0c;但也為不誠實的內容創造者帶來了偽造和篡改圖像的機會。因此&#xff0c;圖像偽造檢…

Selenium手動和自動兩種方式啟動Chrome驅動

1. 自動啟動chrome驅動(已經安裝了Selenium庫和Chrome驅動) 要使用Selenium自動跟隨自帶的Chrome驅動&#xff0c;你需要首先確保你已經安裝了Selenium庫和Chrome驅動。然后&#xff0c;你可以按照以下步驟進行操作&#xff1a; 導入必要的庫&#xff1a; from selenium imp…

【面試八股文】每日一題:談談你對線程的理解

每日一題-Java核心-談談你對線程的理解【面試八股文】 Java線程是Java程序中的執行單元。一個Java程序可以同時運行多個線程&#xff0c;每個線程可以獨立執行不同的任務。線程的執行是并發的&#xff0c;即多個線程可以同時執行。 1. 線程的特點 Java中的線程有如下的特點 輕…

react-native-webview使用postMessage后H5不能監聽問題(iOS和安卓的兼容問題)

/* 監聽rn消息 */ const eventListener nativeEvent > {//解析數據actionType、extraconst {actionType, extra} nativeEvent.data && JSON.parse(nativeEvent.data) || {} } //安卓用document&#xff0c;ios用window window.addEventListener(message, eventLis…

Jenkins-發送郵件配置

在Jenkins構建執行完畢后&#xff0c;需要及時通知相關人員。因此在jenkins中是可以通過郵件通知的。 一、Jenkins自帶的郵件通知功能 找到manage Jenkins->Configure System&#xff0c;進行郵件配置&#xff1a; 2. 配置Jenkins自帶的郵箱信息 完成上面的配置后&#xf…

DiffusionDet: Diffusion Model for Object Detection

DiffusionDet: Diffusion Model for Object Detection 論文概述不同之處整體流程 論文題目&#xff1a;DiffusionDet: Diffusion Model for Object Detection 論文來源&#xff1a;arXiv preprint 2022 論文地址&#xff1a;https://arxiv.org/abs/2211.09788 論文代碼&#xf…

kubesphere 使用流水線對接 sonar

官方文檔&#xff1a;使用圖形編輯面板創建流水線 創建憑證 創建 sonar 憑證 創建 gitlab 憑證 創建流水線 創建流水線&#xff0c;編輯流水線 自定義流水線 拉取代碼 代理選 kubernetes&#xff0c;label 填maven 添加步驟 - git 填寫 git 地址&#xff0c;選…

CSS 背景屬性

前言 背景屬性 屬性說明background-color背景顏色background-image背景圖background-repeat背景圖平鋪方式background-position背景圖位置background-size背景圖縮放background-attachment背景圖固定background背景復合屬性 背景顏色 可以使用background-color屬性來設置背景…

【計算機設計大賽】國賽一等獎項目分享——基于多端融合的化工安全生產監管可視化系統

文章目錄 一、計算機設計大賽國賽一等獎二、項目背景三、項目簡介四、系統架構五、系統功能結構六、項目特色&#xff08;1&#xff09;多端融合&#xff08;2&#xff09;數據可視化&#xff08;3&#xff09;計算機視覺&#xff08;目標檢測&#xff09; 七、系統界面設計&am…

esp-idf的電源管理——軟件的總體結構

idf的電源管理在軟件上,從上到下可以分為三層: freeRTOS idle taskesp pmesp sleepesp sleep又可以進一步細分為兩層,分別是軟件sleep flow以及最終落實到硬件寄存器的rtc sleep。更具體的,函數調用關系如下: #mermaid-svg-WunrsW7XSArlvBnG {font-family:"trebuchet…

前端打開后端返回的HTML格式的數據

前端打開后端返回的 HTML格式 的數據&#xff1a; 后端返回的數據格式如下示例&#xff1a; 前端通過 js 方式處理&#xff08;核心代碼如下&#xff09; console.log(回調, path); // path 是后端返回的 HTML 格式數據// 必須要存進localstorage&#xff0c;否則會報錯&am…

步入React正殿 - State進階

目錄 擴展學習資料 State進階知識點 狀態更新擴展 shouldComponentUpdate PureComponent 為何使用不變數據【保證數據引用不會出錯】 單一數據源 /src/App.js /src/components/listItem.jsx 狀態提升 /src/components/navbar.jsx /src/components/listPage.jsx src/A…

Uniapp連接藍牙設備

一、效果圖 二、流程圖 三、實現 UI <uni-list><uni-list :border="true"><!-- 顯示圓形頭像 -->

C語言案例 判斷是否為回文數-06.1

題目&#xff1a;隨機輸入一個5位數&#xff0c;判斷它是不是回文數 步驟一&#xff1a;定義程序的目標 編寫C程序&#xff0c;隨機輸入一個5位數&#xff0c;判斷它是不是回文數 步驟二&#xff1a;程序設計 原理&#xff1a;即12321是回文數&#xff0c;個位與萬位相同&#…

SpringBoot + Vue 微人事(十)

職位管理前后端接口對接 先把table中的數據展示出來&#xff0c;table里面的數據實際上是positions里面的數據&#xff0c;就是要給positions:[] 賦上值 可以在methods中定義一個initPosition方法 methods:{//定義一個初始化positions的方法initPositions(){//發送一個get請求…

2.HTML、CSS

文章目錄 1.什么是HTML、CSS2.HTML的語法特點3.HTML的快速體驗4.開發工具推薦&#xff1a;VS Code5.基本標簽&樣式5.1.標題5.1.1.標題排版5.1.2.標題樣式5.1.3.超鏈接 5.2.正文5.2.1.正文排版5.2.2.頁面布局 表格、表單標簽表格標簽表單標簽 1.什么是HTML、CSS HTML即超文本…

在vue中如何重新渲染所有組件

文章目錄 一、在根組件中給router-view動態綁定上v-if。二、調用重新加載下級組件方法。 在有些需求情況下需要重新加載頁面或者觸發組件的生命周期&#xff0c;但是刷新對用戶體驗不太友好&#xff0c;這個時候我們可以通過provide/inject可以輕松實現跨級訪問祖先組件的數據&…