張國(guó)軍 劉子莘 呂品 陳明 霍超
摘要:一方面,隨著服務(wù)器數(shù)量和業(yè)務(wù)量的增加,系統(tǒng)的運(yùn)行情況變的越來越復(fù)雜,不易被發(fā)現(xiàn)的潛在風(fēng)險(xiǎn)越來越多,傳統(tǒng)的通過設(shè)置某些指標(biāo)的閾值對(duì)系統(tǒng)進(jìn)行異常檢測(cè)的方式已慢慢顯示出弊端。另一方面,服務(wù)器每天會(huì)產(chǎn)生大量的系統(tǒng)日志和各項(xiàng)指標(biāo),如何更好的分析和利用這些日志和指標(biāo)成為了一個(gè)值得思考的問題?;谝陨蟽蓚€(gè)問題,通過無監(jiān)督學(xué)習(xí)算法對(duì)系統(tǒng)日志和各項(xiàng)指標(biāo)進(jìn)行分析,再將結(jié)果直觀的展示給系統(tǒng)管理員提醒管理員系統(tǒng)存在的潛在風(fēng)險(xiǎn),是一件很有意義的事情。
本文闡述了基于無監(jiān)督學(xué)習(xí)算法搭建異常檢測(cè)算法平臺(tái)進(jìn)行系統(tǒng)異常檢測(cè)的設(shè)計(jì)與實(shí)現(xiàn)流程。介紹了項(xiàng)目組所使用的相關(guān)技術(shù)以及實(shí)現(xiàn)過程中使用到的解決方案。相關(guān)技術(shù)包括ELK平臺(tái)、pyod算法庫(kù)、詞向量模型BERT。在設(shè)計(jì)階段,對(duì)算法建模及異常檢測(cè)和日志數(shù)據(jù)傳輸流程和架構(gòu)進(jìn)行了設(shè)計(jì)。在實(shí)現(xiàn)階段,使用pyod算法庫(kù)對(duì)FeatureBagging和IForest算法分別進(jìn)行了建模和使用,通過檢測(cè)結(jié)果進(jìn)行對(duì)比最終選定與場(chǎng)景契合度較高的算法。
一、相關(guān)技術(shù)
ELK平臺(tái):ELK平臺(tái)由Elasticsearch(開源分布式搜索引擎)、Logstash(日志收集、過濾工具)、Kibana(日志圖形化工具)、kafka(大吞吐日志消息中間件)、beat(生產(chǎn)端日志發(fā)送工具)組成。用于日志收集、分析、展示。
異常檢測(cè)算法庫(kù)pyod:pyod提供了約20種異常檢測(cè)算法,可以找到與“主要數(shù)據(jù)分布”不同的異常值。
詞向量模型BERT:BERT是一種基于transformer的雙向編碼語(yǔ)言模型,用于將文本轉(zhuǎn)化為向量,是目前NLP的主流模型。
FeatureBagging算法:此算法屬于集成方法的一種,基本思想與bagging相似。集成的主要步驟為選擇基檢測(cè)器和分類標(biāo)準(zhǔn)化、組合方法。
IForest(孤獨(dú)森林)算法:此算法屬于非參數(shù)和無監(jiān)督的算法,是機(jī)器學(xué)習(xí)中專門針對(duì)異常檢測(cè)設(shè)計(jì)的算法之一,算法特點(diǎn)為時(shí)間效率高、能有效處理高維數(shù)據(jù)和海量數(shù)據(jù)。
二、系統(tǒng)異常檢測(cè)算法平臺(tái)設(shè)計(jì)
基于無監(jiān)督學(xué)習(xí)算法的系統(tǒng)異常檢測(cè)平臺(tái)主要是通過將日志及系統(tǒng)指標(biāo)收集起來,通過算法進(jìn)行建模,再對(duì)新產(chǎn)生的數(shù)據(jù)進(jìn)行分析?;诖四康?,在本階段對(duì)日志及系統(tǒng)指標(biāo)收集流程和算法建模及異常檢測(cè)流程分別進(jìn)行了設(shè)計(jì)。
1.日志及系統(tǒng)指標(biāo)收集流程
通過ELK日志平臺(tái)獲取系統(tǒng)日志及指標(biāo)數(shù)據(jù)。ELK平臺(tái)的架構(gòu)為第一步用beat從服務(wù)器實(shí)時(shí)獲取數(shù)據(jù),其中filebeat用于收集日志數(shù)據(jù),metricbeat用于收集指標(biāo)類數(shù)據(jù)。第二步層采用Kafka對(duì)日志收集進(jìn)行緩沖,并按日志內(nèi)容進(jìn)行主題分類,以便后續(xù)的分類管理與檢索。第三步Logstash對(duì)日志數(shù)據(jù)進(jìn)行過濾解析,包括時(shí)間的校對(duì)、日志字段的分詞、字段類型的轉(zhuǎn)換和導(dǎo)出索引的設(shè)定。第四步Logstash將日志發(fā)送到ElasticSearch(ES),在ES中建立索引數(shù)據(jù),進(jìn)行索引模板和生命周期的管理。最終使用Kibana組件對(duì)日志數(shù)據(jù)進(jìn)行可視化展現(xiàn)。由于kibana中展示的數(shù)據(jù)是為了讓人進(jìn)行閱讀和使用,故這些數(shù)據(jù)的機(jī)器可讀性較差。為了提高機(jī)器的可讀性,在ELK的第三步搭建專屬的logstash通道對(duì)kafka中的數(shù)據(jù)進(jìn)行處理,使其成為機(jī)器易讀的數(shù)據(jù)格式,并在數(shù)據(jù)處理后將其發(fā)送到異常檢測(cè)算法平臺(tái)。日志數(shù)據(jù)傳輸流程圖,如圖1所示。
2.算法建模及異常檢測(cè)流程
在本部分使用pyod庫(kù)搭建異常檢測(cè)算法平臺(tái)。當(dāng)一定量的系統(tǒng)日志及指標(biāo)輸入到本平臺(tái)后對(duì)其進(jìn)行數(shù)據(jù)降維、文本特征向量處理等數(shù)據(jù)預(yù)處理方法后進(jìn)行算法建模,訓(xùn)練出異常檢測(cè)模型,后續(xù)通過異常檢測(cè)模型判斷后續(xù)輸入的數(shù)據(jù)是否為異常值。由于日志分析是多維向量,故在算法選擇時(shí)初步選定了FeatureBagging和IForest兩個(gè)多維向量檢測(cè)算法。日志數(shù)據(jù)傳輸流程圖,如圖2所示。
三、系統(tǒng)異常檢測(cè)算法實(shí)現(xiàn)
在本部分以TongGTP的異常檢測(cè)為案例闡述實(shí)現(xiàn)過程。TongGTP(以下簡(jiǎn)稱gtp)是一個(gè)文件傳輸中間件,可以實(shí)現(xiàn)不同系統(tǒng)間的文件傳輸功能,在數(shù)據(jù)交換平臺(tái)和批量場(chǎng)景中使用廣泛,由于每個(gè)時(shí)間點(diǎn)發(fā)送的數(shù)據(jù)量沒有特定規(guī)律,所以基于閾值的異常檢測(cè)方法失效。gtp的數(shù)據(jù)指標(biāo)分為四類gtp_send_succ、gtp_send_fail、gtp_recv_succ、gtp_recv_fail。beat每小時(shí)會(huì)在生產(chǎn)端采集一次數(shù)據(jù)并發(fā)送、存儲(chǔ)在Elasticsearch,之后異常檢測(cè)平臺(tái)從Elasticsearch獲取數(shù)據(jù)。gtp異常檢測(cè)場(chǎng)景要通過四類指標(biāo)的值分析出哪個(gè)時(shí)間點(diǎn)的gtp發(fā)送或接收存在問題。例如,通常每天9:00的gtp_send_succ為0,但某一天9:00的gtp_send_succ為1,則應(yīng)該判斷出gtp可能有問題,并告知管理員此風(fēng)險(xiǎn)。具體實(shí)現(xiàn)步驟介紹如下,
1.數(shù)據(jù)獲取。由于gtp_send_succ、gtp_send_fail、gtp_recv_succ、gtp_recv_fail四個(gè)指標(biāo)無法直接獲得并且gtp的默認(rèn)日志中也沒有,所以先將這些指標(biāo)寫入日志文件gtp_filebeat.log再通過filebeat進(jìn)行采集,創(chuàng)建gtplog主題匯入ELK平臺(tái),經(jīng)過logstash格式化,Elasticsearch持久化后,送入異常檢測(cè)算法平臺(tái)。
2.數(shù)據(jù)預(yù)處理。該場(chǎng)景涉及到的向量包括timestamp、numtype、gtpnum。其中,timestamp的格式為Month day,year @ hour:minute:second,此格式數(shù)據(jù)機(jī)器無法識(shí)別,通過strptime將其轉(zhuǎn)化為1970年到當(dāng)前的秒數(shù)。numtype為簡(jiǎn)單文本,通過數(shù)據(jù)字典將其轉(zhuǎn)化為[0,1,2,3]的特征向量。
3.數(shù)據(jù)建模。分別使用FeatureBagging和IForest算法對(duì)數(shù)據(jù)進(jìn)行訓(xùn)練,得到模型。
4.異常檢測(cè)。將測(cè)試數(shù)據(jù)輸入不同的模型得到異常檢測(cè)結(jié)果。FeatureBagging的檢測(cè)結(jié)果如圖3所示。IForest的檢測(cè)結(jié)果如圖4所示。根據(jù)結(jié)果顯示,F(xiàn)eatureBagging的結(jié)果較集中,存在突出的異常點(diǎn)且異常值較大,IForest的結(jié)果較分散,異常值均比較低。將FeatureBagging的異常點(diǎn)信息提取出來并聯(lián)系系統(tǒng)管理員對(duì)當(dāng)時(shí)的情況進(jìn)行分析,發(fā)現(xiàn)此點(diǎn)確實(shí)為異常點(diǎn)。根據(jù)分析,確定FeatureBagging算法較適用于gtp異常檢測(cè)場(chǎng)景。
5.結(jié)果分析。通過對(duì)異常檢測(cè)結(jié)果的分析對(duì)于gtp異常檢測(cè)場(chǎng)景最終選定了FeatureBagging算法來訓(xùn)練其模型。通過該異常檢測(cè)算法平臺(tái)可以檢測(cè)到無法觸發(fā)閾值告警的gtp異常點(diǎn)。