Linux系統行為新型實時監控技術

廣州錦行科技發表於2020-06-27

作者:王建榮


      萬物互聯和大資料技術的發展,讓我們的生活更加活色生香,其背後離不開安全、穩定可靠的伺服器系統。

      為了保障伺服器系統資源能被使用者正常使用,避免被惡意行為劫持,我們需要記錄伺服器系統資源的使用情況、系統行為事件資訊和I/O流量等資訊,為伺服器系統的運維和安全保障工作提供可靠的資料支撐。

      這裡我們主要是從系統日常行為安全的角度分享一種能滿足線上部署、能夠將程式或檔案建立、網路連線、網路I/O、檔案I/O、shell操作、資料庫操作、telnet操作、http訪問、系統呼叫(syscall)和系統資源資訊等系統相關的行為資訊實時採集和儲存的Linux行為監控技術。


傳統監控技術


      現有系統行為監控的實現技術主要採用的是以下方法:

      1、Linux Kprobes除錯技術

      Kprobes除錯技術是一種專為Linux核心跟蹤和除錯而設計的特定API。Kprobes允許核心開發人員為任何核心指令以及函式入口和函式返回處理程式安裝預處理程式和後處理程式,這些處理程式可以訪問並更改暫存器。這樣一來,核心開發者們就可以監控系統呼叫相關工作流程並簿記。利用Kprobes技術,核心開發人員可以在核心的絕大多數指定函式中動態地插入探測點來收集所需的除錯狀態資訊;關於“呼叫了哪些系統”、“系統何時被呼叫”、“執行是否正確以及函式的入參和返回值是什麼”等疑惑都可以輕鬆解決。此外,還能將這些資訊螢幕輸出或轉儲日誌檔案。

      2、Linux核心的tracepoints(跟蹤點)技術

      核心的tracepoint是一種輕量級的hooks技術,使用高效的系統呼叫行為跟蹤及相關效能計算,對系統本身的效能只有微小的時間損失和空間損失。透過註冊syscall_enter_probe等定製的probe函式,在發生系統呼叫相關行為後,核心找到probe函式,並將引數等資訊傳遞給probe函式。只要將probe函式中記錄的相關行為資訊輸出,即可達到監控目的。


      在現有的Linux系統行為監控工具中,採用Linux Kprobes除錯技術、Linux核心的tracepoints(跟蹤點)技術的工具有:strace、ftrace、tcpdump、lsof、htop、iftop、systemTap、perf……


      以上的工具通常只能作為日常核心開發除錯或日常運維分析工具來使用,主要用於開發除錯或問題定位等簡單的資訊輸出。然而,這些工具存在一些使用缺陷,可以總結為以下幾點:

      1、僅適用於核心開發人員除錯使用或是運維人員在現場開啟使用,各工具特點不一,難以滿足系統全面監控的需求。

      2、沒有提供行為資料的良好儲存能力,只提供簡單的輸出或是日誌儲存。由於沒有資料快取功能,容易造成行為資料的丟包,不能很好地支撐事後資料回放或分析。

      3、不能進行線上執行的實時部署,只能在事後或事中開啟,無法滿足運維或安全監控的自動化要求。在高吞吐、高併發的伺服器上,增加了伺服器執行的負擔。


新型實時監控快取技術方案


      針對現有技術無法滿足線上實時部署、影響伺服器效能、行為資料不具備良好的儲存和快取功能等缺陷,我們給大家分享一種具備實時監控和快取功能的技術方案。

      該方案主要是採用分層結構的模型進行架構的,具體分為核心probe層、基於記憶體對映mmap技術的buffer層、基於本地資料庫的使用者態快取層。具體結構如下圖:

Linux系統行為新型實時監控技術

 業務流程描述

      下面透過一個具體的系統行為事件資訊採集-快取的例子,來說明這三層之間的業務流關係:

      首先,當使用者發起網路連線服務主機操作,在服務主機系統中將發生socket accpet系統呼叫中斷,服務程式陷入核心態,進入系統呼叫例程。

      其次,透過Linux核心tracepoints機制,核心查詢系統呼叫tracepoint的probe函式;此時,核心查到已經掛載的核心probe層的probe函式,並將相應accpet系統呼叫引數資訊傳入probe函式。

      接下來,核心probe層的probe函式將傳來的系統呼叫相關資訊進行分類、序列化處理後,將相關引數資訊轉化為系統行為事件資訊寫入mmap buffer層。

      最後,使用者態快取層程式透過mmap對映技術,從mmap buffer層讀取具體的系統行為事件資訊,將系統行為事件資訊再次格式化為易於閱讀和分析的字串資訊,並選擇一種本地或分散式的快取技術,持久化儲存系統行為事件資訊。

      透過上述業務流程的分析,可以概括出上述三層主體功能分別為:核心probe層採集系統呼叫資訊、mmap buffer層轉化系統行為事件資訊、使用者態快取層持久化系統行為事件資訊。如下圖所示:

Linux系統行為新型實時監控技術

技術亮點

      透過上文的概述,本方案與目前現有工具或方案的主要區別在於本方案體現了以下兩方面:實時性、快取持久化。

      1.實時性

      “實時性”就是指系統操作行為(系統呼叫)資訊能夠實時感知,“零損耗”地對資訊進行採集。

      我們知道系統行為資訊的採集是由“核心probe層”完成的,在該層中主要也是採用了Linux核心字元裝置驅動技術+Linux tracepoints機制。透過開發Linux核心字元裝置驅動來驅動probe模組,在probe模組中掛載tracepoint函式,採集各系統呼叫的相關資訊。

      為了實現系統呼叫資訊從核心probe層到使用者態快取層的“Zero copy”高效傳遞,在probe層與使用者態快取層採用了Linux核心驅動與使用者態程式實現地址共享的mmap buffer 技術方案。

Linux系統行為新型實時監控技術


      2.快取持久化

      經過核心probe層採集的系統行為事件資訊存放在mmap buffer層中,為了實時高效地將這些事件資訊持久化儲存,本方案採用了一種開源高效的本地檔案資料庫引擎,該引擎佔用資源少、無需安裝和管理配置、資料吞吐率每秒可達上萬條記錄。這樣輕型的持久化模組,可以透過“零損耗”的方式部署到線上伺服器,而不佔用伺服器資源。

      從mmap buffer層中讀取到系統行為事件資訊,在使用者態快取層還可以根據具體業務的要求,做一些資料處理分析,如格式化、過濾等。最終存放到檔案資料庫中,從而實現系統行為事件資訊的持久化快取。具體流程如圖:

Linux系統行為新型實時監控技術

相關文章