面向跨語言的操作系統日志異常檢測技術研究與實現
日志異常檢測技術背景及意義
在信息化技術飛快發展的今天,計算機網絡規模越來越大,無論是金融、電信、能源行業,還是工業制造、互聯網、物聯網等,都非常依賴網絡。政府、各大企業、金融機構和科研院校所等企事業單位的業務大都建立在計算機網絡之上。隨著信創產業的蓬勃發展,國產操作系統依托開源生態和政策東風正快速崛起,涌現出了一大批以 Linux為主要架構為國產操作系統,如中科方德、銀河麒麟、深度 Deepin、華為鴻蒙等,未來的廣闊發展前景值得期待。但是由于國產操作系統剛剛起步,生態還不成熟,系統會面臨各種各樣的惡意攻擊、內部威脅以及數據泄露等等,這些惡意行為造成的損失是非常巨大的,給個人和國家信息安全也造成了很大的威脅。
操作系統運行過程如圖1所示,故障根因出現導致系統運行狀態異常,在異常出現一段時間后導致系統發生故障,通過系統修復恢復系統正常運行狀態,這些事件發生是有先后順序的。因此,為了阻止或規避故障發生,減少故障造成的損失,當務之急是設計一套行之有效的操作系統運行狀態檢測方法,維持操作系統正常運轉。
圖 1 系統運行狀態圖
操作系統運行時產生的數據可以表征系統的運行狀態,通過對這些數據進行挖掘分析,可以對系統異常運行狀態進行診斷。系統運行狀態監控的數據源主要是KPI(Key Performance Indicator)數據。例如,CPU 使用狀態、磁盤IO狀態、文件分區狀態、網絡接口狀態、進程狀態及內存使用狀態等,這類數據反映了操作系統內各類資源的使用情況。但是現實中,隨著監控的對象增多,比如服務器、虛擬機、容器、硬盤、TOR 交換機、聚合交換機、路由器、數據庫、中間件等,出現的故障類型也越來越多,很多異常情況與 KPI 數據異常并無一一對應的關聯關系。因此需要對系統進行更加詳細精準的監控,操作系統的運行狀態日志數據就是一種極好的監控數據源。日志數據通常是系統開發人員在應用程序開發時根據程序執行邏輯就已經嵌入了相關打印輸出語句,是應用程序在運行過程中調用打印語句對變量信息和程序執行狀態進行記錄的一類數據,記錄了異常或故障發生時的上下文信息[1]。
目前基于國產操作系統日志進行異常檢測的研究還很少。一方面,隨著操作系統和應用程序的復雜程度越來越高,傳統的基于關鍵字匹配或者靜態規則匹配的方式只能檢測到現有的異常事件,缺乏靈活性,容易產生漏報警。另一方面,使用機器學習和深度學習等自動化的檢測方法對日志進行異常分析時,首要工作是將非結構化的日志文本解析成結構化信息后進行日志向量化工作。為了增加程序開發人員以及用戶對日志的可讀性,國產操作系統中添加了中文日志,這種跨語言的日志文本的表征工作是目前日志異常檢測研究工作的一大挑戰。另 外,如何充分結合日志數據特性對日志異常檢測任務進行優化和改進,提升模型的檢測性能是目前研究的另一大挑戰。現有異常檢測算法大多關注的異常種類不同,因此適用范圍也各不相同。基于此,本文在現有對日志研究的基礎上,通過分析國產操作系統日志文本數據的特征,利用數據挖掘分析手段,建立異常檢測模型,以提高跨語言日志異常檢測方法的效率和性能。
常用的日志異常檢測方法一般有四個關鍵步驟,如圖2所示。首先是日志采集,這里使用日志收集系統采集到的日志數據大都是非結構化的文本形式進行存儲,接下來進行日志解析工作,通過日志模板抽取的方式,提取日志文本中的常量部分,把原始日志記錄處理成結構化信息;下一步是特征選擇,通過對日志數據特點進行分析,選取合適的特征對日志進行向量化的表征;最后是異常檢測模型構建[2]。本章將對日志解析、特征提取、異常檢測三種關鍵技術的研究現狀進行論述。
圖 2 日志異常檢測流程
日志解析方法
現有的研究提出了許多自動的日志解析方法,解析技術可以從技術、操作方式、預處理等方面進行區分為以下五類:聚類、頻繁項挖掘、組合優化算法、啟發式方法以及最長子序列[3]。
(1)聚類。聚主要是基于一個假設,即相同或者說相似的日志消息類型會出現在同一組日志中,通過對字符串匹配的距離進行度量實現聚類的效果。例如,LogSig[4]是一種基于消息簽名的算法,為每條日志消息搜索最合適的消息簽名,充分利用領域知識來確定日志集合的數量。
(2)頻繁項挖掘。頻繁項挖掘的方法基于一個假設,把模板看作是一組頻繁出現在日志中的token的集合。解析過程包括創建頻繁項集、對日志消息分組和提取日志模板三個步驟。這種方法的具有代表性的解析器有SLCT[5]、LFA[6]和LogCluster[7]。
(3)組合優化算法。MoLFI[8]使用遺傳算法來找到最優日志消息模板集。
(4)啟發式方法。該方法通過挖掘日志結構中不同的特性以獲得最好的結果。設計了Drain[9]假設在日志的開頭,單詞不會有太多變化。
(5)最長公共子序列。Spell[10]使用最長公共子序列算法(Longest Common Subsequence,LCS)從傳入的日志中動態提取日志模板。
日志特征提取方法
日志特征提取方法包括三種,分別是基于規則、基于統計和基于自然語言處理的特征提取方法[11]。
(1)基于規則的方法主要針對具有固定格式的日志,通過關鍵詞提取或者規則過濾等方式,編寫正則表達式對日志文本進行切割,按照日志格式區分成不同的域,轉化成結構化日志之后進而對特征進行提取。Chuah等人提出基于規則的方法,對具有特定格式的關系型日志進行特征提取[12]。
(2)基于統計的方法通常是基于日志模板實現的,統計每個日志模板在日志序列中的出現的次數,作為日志序列統計特征,將日志序列表征為用模板計數向量。陳傳文等人基于模板計數向量的變化情況對日志是否異常進行判定,使用絕對中位差(Median Absolute Deviation,MAD)對模板計數是否突變進行度量[13]。
(3)基于自然語言處理的方法認為日志文本是由程序打印輸出語句的產生的,可以看作是自然語言中的一段話,因此可以使用自然語言處理的方法對日志特征進行提取。基于自然語言處理的日志特征提取通常使用以下三種模型:N-gram、Word Count和TF-IDF(Term Frequency-Inverse Document Frequency)[14]。Sopola等人使用N-gram模型首先將日志模板劃分為一個個token,統計該模板中包含的所有連續n個token組成的序列,這些序列也被稱為N-gram,統計每個N-gram在所有日志模板集合中出現的次數,即為日志序列的統計特征。
日志異常檢測方法
目前,許多學者將數據挖掘、機器學習和深度學習技術應用于異常檢測,并實現了更高效的智能運維和診斷。由于日志數據來源多種多樣,不同系統的日志格式也不盡相同,具有不同的結構特點。從檢測方法的實現方式來說,對日志進行異常檢測時可以區分為有監督的日志異常檢測方法和無監督的日志異常檢測方法。
(1)有監督的日志異常檢測方法:使用有監督的方法對日志異常檢測時,訓練樣本中同時包含正常和異常日志,通過對該樣本進行訓練學習后得到一個分類模型,輸入未知的日志,通過分類模型對日志進行二分類,輸出為日志的類別,即正常或異常。
(2)無監督的日志異常檢測方法:該方法在建模時不需要對有異常標簽的日志序列進行訓練,而是學習日志數據的內在性質及規律。例如,日志的統計特征和語義特征。基于統計特征的方法通常將日志序列表征為模板統計向量,再采用有效的模型對統計向量進行訓練,挖掘異常模式,將異常從包含大量正常樣本的數據中挖掘出來。基于語義特征的異常檢測方法通過對序列向量進行詞嵌入或者句子嵌入得到日志的語義向量化表示來實現異常檢測。該方法首先將日志序列表征為日志模板序列,即在保持日志的執行時間先后順序不變的前提下,將日志序列中的每一條日志都轉換為對應的日志模板,然后對日志模板的向量化表征進行建模。模型通過預測該序列的下一個日志模板的類別,生成關于日志模板類別概率分布,選擇預測概率最大的 ?? 個日志模板組成正常日志模板集合,剩下的組成異常日志模板集合,最后通過根據實際日志模板所從屬的集合類別來判斷日志序列是否異常。
參考文獻
[1] 張穎君,劉尚奇,楊牧,等.基于日志的異常檢測技術綜述[J].網絡與信息安全學報,2020, 6(6): 1-12.
[2] Fu Q, Lou J G, Wang Y, et al. Execution Anomaly Detection in Distributed Systems through Unstructured Log Analysis [C]//2009 Ninth IEEE International Conference on Data Mining. Miami Beach, FL, USA: IEEE, 2009: 149-158.
[3]ZhuJ,HeS,LiuJ,etal.Toolsandbenchmarksforautomatedlogparsing[C]//2019IEEE/ACM 41st International Conference on Software Engineering: Software Engineering in Practice (ICSE-SEIP). IEEE, 2019: 121-130.
[4] Tang L, Li T, Perng C S. LogSig: generating system events from raw textual logs [C]// Proceedings of the 20th ACM international conference on Information and knowledge management - CIKM ’11. Glasgow, Scotland, UK: ACM Press, 2011: 785.
[5] Nagappan M, Vouk M A. Abstracting log lines to log event types for mining software system logs [C]//2010 7th IEEE Working Conference on Mining Software Repositories (MSR 2010). IEEE, 2010: 114-117.
[6]NandiA,MandalA,AtrejaS,etal.Anomalydetectionusingprogramcontrolflowgraphmin- ing from execution logs [C]//Proceedings of the 22nd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining. 2016: 215-224.
[7]VaarandiR,PihelgasM.LogCluster-Adataclusteringandpatternminingalgorithmforevent logs [C]//2015 11th International Conference on Network and Service Management (CNSM). Barcelona, Spain: IEEE, 2015: 1-7.
[8]MessaoudiS,PanichellaA,BianculliD,etal.Asearch-basedapproachforaccurateidentifica- tion of log message formats [C]//2018 IEEE/ACM 26th International Conference on Program Comprehension (ICPC). IEEE, 2018: 167-16710.
[9] He P, Zhu J, Zheng Z, et al. Drain: An Online Log Parsing Approach with Fixed Depth Tree [C]//2017 IEEE International Conference on Web Services (ICWS). Honolulu, HI, USA: IEEE, 2017: 33-40.
[10]DuM,LiF.Spell:StreamingParsingofSystemEventLogs[C]//2016IEEE16thInternational Conference on Data Mining (ICDM). Barcelona, Spain: IEEE, 2016: 859-864.
[11]賈統, 李影, 吳中海. 基于日志數據的分布式軟件系統故障診斷綜述 [J]. Journal of Software, 2020, 31(7): 1997-2018.
[12] He P, Zhu J, Zheng Z, et al. Drain: An Online Log Parsing Approach with Fixed Depth Tree [C]//2017 IEEE International Conference on Web Services (ICWS). Honolulu, HI, USA: IEEE, 2017: 33-40.
[13]ChenC,SinghN,YajnikS.Loganalyticsfordependableenterprisetelephony[C]//2012Ninth European Dependable Computing Conference. IEEE, 2012: 94-101.
[14]Sipola T, Juvonen A, Lehtonen J. Anomaly detection from network logs using diffusion maps [M]//Engineering Applications of Neural Networks. Springer, 2011: 172-181.