• <tr id="yyy80"></tr>
  • <sup id="yyy80"></sup>
  • <tfoot id="yyy80"><noscript id="yyy80"></noscript></tfoot>
  • 99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

    基于eBPF的配置庫(kù)應(yīng)用拓?fù)渥詣?dòng)發(fā)現(xiàn)功能的實(shí)現(xiàn)

    2024-03-25 06:03:40李強(qiáng)李光兆
    互聯(lián)網(wǎng)周刊 2024年4期

    李強(qiáng) 李光兆

    摘要:在運(yùn)維數(shù)字化轉(zhuǎn)型、智能化發(fā)展的時(shí)代背景下,配置管理庫(kù)是數(shù)字化運(yùn)維必不可少的核心工具,其中應(yīng)用拓?fù)涫桥渲霉芾韼?kù)的一個(gè)重要功能,也是配置管理數(shù)據(jù)的一個(gè)重要消費(fèi)場(chǎng)景。與傳統(tǒng)手工繪制的應(yīng)用拓?fù)洳煌?,配置管理?kù)中的應(yīng)用拓?fù)涫且劳杏谂渲脭?shù)據(jù)的動(dòng)態(tài)拓?fù)鋱D,但其仍依賴(lài)配置數(shù)據(jù)的準(zhǔn)確性和更新的實(shí)時(shí)性。eBPF技術(shù)以在操作系統(tǒng)中進(jìn)行動(dòng)態(tài)插裝的方式,通過(guò)采集IP和端口間的訪問(wèn)關(guān)系,實(shí)時(shí)跟蹤獲取每個(gè)節(jié)點(diǎn)的信息,從而自動(dòng)獲取應(yīng)用之間的調(diào)用關(guān)系,建立應(yīng)用拓?fù)涞亩⑷龑雨P(guān)系,減少配置庫(kù)的維護(hù)成本,增加應(yīng)用拓?fù)涞臏?zhǔn)確性和實(shí)時(shí)性。

    關(guān)鍵詞:配置管理庫(kù);應(yīng)用拓?fù)?;?dòng)態(tài)跟蹤;eBPF技術(shù)

    引言

    近年來(lái),信息化、網(wǎng)絡(luò)化技術(shù)迅猛發(fā)展,信息系統(tǒng)在各行業(yè)的日常生產(chǎn)工作中承擔(dān)的作用越來(lái)越大,信息系統(tǒng)的運(yùn)維安全日益重要。隨著各行業(yè)數(shù)據(jù)中心的投入運(yùn)營(yíng),虛擬化、云計(jì)算、大數(shù)據(jù)等技術(shù)的廣泛應(yīng)用,數(shù)字化升級(jí)進(jìn)程持續(xù)加速,IT基礎(chǔ)設(shè)施的種類(lèi)和數(shù)量激增,信創(chuàng)產(chǎn)品的自主研發(fā)和技術(shù)創(chuàng)新全面加速,信息系統(tǒng)架構(gòu)的復(fù)雜程度也不斷提升,信息系統(tǒng)運(yùn)維工作,特別是管理組成信息系統(tǒng)的IT資產(chǎn)和資源需要適應(yīng)新形勢(shì)、應(yīng)對(duì)新挑戰(zhàn)。

    信息系統(tǒng)配置庫(kù)即CMDB,是ITIL框架的配置管理流程中的基礎(chǔ)部分,是通過(guò)獲取、維護(hù),檢查企業(yè)的IT資源,從而高效控制與管理不斷變化的IT基礎(chǔ)架構(gòu)與IT服務(wù),并為其他系統(tǒng)提供準(zhǔn)確的配置信息,如任務(wù)調(diào)度、運(yùn)維工單、發(fā)布管理等。一個(gè)實(shí)時(shí)準(zhǔn)確的配置庫(kù)是信息化時(shí)代安全運(yùn)維的基石,也是運(yùn)維管理的核心。

    其中,應(yīng)用拓?fù)涫桥渲霉芾韼?kù)的一個(gè)重要功能,也是配置管理數(shù)據(jù)的一個(gè)重要消費(fèi)場(chǎng)景。應(yīng)用拓?fù)鋱D是以節(jié)點(diǎn)和邊為基礎(chǔ),以一個(gè)應(yīng)用為視角,描繪組成該應(yīng)用的各個(gè)IT資源和資產(chǎn)的部署分布及節(jié)點(diǎn)狀態(tài)的功能圖。應(yīng)用拓?fù)淇梢栽诋惓8婢珳?zhǔn)化、變更風(fēng)險(xiǎn)管控、故障根因分析等場(chǎng)景中起到關(guān)鍵作用。然而傳統(tǒng)的靜態(tài)拓?fù)鋱D,依賴(lài)于手工搭建,精確程度較低,維護(hù)成本較高,無(wú)法達(dá)到可靠、實(shí)時(shí)、準(zhǔn)確的程度。與傳統(tǒng)手工繪制的應(yīng)用拓?fù)洳煌渲霉芾韼?kù)中的應(yīng)用拓?fù)涫且劳杏谂渲脭?shù)據(jù)的動(dòng)態(tài)拓?fù)鋱D,但其仍依賴(lài)配置數(shù)據(jù)的準(zhǔn)確性和更新的實(shí)時(shí)性。本文提出一種基于eBPF的配置庫(kù)應(yīng)用拓?fù)渥詣?dòng)發(fā)現(xiàn)的方法,并進(jìn)行了代碼實(shí)現(xiàn),根據(jù)配置庫(kù)中的配置關(guān)系,采集IP和端口間的訪問(wèn)關(guān)系,實(shí)時(shí)跟蹤獲取每個(gè)節(jié)點(diǎn)的信息,從而自動(dòng)獲取應(yīng)用之間的調(diào)用關(guān)系。

    1. eBPF技術(shù)

    1.1 eBPF簡(jiǎn)介

    eBPF是基于BPF的擴(kuò)展,BPF是類(lèi)Unix系統(tǒng)上數(shù)據(jù)鏈路層的一種原始接口,BPF提供了原始鏈路層封包的收發(fā)。

    eBPF技術(shù)是擴(kuò)展的伯克利數(shù)據(jù)包過(guò)濾器,起源于Linux內(nèi)核,可以在操作系統(tǒng)內(nèi)核等特權(quán)上下文中運(yùn)行該程序。eBPF無(wú)須更改Linux內(nèi)核的源代碼,且不需要重載內(nèi)核模塊的前提下,對(duì)內(nèi)核功能進(jìn)行擴(kuò)展,可以讓內(nèi)核變得更加靈活和強(qiáng)大,從而達(dá)到動(dòng)態(tài)追蹤的功能。這些程序可以用于過(guò)濾網(wǎng)絡(luò)數(shù)據(jù)包、收集內(nèi)核統(tǒng)計(jì)信息、監(jiān)控和調(diào)試等目的[1]。

    1.2 eBPF的架構(gòu)

    eBPF的架構(gòu)分為用戶(hù)態(tài)和內(nèi)核態(tài),一個(gè)完整的eBPF程序包含用戶(hù)態(tài)程序和內(nèi)核態(tài)程序兩部分。

    eBPF用戶(hù)態(tài)程序是指在用戶(hù)空間范圍內(nèi)運(yùn)行的程序,負(fù)責(zé)加載和管理eBPF的內(nèi)核態(tài)程序,以及與內(nèi)核態(tài)程序進(jìn)行交互和數(shù)據(jù)處理,可以使用不同的語(yǔ)言和工具來(lái)編寫(xiě)。一種常用的工具是BCC,提供Python和C語(yǔ)言的API,以及一些現(xiàn)成的eBPF工具,可以進(jìn)行編寫(xiě)和運(yùn)行eBPF程序。用戶(hù)空間程序負(fù)責(zé)加載BPF字節(jié)碼至內(nèi)核中,如果需要也會(huì)負(fù)責(zé)讀取內(nèi)核回傳的統(tǒng)計(jì)信息或者事件詳情[2]。

    eBPF內(nèi)核態(tài)程序是指在操作系統(tǒng)內(nèi)核空間中運(yùn)行的程序,負(fù)責(zé)實(shí)現(xiàn)eBPF的主要功能和邏輯。內(nèi)核中的BPF字節(jié)碼負(fù)責(zé)在內(nèi)核中執(zhí)行特定事件,如需要也會(huì)將執(zhí)行的結(jié)果通過(guò)maps或者perf-event事件發(fā)送至用戶(hù)空間。其中用戶(hù)空間程序與內(nèi)核BPF字節(jié)碼程序可以使用map結(jié)構(gòu)實(shí)現(xiàn)雙向通信,這為內(nèi)核中運(yùn)行的BPF字節(jié)碼程序提供了更加靈活的控制。

    用戶(hù)空間程序與內(nèi)核中的BPF字節(jié)碼交互的流程有如下步驟:

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

    (2)使用加載程序Loader將字節(jié)碼加載至內(nèi)核;

    (3)內(nèi)核使用驗(yàn)證器組件保證執(zhí)行字節(jié)碼的安全性,以避免對(duì)內(nèi)核造成災(zāi)難,在確認(rèn)字節(jié)碼安全后將其加載對(duì)應(yīng)的內(nèi)核模塊執(zhí)行;

    (4)內(nèi)核中運(yùn)行的BPF字節(jié)碼的程序可以使用兩種方式將數(shù)據(jù)回傳至用戶(hù)空間。maps方式可用于將內(nèi)核中實(shí)現(xiàn)的統(tǒng)計(jì)摘要信息(比如測(cè)量延遲、堆棧信息)等回傳至用戶(hù)空間。perf-event用于將內(nèi)核采集的事件實(shí)時(shí)發(fā)送至用戶(hù)空間,用戶(hù)空間程序?qū)崟r(shí)讀取分析。

    2. 系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)

    2.1 eBPF插件設(shè)計(jì)與實(shí)現(xiàn)

    eBPF程序可以通過(guò)一些工具包如BCC、bpftrace和ebpf_exporter來(lái)編寫(xiě)和加載。

    本文的eBPF插件主要是基于ebpf_exporter,可以將eBPF程序的輸出轉(zhuǎn)換為Prometheus的指標(biāo),從而實(shí)現(xiàn)對(duì)網(wǎng)絡(luò)數(shù)據(jù)包的監(jiān)控和分析。此外還需要選擇合適的掛載點(diǎn),如kprobe、uprobe、tracepoint、xdp等,來(lái)捕獲感興趣的事件和數(shù)據(jù),如進(jìn)程名、文件名、網(wǎng)絡(luò)包等。該插件的程序流程圖如圖1所示。

    在插件啟動(dòng)時(shí),啟動(dòng)ebpf_exporter并加載eBPF的配置文件,配置文件中包含BPF代碼和導(dǎo)出指標(biāo)的規(guī)則。ebpf_exporter會(huì)判斷配置文件是否有效,如果無(wú)效,就返回錯(cuò)誤并結(jié)束,如果有效,就繼續(xù)執(zhí)行。接著ebpf_exporter會(huì)編譯BPF代碼,并將其加載到內(nèi)核中,同時(shí)創(chuàng)建一個(gè)BPFmap和一個(gè)perfevent用于存儲(chǔ)和傳輸數(shù)據(jù),加載到內(nèi)核后ebpf_exporter開(kāi)始監(jiān)聽(tīng)端口(默認(rèn)是9435),等待Prometheus的請(qǐng)求。Prometheus定期從ebpf_exporter的端口拉取數(shù)據(jù),并將其存儲(chǔ)在Mongo和MySQL數(shù)據(jù)庫(kù)中,最后在配置庫(kù)響應(yīng)模塊中進(jìn)行調(diào)用[3]。

    整個(gè)eBPF程序的核心邏輯是在兩個(gè)k_probe上掛載回調(diào)函數(shù),分別是tcp_v4_connect和tcp_rcv_state_process,分別用于捕獲TCP連接的開(kāi)始和結(jié)束。

    2.2 應(yīng)用拓?fù)渥詣?dòng)發(fā)現(xiàn)功能的實(shí)現(xiàn)

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

    系統(tǒng)主要通過(guò)安裝eBPF插件后,通過(guò)配置庫(kù)topic數(shù)據(jù)能夠發(fā)現(xiàn)B端的資源,獲取資源信息,結(jié)合CMDB中手動(dòng)維護(hù)配置(系統(tǒng)、應(yīng)用單元、模塊實(shí)例之間的層級(jí)包含關(guān)系)。建立應(yīng)用拓?fù)涞诙⑷龑雨P(guān)系時(shí),通過(guò)在topic中找到的A、B端的資源能通過(guò)關(guān)聯(lián)關(guān)系找到對(duì)應(yīng)的應(yīng)用單元和系統(tǒng)。找到資源和建立關(guān)系數(shù)據(jù),并進(jìn)行資源數(shù)據(jù)插入[4]。

    2.2.1 數(shù)據(jù)采集格式

    系統(tǒng)通過(guò)eBPF技術(shù)采集IP和port間的訪問(wèn)關(guān)系,從而自動(dòng)獲取應(yīng)用之間的調(diào)用關(guān)系,采集數(shù)據(jù)上報(bào)的數(shù)據(jù)格式為src_ip,src_port,dst_ip,dstn_port;上報(bào)源到目標(biāo)的訪問(wèn)關(guān)系,源指定IP和監(jiān)聽(tīng)接口,可指定proc的資源類(lèi)型。

    2.2.2 數(shù)據(jù)處理入庫(kù)

    關(guān)系生成分為兩級(jí)目標(biāo)。

    一級(jí)目標(biāo)是生成模塊實(shí)例-訪問(wèn)-模塊實(shí)例、模塊實(shí)例-訪問(wèn)-數(shù)據(jù)庫(kù)實(shí)例、模塊實(shí)例-訪問(wèn)-中間件實(shí)例3類(lèi)關(guān)系。

    二級(jí)目標(biāo)是生成應(yīng)用模塊-應(yīng)用模塊之間的訪問(wèn)關(guān)系、應(yīng)用模塊-數(shù)據(jù)庫(kù)、應(yīng)用模塊-模板的訪問(wèn)關(guān)系,甚至是系統(tǒng)與系統(tǒng)之間的訪問(wèn)關(guān)系、系統(tǒng)與中間件服務(wù)、數(shù)據(jù)庫(kù)服務(wù)的依賴(lài)關(guān)系。

    數(shù)據(jù)處理規(guī)則分為兩部分,在上報(bào)的條目中,根據(jù)訪問(wèn)源或目標(biāo)的IP和端口信息,在配置庫(kù)中匹配目標(biāo)關(guān)系兩端的實(shí)例創(chuàng)建關(guān)系動(dòng)作執(zhí)行,異常情況反饋;在一級(jí)目標(biāo)完成的基礎(chǔ)上,根據(jù)已有的實(shí)例關(guān)系兩端,各自所關(guān)聯(lián)的上級(jí)所屬應(yīng)用關(guān)聯(lián)目標(biāo),建立之間的關(guān)系。

    2.2.3 數(shù)據(jù)模型調(diào)整

    使用eBPF插件,需要調(diào)整相應(yīng)的數(shù)據(jù)模型,在應(yīng)用拓?fù)涞睦L制中,需要新增與eBPF聯(lián)調(diào)所需的模板關(guān)系定義,新增模型方案如下:

    通過(guò)應(yīng)用實(shí)例之間的訪問(wèn)關(guān)系發(fā)現(xiàn),建立各層應(yīng)用之間的訪問(wèn)關(guān)系模型,增加和修改模板關(guān)系包括:

    (1)模板“部署實(shí)例”訪問(wèn)“部署實(shí)例”,約束:N:N;

    (2)模板“部署實(shí)例”訪問(wèn)“數(shù)據(jù)庫(kù)實(shí)例”,約束: N:N;

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

    (4)“應(yīng)用單元”訪問(wèn)“應(yīng)用單元”,約束:N:N;

    (5)“應(yīng)用單元”訪問(wèn)“數(shù)據(jù)庫(kù)實(shí)例”,約束:N:N;

    (6)“系統(tǒng)”訪問(wèn)“系統(tǒng)”,約束:N:N;

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

    (8)“中間件實(shí)例”訪問(wèn)“數(shù)據(jù)庫(kù)實(shí)例”,約束:N:N;

    (9)“中間件實(shí)例”訪問(wèn)“中間件實(shí)例”,約束:N:N;

    (10)修改部署實(shí)例的“服務(wù)端口”字段的數(shù)據(jù)類(lèi)型,由string改為list;

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

    2.2.4 呈現(xiàn)效果

    在配置庫(kù)中,通過(guò)物理子系統(tǒng)節(jié)點(diǎn),自動(dòng)生成該物理子系統(tǒng)下的訪問(wèn)關(guān)系拓?fù)淙肟?。從?yīng)用模塊進(jìn)入物理子系統(tǒng)節(jié)點(diǎn),可自動(dòng)發(fā)現(xiàn)默認(rèn)的展示路徑包含:物理子系統(tǒng)(訪問(wèn))→物理子系統(tǒng);物理子系統(tǒng)(包含)→應(yīng)用模塊;應(yīng)用模塊(訪問(wèn))→應(yīng)用模塊;應(yīng)用模塊(包含)→應(yīng)用實(shí)例;應(yīng)用實(shí)例(訪問(wèn))→應(yīng)用實(shí)例;應(yīng)用實(shí)例(訪問(wèn))→DB實(shí)例;應(yīng)用實(shí)例(訪問(wèn))→中間件實(shí)例;中間件實(shí)例(訪問(wèn))→應(yīng)用實(shí)例;中間件實(shí)例(訪問(wèn))→中間件實(shí)例;中間件實(shí)例(訪問(wèn))→DB件實(shí)例。

    結(jié)語(yǔ)

    本文在簡(jiǎn)要介紹和分析eBPF技術(shù)的基礎(chǔ)上,詳細(xì)闡述了eBPF技術(shù)的架構(gòu)、匯編指令等內(nèi)容,并在使用開(kāi)源的react-flow和dagre庫(kù)搭建的配置管理庫(kù)原型系統(tǒng)的基礎(chǔ)上,介紹了eBPF采集插件的設(shè)計(jì)與實(shí)現(xiàn),通過(guò)采集插件和數(shù)據(jù)模型的配置,實(shí)現(xiàn)了配置庫(kù)原型系統(tǒng)中應(yīng)用拓?fù)涞亩⑷龑雨P(guān)系的自動(dòng)發(fā)現(xiàn)功能??傮w而言,通過(guò)eBPF插件對(duì)操作系統(tǒng)動(dòng)態(tài)跟蹤,實(shí)時(shí)采集調(diào)用關(guān)系,從而獲得實(shí)時(shí)更新的應(yīng)用拓?fù)?。在?shí)際運(yùn)維工作中,尤其是應(yīng)用資源統(tǒng)計(jì)、應(yīng)用節(jié)點(diǎn)控制、故障定位等實(shí)際運(yùn)維場(chǎng)景中,可以快速幫助運(yùn)維人員快速找到應(yīng)用中需要被關(guān)注的節(jié)點(diǎn)信息[5]。配置庫(kù)應(yīng)用拓?fù)渥詣?dòng)發(fā)現(xiàn)功能在未來(lái)運(yùn)維自動(dòng)化、智能化發(fā)展中將具有決定性意義。

    參考文獻(xiàn):

    [1]劉偉,廖平.eBPF技術(shù)在操作系統(tǒng)動(dòng)態(tài)跟蹤中的應(yīng)用研究[J].中國(guó)金融電腦,2022(8):81-84.

    [2]姜?dú)W涅.基于eBPF的網(wǎng)絡(luò)數(shù)據(jù)包捕獲與分析系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[D].武漢:華中科技大學(xué),2020.

    [3]薛擎宇.基于eBPF的報(bào)文快速處理技術(shù)研究[D].成都:電子科技大學(xué),2023.

    [4]孫建強(qiáng).基于時(shí)序拓?fù)浣Y(jié)構(gòu)特征的會(huì)話(huà)推薦系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)[D].成都:電子科技大學(xué),2022.

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

    作者簡(jiǎn)介:李強(qiáng),本科,助理工程師,研究方向:計(jì)算機(jī)技術(shù)及應(yīng)用。

    基金項(xiàng)目:中國(guó)鐵路信息科技集團(tuán)有限公司科技研究開(kāi)發(fā)計(jì)劃(編號(hào):2022A05)。

    贡山| 柯坪县| 绥江县| 贵州省| 楚雄市| 北碚区| 裕民县| 潜山县| 曲沃县| 沭阳县| 阿巴嘎旗| 景东| 武定县| 苍梧县| 渭南市| 屯昌县| 长武县| 民和| 达拉特旗| 山阴县| 南京市| 丹凤县| 富源县| 和龙市| 达州市| 东港市| 阜宁县| 若尔盖县| 顺义区| 弋阳县| 横峰县| 富阳市| 武乡县| 祁门县| 灌阳县| 项城市| 彩票| 沐川县| 游戏| 盐山县| 墨江|