中國工商銀行基於 eBPF 技術的雲原生可觀測圖譜探索與實踐
作者:中國工商銀行金融科技研究院
在互聯網金融時代,各大銀行業務量呈爆發性增長態勢,業務模式更新迭代更加頻繁,傳統的 IT 架構越來越無法應對新業務形態所帶來的巨大沖擊與挑戰。雲原生相關技術使業務應用呈現微服務衆多、多語言開發、多通信協議等典型特徵,調用鏈路日益複雜,監控數據爆發性增長,傳統監控方式已無法適應雲原生場景。
在這個背景下,中國工商銀行積極開展雲原生可觀測圖譜的探索和實踐,針對可觀測體系中的痛難點,通過深入研究內核新技術,進一步完善雲原生技術版圖。
一、業界雲原生可觀測體系痛點
中國工商銀行早期基於業界對可觀測性 “三大支柱”(監控指標(Metrics)、日誌(Logging)和鏈路(Tracing))的定義(如圖 1 所示),建設了雲監控、日誌中心和全息監控等運維支撐平臺,初步構建了可觀測體系,支撐雲上應用監控報警和分析診斷能力。隨着運維架構轉型,開發及運維部門對節點網絡拓撲、監控指標、故障定位、性能調優等方面提出了更高的要求。爲此,中國工商銀行對業界雲原生可觀測性相關前沿技術進行了深入探索與研究。
圖 1 可觀測三大支柱
雲原生基金會的項目全景圖(CNCF Landscape)根據項目特點與價值,將提供可觀測性能力的項目分爲了監控(Monitoring)、追蹤(Tracing)、日誌(Logging)三類(如圖 2 所示)。
圖 2 CNCF Landscape
利用這些產品的組合,我們可以比較快速地搭建一個可觀測性系統。但是從業界實踐來看,這樣組裝的系統普遍存在兩大類痛點:
1)缺乏全局性的系統和網絡拓撲關係:雲原生分佈式網絡相較於傳統網絡,應用節點間網絡訪問過程經過多層的映射轉化後,網絡拓撲關係更加複雜,傳統監控工具鏈缺乏以容器、虛機、負載均衡器等系統節點爲維度的網絡調用鏈路監控拓撲數據,並且未將抓取的網絡信息與 Kubernetes 資源信息結合,無法呈現應用容器間、網絡關鍵組件的網絡拓撲,無法形成有效的可觀測性圖譜。
2)數據採集方式不具備普適性且內核態指標採集能力不足:傳統的數據採集方式通常有兩種,一是採用 SDK 集成的方式,隨應用版本部署;二是採用 Agent 的方式,採集特定埋點的數據指標。但是基於這兩種方式實現的節點拓撲關係,都依賴應用方進行適配改造,埋點的數據採集又侷限於特定語言和技術棧。而在雲原生環境中,多語言應用、不同通信協議共存的情況下,存在適配工作量極大、應用感知明顯的問題。此外,當前指標採集方面還普遍缺失對部分內核資源的細粒度監控能力,影響對問題的深入分析和調優。
二、中國工商銀行在可觀測圖譜的技術選型
要解決容器場景下的系統層網絡鏈路拓撲缺失和內核資源監控不完善的問題,可觀測性系統必須設法獲取到相關資源的統計信息。但內核通過文件系統或系統調用暴露出的信息有限,單純從用戶態切入無法抓取這些信息,只有從內核本身調用的過程中獲取調用信息纔可以補足相關能力。具體而言,即需要對應的內核 Tracepoint 或者函數執行 hook 調用抓取相關的信息,並上報到用戶態監控程序中。這樣的內核技術選型很少,從調研結果來看,目前只有兩種技術能達成上述目標,一是內核模塊編程技術,二是 eBPF 技術。
對於內核模塊編程技術而言,獲取內核數據需通過在對應的跟蹤點(Tracepoint)或者系統函數調用時執行鉤子(Hook)操作來抓取相關信息,並通過 netlink 套接字、sysfs(/sys)、sysctl(/proc/sys) 或 procfs(/proc) 等方式與監控進程進行通信並上傳採集的數據。對於普通開發,內核模塊編程技術難度較大,且極易造成系統穩定性問題。
eBPF(extended Berkeley Packet Filter)是一種能夠在內核運行沙箱程序的技術,提供了一套在內核事件和用戶程序事件發生時安全注入代碼的機制,使得非內核開發人員也可以對內核進行控制。隨着內核的發展,eBPF 逐步從最初的數據包過濾擴展到了網絡、內核、安全、跟蹤等領域,並且它的功能特性還在快速發展中。早期的 BPF 被稱爲經典 BPF(簡稱 cBPF),正是這種功能擴展使得現在的 BPF 被稱爲擴展 BPF(簡稱 eBPF)。相對來說,它是一種安全高效的內核技術,它的出現本質上是爲了解決內核迭代速度慢和系統需求快速變化的矛盾,在對內核無侵入的前提下,往內核中動態地插入一段自己的代碼,實現自定義監控及跟蹤能力,極大地降低了用戶獲取內核態豐富觀測指標的門檻(如圖 3 所示)。
圖 3 eBPF 技術初印象
內核模塊編程技術和 eBPF 技術的詳細對比(如表 1 所示):
表 1 內核模塊編程技術與 eBPF 技術對比
由此可見,利用 eBPF 技術進行內核開發相比內核模塊編程技術擁有諸多優勢,包括更嚴格的安全檢查、更穩定的 API、較高的內核開發能力、更優的數據結構與通信性能以及支持平滑升級等。同時,各大互聯網公司均採用 eBPF 技術在可觀測方面進行了實踐,如阿里雲提出了一種立足於容器界面和底層操作系統,向上關聯應用性能監測的可觀測性解決思路,通過 eBPF 技術無侵入地採集多語言、多網絡協議的各項指標,實現了一站式可觀測性平臺;字節跳動通過內核的 eBPF 採集機制獲取基於連接層面細粒度的內核網絡監控指標,爲多種運維場景提供支持。
綜上,中國工商銀行綜合考慮技術優勢、發展趨勢等多個方面,最終選擇基於 eBPF 技術進行內核相關的可觀測功能開發,彌補當前網絡拓撲和內核資源監控能力的不足,完善雲原生場景下的可觀測圖譜。
三、中國工商銀行基於 eBPF 技術的雲原生圖譜的實踐與應用
在容器化場景下,需要採集的內核數據種類多樣,爲了更好地通過 eBPF 提升對系統節點間網絡調用和內核資源的雲原生監控能力,我們引入了 eBPF 探針無侵入式地部署在宿主機上採集相關係統調用信息及應用間互訪的網絡通信報文, 通過關聯容器元數據信息後進行數據聚合壓縮入庫,並以此構建以雲上拓撲自動發現爲入口的可觀測圖譜,支持以節點系統網絡性能指標分析爲核心的一體化監控能力。
中國工商銀行的可觀測圖譜可以分爲:內核態指標採集、網絡拓撲分析、雲上可觀測圖譜三部分(如圖 4 所示):
-
內核態指標採集:在宿主機部署 eBPF 探針實時採集雲上應用訪問數據,結合容器元數據,提供雲上應用東西向訪問關係的原始數據以及網絡通信報文。
-
網絡拓撲分析:負責分析處理節點之間的調用關係,系統調用分析模塊則負責處理應用系統調用的分類、聚合與信息關聯。
-
雲上可觀測圖譜:提供面向業務和運維場景的可視化分析能力,以雲上拓撲發現爲入口提供面向應用和運維場景的可視化分析能力,支持聯動全息監控、雲監控以及日誌中心進行關聯分析,形成雲原生可觀測圖譜。
圖 4 eBPF 可觀測圖譜架構
1、內核態指標採集
將 eBPF 探針通過 daemonset 的形式無侵入式地部署在宿主機上,負責採集容器網絡報文、系統調用、資源使用詳情信息,同時從 master 獲取容器關聯信息。(如圖 5 所示)
① 負載業務間的網絡信息採集:eBPF 探針採集不同網絡環境下的網絡通信報文等數據,以支持分析並展示負載間網絡通信關係鏈與通信情況,包括帶寬、TPS、平均響應時間、建聯失敗率、錯誤率等。
②負載的系統調用與資源監控的採集:高資源消耗系統調用、異常卡死系統調用;用戶態與內核態資源使用情況的採集與展示,例如 cpu、內存、磁盤 io、半連接數、全連接數、頁錯誤、文件句柄使用量、SWAP 內存使用量、inodes 使用量及可用量等。
③負載的容器元數據採集:eBPF 探針通過集羣 master 獲取集羣以及容器元數據信息,對相關數據進行過濾、填充、採集、收集。
圖 5 內核態指標採集
2、網絡調用分析
接收 eBPF 探針採集的指標數據,採用分類聚合算法與 Kubernetes 元數據進行關聯分析、聚合存儲,形成完整的節點間調用網絡拓撲關係數據,同時爲規則匹配報警提供支撐(如圖 6 所示)。
圖 6 網絡調用分析
3、雲上可觀測圖譜
基於內核態指標採集和節點間調用網絡拓撲分析的入庫數據,構建面向用戶的可觀測圖譜,具備豐富的系統調用指標及網絡性能指標關聯查詢能力,面向一線問題支持人員和開發人員,提供了以下常見應用場景:
(1)應用拓撲感知
在當前分佈式服務的架構下,發生問題後進行分析定位是一個非常複雜的過程,不僅要求問題分析人員對全局應用有大致瞭解,還需熟知各個應用的特性、調用關係、部署方式。而應用拓撲感知(如圖 7 所示)則提供了一個非常強大的功能:通過無侵入式採集的數據建立節點間全局的調用拓撲關係,在異常應用定位時,可以讓問題一線人員非常快速的感知存在網絡問題的節點。
圖 7 全局應用拓撲感知
(2)鏈路追蹤分析
區別於傳統的分佈式追蹤,基於 eBPF 的鏈路追蹤不止能跟蹤某次調用,還具有無入侵、語言框架無關的特性,請求如果包含了分佈式追蹤 TraceID,也能自動識別,方便聯動分佈式監控平臺進行排查。對某次請求來說,可以精確看到接收、處理、迴應、耗時的數據,方便問題排查人員從問題節點定位到問題接口,從而進一步輔助問題的解決。(如圖 8 所示)。
圖 8 單次請求信息
(3)網絡性能監測
通過監測 HTTP 請求、平均響應時間、建鏈失敗率、全連接半連接隊列等網絡指標輔助定位節點及鏈路訪問連通性或性能問題。(如圖 9 所示)。
圖 9 網絡性能監測
(4)黃金指標分析
黃金指標是谷歌針對大量分佈式監控實踐的經驗總結,4 個黃金指標可以在服務級別幫助衡量終端用戶體驗、服務終端、業務影響層面的問題。可觀測平臺層支持請求數、響應時間、錯誤率、慢調用情況,整體反映應用健康狀態,快速評估故障影響,節約故障定位時間(如圖 10 所示)。
圖 10 黃金指標 - 平均響應時間
(5)上下游關聯分析
在現有的雲原生環境中,應用間的拓撲非常複雜,除了提供全局的拓撲感知,快速定位問題節點後,對於問題分析人員來說,如何在具體問題節點儘可能收集更多的信息變成了關鍵所在。可觀測平臺不僅可以高亮顯示問題節點的上下游(如圖 11 所示),還關聯了告警信息、黃金指標、Kubernetes 元信息等,在一個頁面就可以提供問題分析人員多維度的展示,有助於加速問題排查。
圖 11 高亮顯示上下游
(6)規則告警與壓縮
對於一個可觀測平臺來說,及時可靠的告警是發現問題 “第一現場” 最重要的功能,平臺提供了預設模板的告警規則設定,支持通過選擇告警檢測對象、配置觸發條件、設置告警內容和通知人員三步設置。告警檢測方面,平臺支持 Pod、節點、組件、工作負載、應用等五層豐富指標的告警,同時支持通過對指標進行邏輯運算來完成告警配置。告警規則配置方面,平臺已經預設了模板,用自然化語言的方式,方便監控人員個性化的配置。最終經過壓縮上報,精細化告警發送,減少一線處理人員的告警處理數量。
四、未來展望
中國工商銀行將繼續深入推進 eBPF 技術研究工作,積極探索雲原生可觀測性最佳實踐,將雲原生可觀測圖譜打造成爲開發及運維人員面對系統異常時進行問題定位、分析、系統調優的首選工具。隨着 eBPF 技術的應用場景被不斷挖掘,業界湧現的各類開源產品已經覆蓋安全、網絡、跟蹤與性能分析、觀測與監控等領域。中國工商銀行將持續關注業界 eBPF 技術及開源社區發展動態,進一步拓展 eBPF 技術在其它領域的能力並挖掘行內的落地場景。
本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源:https://mp.weixin.qq.com/s/MO51v7Td90929C-NCzUlCg