?

基于eBPF的配置庫應用拓撲自動發現功能的實現

2024-03-25 06:03李強李光兆
互聯網周刊 2024年4期

李強 李光兆

摘要:在運維數字化轉型、智能化發展的時代背景下,配置管理庫是數字化運維必不可少的核心工具,其中應用拓撲是配置管理庫的一個重要功能,也是配置管理數據的一個重要消費場景。與傳統手工繪制的應用拓撲不同,配置管理庫中的應用拓撲是依托于配置數據的動態拓撲圖,但其仍依賴配置數據的準確性和更新的實時性。eBPF技術以在操作系統中進行動態插裝的方式,通過采集IP和端口間的訪問關系,實時跟蹤獲取每個節點的信息,從而自動獲取應用之間的調用關系,建立應用拓撲的二、三層關系,減少配置庫的維護成本,增加應用拓撲的準確性和實時性。

關鍵詞:配置管理庫;應用拓撲;動態跟蹤;eBPF技術

引言

近年來,信息化、網絡化技術迅猛發展,信息系統在各行業的日常生產工作中承擔的作用越來越大,信息系統的運維安全日益重要。隨著各行業數據中心的投入運營,虛擬化、云計算、大數據等技術的廣泛應用,數字化升級進程持續加速,IT基礎設施的種類和數量激增,信創產品的自主研發和技術創新全面加速,信息系統架構的復雜程度也不斷提升,信息系統運維工作,特別是管理組成信息系統的IT資產和資源需要適應新形勢、應對新挑戰。

信息系統配置庫即CMDB,是ITIL框架的配置管理流程中的基礎部分,是通過獲取、維護,檢查企業的IT資源,從而高效控制與管理不斷變化的IT基礎架構與IT服務,并為其他系統提供準確的配置信息,如任務調度、運維工單、發布管理等。一個實時準確的配置庫是信息化時代安全運維的基石,也是運維管理的核心。

其中,應用拓撲是配置管理庫的一個重要功能,也是配置管理數據的一個重要消費場景。應用拓撲圖是以節點和邊為基礎,以一個應用為視角,描繪組成該應用的各個IT資源和資產的部署分布及節點狀態的功能圖。應用拓撲可以在異常告警精準化、變更風險管控、故障根因分析等場景中起到關鍵作用。然而傳統的靜態拓撲圖,依賴于手工搭建,精確程度較低,維護成本較高,無法達到可靠、實時、準確的程度。與傳統手工繪制的應用拓撲不同,配置管理庫中的應用拓撲是依托于配置數據的動態拓撲圖,但其仍依賴配置數據的準確性和更新的實時性。本文提出一種基于eBPF的配置庫應用拓撲自動發現的方法,并進行了代碼實現,根據配置庫中的配置關系,采集IP和端口間的訪問關系,實時跟蹤獲取每個節點的信息,從而自動獲取應用之間的調用關系。

1. eBPF技術

1.1 eBPF簡介

eBPF是基于BPF的擴展,BPF是類Unix系統上數據鏈路層的一種原始接口,BPF提供了原始鏈路層封包的收發。

eBPF技術是擴展的伯克利數據包過濾器,起源于Linux內核,可以在操作系統內核等特權上下文中運行該程序。eBPF無須更改Linux內核的源代碼,且不需要重載內核模塊的前提下,對內核功能進行擴展,可以讓內核變得更加靈活和強大,從而達到動態追蹤的功能。這些程序可以用于過濾網絡數據包、收集內核統計信息、監控和調試等目的[1]。

1.2 eBPF的架構

eBPF的架構分為用戶態和內核態,一個完整的eBPF程序包含用戶態程序和內核態程序兩部分。

eBPF用戶態程序是指在用戶空間范圍內運行的程序,負責加載和管理eBPF的內核態程序,以及與內核態程序進行交互和數據處理,可以使用不同的語言和工具來編寫。一種常用的工具是BCC,提供Python和C語言的API,以及一些現成的eBPF工具,可以進行編寫和運行eBPF程序。用戶空間程序負責加載BPF字節碼至內核中,如果需要也會負責讀取內核回傳的統計信息或者事件詳情[2]。

eBPF內核態程序是指在操作系統內核空間中運行的程序,負責實現eBPF的主要功能和邏輯。內核中的BPF字節碼負責在內核中執行特定事件,如需要也會將執行的結果通過maps或者perf-event事件發送至用戶空間。其中用戶空間程序與內核BPF字節碼程序可以使用map結構實現雙向通信,這為內核中運行的BPF字節碼程序提供了更加靈活的控制。

用戶空間程序與內核中的BPF字節碼交互的流程有如下步驟:

(1)使用LLVM或者GCC工具將編寫的BPF代碼程序編譯成BPF字節碼;

(2)使用加載程序Loader將字節碼加載至內核;

(3)內核使用驗證器組件保證執行字節碼的安全性,以避免對內核造成災難,在確認字節碼安全后將其加載對應的內核模塊執行;

(4)內核中運行的BPF字節碼的程序可以使用兩種方式將數據回傳至用戶空間。maps方式可用于將內核中實現的統計摘要信息(比如測量延遲、堆棧信息)等回傳至用戶空間。perf-event用于將內核采集的事件實時發送至用戶空間,用戶空間程序實時讀取分析。

2. 系統設計與實現

2.1 eBPF插件設計與實現

eBPF程序可以通過一些工具包如BCC、bpftrace和ebpf_exporter來編寫和加載。

本文的eBPF插件主要是基于ebpf_exporter,可以將eBPF程序的輸出轉換為Prometheus的指標,從而實現對網絡數據包的監控和分析。此外還需要選擇合適的掛載點,如kprobe、uprobe、tracepoint、xdp等,來捕獲感興趣的事件和數據,如進程名、文件名、網絡包等。該插件的程序流程圖如圖1所示。

在插件啟動時,啟動ebpf_exporter并加載eBPF的配置文件,配置文件中包含BPF代碼和導出指標的規則。ebpf_exporter會判斷配置文件是否有效,如果無效,就返回錯誤并結束,如果有效,就繼續執行。接著ebpf_exporter會編譯BPF代碼,并將其加載到內核中,同時創建一個BPFmap和一個perfevent用于存儲和傳輸數據,加載到內核后ebpf_exporter開始監聽端口(默認是9435),等待Prometheus的請求。Prometheus定期從ebpf_exporter的端口拉取數據,并將其存儲在Mongo和MySQL數據庫中,最后在配置庫響應模塊中進行調用[3]。

整個eBPF程序的核心邏輯是在兩個k_probe上掛載回調函數,分別是tcp_v4_connect和tcp_rcv_state_process,分別用于捕獲TCP連接的開始和結束。

2.2 應用拓撲自動發現功能的實現

本次eBPF采集插件使用僅支持Linux操作系統,系統內核版本需滿足以下任意要求:版本大于等于4.14或等于3.10.0-693、3.10.0-957、3.10.0-1160。

系統主要通過安裝eBPF插件后,通過配置庫topic數據能夠發現B端的資源,獲取資源信息,結合CMDB中手動維護配置(系統、應用單元、模塊實例之間的層級包含關系)。建立應用拓撲第二、三層關系時,通過在topic中找到的A、B端的資源能通過關聯關系找到對應的應用單元和系統。找到資源和建立關系數據,并進行資源數據插入[4]。

2.2.1 數據采集格式

系統通過eBPF技術采集IP和port間的訪問關系,從而自動獲取應用之間的調用關系,采集數據上報的數據格式為src_ip,src_port,dst_ip,dstn_port;上報源到目標的訪問關系,源指定IP和監聽接口,可指定proc的資源類型。

2.2.2 數據處理入庫

關系生成分為兩級目標。

一級目標是生成模塊實例-訪問-模塊實例、模塊實例-訪問-數據庫實例、模塊實例-訪問-中間件實例3類關系。

二級目標是生成應用模塊-應用模塊之間的訪問關系、應用模塊-數據庫、應用模塊-模板的訪問關系,甚至是系統與系統之間的訪問關系、系統與中間件服務、數據庫服務的依賴關系。

數據處理規則分為兩部分,在上報的條目中,根據訪問源或目標的IP和端口信息,在配置庫中匹配目標關系兩端的實例創建關系動作執行,異常情況反饋;在一級目標完成的基礎上,根據已有的實例關系兩端,各自所關聯的上級所屬應用關聯目標,建立之間的關系。

2.2.3 數據模型調整

使用eBPF插件,需要調整相應的數據模型,在應用拓撲的繪制中,需要新增與eBPF聯調所需的模板關系定義,新增模型方案如下:

通過應用實例之間的訪問關系發現,建立各層應用之間的訪問關系模型,增加和修改模板關系包括:

(1)模板“部署實例”訪問“部署實例”,約束:N:N;

(2)模板“部署實例”訪問“數據庫實例”,約束: N:N;

(3)模板“部署實例”訪問“中間件實例”,約束:N:N;

(4)“應用單元”訪問“應用單元”,約束:N:N;

(5)“應用單元”訪問“數據庫實例”,約束:N:N;

(6)“系統”訪問“系統”,約束:N:N;

(7)“中間件實例”訪問“部署實例”,約束:N:N;

(8)“中間件實例”訪問“數據庫實例”,約束:N:N;

(9)“中間件實例”訪問“中間件實例”,約束:N:N;

(10)修改部署實例的“服務端口”字段的數據類型,由string改為list;

(11)“應用單元”包含“部署實例”,約束:1:N。

2.2.4 呈現效果

在配置庫中,通過物理子系統節點,自動生成該物理子系統下的訪問關系拓撲入口。從應用模塊進入物理子系統節點,可自動發現默認的展示路徑包含:物理子系統(訪問)→物理子系統;物理子系統(包含)→應用模塊;應用模塊(訪問)→應用模塊;應用模塊(包含)→應用實例;應用實例(訪問)→應用實例;應用實例(訪問)→DB實例;應用實例(訪問)→中間件實例;中間件實例(訪問)→應用實例;中間件實例(訪問)→中間件實例;中間件實例(訪問)→DB件實例。

結語

本文在簡要介紹和分析eBPF技術的基礎上,詳細闡述了eBPF技術的架構、匯編指令等內容,并在使用開源的react-flow和dagre庫搭建的配置管理庫原型系統的基礎上,介紹了eBPF采集插件的設計與實現,通過采集插件和數據模型的配置,實現了配置庫原型系統中應用拓撲的二、三層關系的自動發現功能??傮w而言,通過eBPF插件對操作系統動態跟蹤,實時采集調用關系,從而獲得實時更新的應用拓撲。在實際運維工作中,尤其是應用資源統計、應用節點控制、故障定位等實際運維場景中,可以快速幫助運維人員快速找到應用中需要被關注的節點信息[5]。配置庫應用拓撲自動發現功能在未來運維自動化、智能化發展中將具有決定性意義。

參考文獻:

[1]劉偉,廖平.eBPF技術在操作系統動態跟蹤中的應用研究[J].中國金融電腦,2022(8):81-84.

[2]姜歐涅.基于eBPF的網絡數據包捕獲與分析系統的設計與實現[D].武漢:華中科技大學,2020.

[3]薛擎宇.基于eBPF的報文快速處理技術研究[D].成都:電子科技大學,2023.

[4]孫建強.基于時序拓撲結構特征的會話推薦系統設計與實現[D].成都:電子科技大學,2022.

[5]高巍.基于操作系統eBPF在云原生環境下的技術研究[J].電子技術與軟件工程,2022(17):70-74.

作者簡介:李強,本科,助理工程師,研究方向:計算機技術及應用。

基金項目:中國鐵路信息科技集團有限公司科技研究開發計劃(編號:2022A05)。

91香蕉高清国产线观看免费-97夜夜澡人人爽人人喊a-99久久久无码国产精品9-国产亚洲日韩欧美综合