常偉鵬,袁 泉
(中國(guó)藥科大學(xué)圖書與信息中心,江蘇 南京 211198)
網(wǎng)絡(luò)流量急劇增加,導(dǎo)致網(wǎng)絡(luò)系統(tǒng)的處理能力遠(yuǎn)低于網(wǎng)絡(luò)數(shù)據(jù)的存儲(chǔ)與傳輸要求[1,2]。然而隨著網(wǎng)絡(luò)規(guī)模的增加,分布式集群中[3]存在一些異常行為的節(jié)點(diǎn),這些異常節(jié)點(diǎn)很有可能降低系統(tǒng)的運(yùn)行效率,甚至導(dǎo)致系統(tǒng)運(yùn)行崩潰[4,5]。為了應(yīng)對(duì)網(wǎng)絡(luò)安全問題,對(duì)異常節(jié)點(diǎn)進(jìn)行檢測(cè)與處理,降低異常節(jié)點(diǎn)造成的損失,成為保護(hù)網(wǎng)絡(luò)安全的重要研究課題之一。
文獻(xiàn)[6]通過Logstash工具對(duì)Hadoop集群點(diǎn)中的任務(wù)狀態(tài)信息進(jìn)行收集,結(jié)合Perf性能工具對(duì)收集信息的異常點(diǎn)進(jìn)行分析,采用異常點(diǎn)診斷算法對(duì)集群中異常點(diǎn)進(jìn)行診斷,構(gòu)建出異常點(diǎn)實(shí)時(shí)監(jiān)測(cè)模型,該方法對(duì)異常點(diǎn)監(jiān)測(cè)的精度較高,但不適用于較復(fù)雜的場(chǎng)景。文獻(xiàn)[7]通過Flume采集組件結(jié)合Spark集群框架對(duì)數(shù)據(jù)進(jìn)行采集,并計(jì)算出采集數(shù)據(jù)的節(jié)點(diǎn)風(fēng)險(xiǎn)值,利用路由器節(jié)點(diǎn)數(shù)量對(duì)節(jié)點(diǎn)狀況進(jìn)行判斷,通過定位算法完成對(duì)異常節(jié)點(diǎn)的定位,該方法誤報(bào)率較低,但目前僅處于實(shí)驗(yàn)測(cè)試階段。文獻(xiàn)[8]在模型中引入圖結(jié)構(gòu)、圖動(dòng)態(tài)變化和圖屬性信息,對(duì)網(wǎng)絡(luò)異常節(jié)點(diǎn)進(jìn)行向量表示,并提出動(dòng)態(tài)網(wǎng)絡(luò)無監(jiān)督算法對(duì)提取的異常特征進(jìn)行向量學(xué)習(xí),該方法不僅能夠提升異常點(diǎn)的檢測(cè)精度,還能夠挖掘出網(wǎng)絡(luò)中有實(shí)際意義的異常點(diǎn),但系統(tǒng)的運(yùn)行效率有待提高。
基于以上研究,提出基于Hadoop的動(dòng)態(tài)網(wǎng)絡(luò)異常節(jié)點(diǎn)智能檢測(cè)方法。詳細(xì)分析了Hadoop網(wǎng)絡(luò)行為監(jiān)測(cè)系統(tǒng),對(duì)網(wǎng)絡(luò)節(jié)點(diǎn)流量進(jìn)行分析。針對(duì)初始聚類敏感問題,提出一種改進(jìn)的均衡化評(píng)價(jià)函數(shù)對(duì)簇內(nèi)節(jié)點(diǎn)差異準(zhǔn)確的分析。
Hadoop是一種分布式計(jì)算框架,其核心包含HDFS和Map/Reduce兩部分內(nèi)容。Hadoop作為分布式軟件框架具有可靠性高、擴(kuò)展性高、效率性高、容錯(cuò)性高和成本低等5個(gè)突出性的優(yōu)點(diǎn)。伴隨著發(fā)展,Hadoop已經(jīng)逐漸成為由數(shù)據(jù)分析層、編輯模型層、數(shù)據(jù)存儲(chǔ)層、數(shù)據(jù)集成層和平臺(tái)管理層組成的生態(tài)體系,每個(gè)層次間具有相應(yīng)的功能,通過相互合作完成數(shù)據(jù)的存儲(chǔ)與計(jì)算。Hadoop體系結(jié)構(gòu)如圖1所示。
圖1 Hadoop體系結(jié)構(gòu)圖
平臺(tái)管理層對(duì)維持系統(tǒng)的穩(wěn)定秩序起到?jīng)Q定性的作用,主要負(fù)責(zé)節(jié)點(diǎn)的故障分析、管理和性能優(yōu)化等工作。數(shù)據(jù)集成層主要是將網(wǎng)絡(luò)數(shù)據(jù)導(dǎo)入到HDFS上,對(duì)數(shù)據(jù)進(jìn)行整理與統(tǒng)計(jì)。存儲(chǔ)層主要是將導(dǎo)入到HDFS上的數(shù)據(jù)以64MB大小分塊的形式分布式存儲(chǔ)起來。模型層主要負(fù)責(zé)Map和Reduce的編程任務(wù),是服務(wù)器分析數(shù)據(jù)的核心層次。數(shù)據(jù)分析層與用戶直接關(guān)聯(lián),可通過特定的分析與建模等完成用戶的特定需求。
HDFS采用Master/Slave架構(gòu),主要負(fù)責(zé)Hadoop集群數(shù)據(jù)的管理與存儲(chǔ),按照64MB大小將數(shù)據(jù)按分塊的形式進(jìn)行存儲(chǔ),可以進(jìn)行多次的讀寫操作。
MapReduce為分布式編程框架,主要負(fù)責(zé)提供給用戶簡(jiǎn)單接口,即使在用戶不了解分布式程序的情況下,通過規(guī)則編寫map和reduce函數(shù)就可以實(shí)現(xiàn)將程序運(yùn)行到分布式集群上。由分治規(guī)則,MapReduce具有把單一節(jié)點(diǎn)上難以解決的問題劃分成眾多小問題處理的能力,可以極大程度地提高工作效率,減少對(duì)寬帶的損耗。
NetBASS是一種實(shí)現(xiàn)網(wǎng)絡(luò)檢測(cè)、分析與處理的架構(gòu),主要功能是通過對(duì)網(wǎng)絡(luò)流量數(shù)據(jù)的分析,對(duì)主機(jī)和網(wǎng)絡(luò)節(jié)點(diǎn)的正?;虍惓P袨橐约皭阂饬髁窟M(jìn)行查找。
網(wǎng)絡(luò)節(jié)點(diǎn)是一種由協(xié)議、IP地址和目的端口組成的實(shí)體,每個(gè)節(jié)點(diǎn)代表一種網(wǎng)絡(luò)業(yè)務(wù)。在一天中,少數(shù)節(jié)點(diǎn)產(chǎn)生的流量能占據(jù)網(wǎng)絡(luò)節(jié)點(diǎn)的大部分,而大部分節(jié)點(diǎn)產(chǎn)生的流量反而占據(jù)網(wǎng)絡(luò)節(jié)點(diǎn)小部分的特征,與冪律分布較為吻合。Zipf分布能夠從大到小的對(duì)統(tǒng)計(jì)數(shù)據(jù)進(jìn)行排序,是從冪律分布中演化來的。網(wǎng)絡(luò)節(jié)點(diǎn)總流量服從Zipf排名分布,定義PDF為p(x)=Ax-α,網(wǎng)絡(luò)節(jié)點(diǎn)排名公式可表示為
(1)
其中,y表示排名小于x的網(wǎng)絡(luò)節(jié)點(diǎn)。若網(wǎng)絡(luò)節(jié)點(diǎn)的總數(shù)為Bnum個(gè),預(yù)測(cè)節(jié)點(diǎn)數(shù)大于Bnum的概率用公式可表示為
Ppre=BnumAyα-1
(2)
1)與(2)式結(jié)合,計(jì)算得出
(3)
其中,β表示排名指數(shù),一般情況下滿足1≤β≤2。隨著排名的增加,網(wǎng)絡(luò)總流量呈現(xiàn)下降趨勢(shì)。為了對(duì)網(wǎng)絡(luò)節(jié)點(diǎn)的穩(wěn)定性和離異程度進(jìn)行描述,通過標(biāo)準(zhǔn)差系數(shù)對(duì)節(jié)點(diǎn)參數(shù)的穩(wěn)定性進(jìn)行評(píng)價(jià)。標(biāo)準(zhǔn)差系數(shù)是反映參數(shù)變化程度的相對(duì)指標(biāo),公式可表示為
(4)
K-means算法是一種經(jīng)典的劃分算法,通過K-means算法對(duì)網(wǎng)絡(luò)數(shù)據(jù)集聚類處理。K-means算法依據(jù)輸入的參數(shù)N,將網(wǎng)絡(luò)數(shù)據(jù)劃分成N個(gè)簇,并以N為參考點(diǎn)對(duì)相似度進(jìn)行計(jì)算,經(jīng)過不斷的迭代更新,直到算法收斂為止。就網(wǎng)絡(luò)節(jié)點(diǎn)檢測(cè)而言,雖然K-means算法高效快速,但在初始簇中心的選擇上具有缺陷性,其聚類結(jié)果會(huì)隨著隨機(jī)選取的初始聚類中心發(fā)生變化,極其不穩(wěn)定。而且K-means算法中只對(duì)簇內(nèi)的差距進(jìn)行考慮,并沒有對(duì)簇間的差距加以分析,導(dǎo)致聚類誤差較大。因此本文對(duì)K-means算法的初始簇的選擇過程與評(píng)價(jià)函數(shù)進(jìn)行改進(jìn),使用新的均衡化函數(shù)作為數(shù)據(jù)的收斂函數(shù),使聚類效果更加穩(wěn)定。引入簇內(nèi)與簇間的差異,簇內(nèi)差異表示同一簇間的數(shù)據(jù)緊湊情況,公式可表示為
(5)
(6)
(7)
本文以簇內(nèi)/簇間差異平方和的二次開方作為均衡化函數(shù),與使用單一的簇內(nèi)或簇間均方差相比,對(duì)收斂的考慮更加全面,更有利于樣本的聚類。
網(wǎng)絡(luò)異常節(jié)點(diǎn)檢測(cè)主要由Hadoop集群異常點(diǎn)檢測(cè)和異常定位兩部分組成。診斷系統(tǒng)通過對(duì)Hadoop的運(yùn)行日志進(jìn)行實(shí)時(shí)檢測(cè),并將檢測(cè)到的數(shù)據(jù)發(fā)送給指定的topic,同時(shí)各個(gè)節(jié)點(diǎn)把收集到的結(jié)構(gòu)層數(shù)據(jù)也發(fā)送給指定的topic,進(jìn)行邏輯的計(jì)算工作。異常檢測(cè)系統(tǒng)框架如圖2所示。
圖2 異常檢測(cè)系統(tǒng)框架圖
異常檢測(cè)系統(tǒng)由監(jiān)控維度定義、數(shù)據(jù)收集和數(shù)據(jù)分析三個(gè)模塊組成。監(jiān)控維度定義模塊主要起到分析系統(tǒng)層和體系指標(biāo)層數(shù)據(jù)的作用,只需修改該模塊的信息即可監(jiān)控新的性能指標(biāo)。數(shù)據(jù)收集模塊主要采集集群點(diǎn)的性能指標(biāo),為了保證不同階段采集的性能數(shù)據(jù),該模塊需要實(shí)時(shí)對(duì)執(zhí)行階段進(jìn)行監(jiān)控。數(shù)據(jù)分析模塊主要對(duì)收集的性能指標(biāo)進(jìn)行分析,并定位出異常的節(jié)點(diǎn),通過對(duì)多維度性能信息的利用,大大提高檢測(cè)精度。
Hadoop的作業(yè)由Map和Reduce兩個(gè)階段構(gòu)成,在日志中不同的任務(wù)對(duì)應(yīng)不同的標(biāo)記,當(dāng)作業(yè)提交時(shí),通過shuffle階段對(duì)不同的任務(wù)進(jìn)行交換處理,并將信息記錄到日志上。網(wǎng)絡(luò)節(jié)點(diǎn)中的各個(gè)任務(wù)均由兩條信息對(duì)其狀態(tài)進(jìn)行記錄,通過記錄信息確定該任務(wù)的執(zhí)行情況。網(wǎng)絡(luò)節(jié)點(diǎn)的體系結(jié)構(gòu)信息反映節(jié)點(diǎn)的資源分配狀況,通過整合運(yùn)算可確定相應(yīng)節(jié)點(diǎn)的利用率。若某一個(gè)指標(biāo)有問題,那么相應(yīng)的節(jié)點(diǎn)就會(huì)異常。為了方便對(duì)異常節(jié)點(diǎn)進(jìn)行定位并分析出其異常的原因,采用該節(jié)點(diǎn)體系結(jié)構(gòu),檢測(cè)出異常指標(biāo)的方法。體系結(jié)構(gòu)層數(shù)據(jù)主要分為CPU、內(nèi)存和磁盤讀寫。其中CPU的性能和內(nèi)存均可通過利用率進(jìn)行測(cè)量,磁盤讀寫主要功能是進(jìn)行數(shù)據(jù)的加載與存儲(chǔ),若該性能出現(xiàn)問題,會(huì)嚴(yán)重影響集群的性能。本文只對(duì)后期相關(guān)的數(shù)據(jù)進(jìn)行收集與分析,利用perf對(duì)節(jié)點(diǎn)的性能指標(biāo)進(jìn)行周期性的計(jì)算,通過logstash對(duì)日志采取結(jié)構(gòu)化分析,然后整理成對(duì)應(yīng)格式的數(shù)據(jù)發(fā)送給指定話題,提供給spark streaming做后續(xù)分析。
隨著Hadoop集群的擴(kuò)大,其節(jié)點(diǎn)性能具有異構(gòu)性,但在運(yùn)行過程中節(jié)點(diǎn)間都是同構(gòu)的,所有任務(wù)的邏輯和處理情況大致相同,正常節(jié)點(diǎn)行為也具有相似性,而異常行為的節(jié)點(diǎn)與正常節(jié)點(diǎn)不同于任務(wù)量上。一般情況下,異常節(jié)點(diǎn)的任務(wù)量較少,單個(gè)任務(wù)執(zhí)行的時(shí)間相對(duì)較長(zhǎng)。因此提出一種異常節(jié)點(diǎn)的檢測(cè)算法,通過對(duì)作業(yè)中的節(jié)點(diǎn)表現(xiàn)情況分析,對(duì)異常節(jié)點(diǎn)在集群中的位置進(jìn)行檢測(cè),結(jié)合性能指標(biāo)分析出該節(jié)點(diǎn)異常的原因。
Hadoop集群作業(yè)的日志分解主要過程為:首先定義收集分析維度,本文主要包含節(jié)點(diǎn)完成map的個(gè)數(shù),節(jié)點(diǎn)最近完成map的時(shí)間以及節(jié)點(diǎn)運(yùn)行reduce的時(shí)間三方面;然后通過分析Hadoop集群作業(yè)日志獲取正在做任務(wù)的節(jié)點(diǎn)信息;最后按照定義的維度進(jìn)行節(jié)點(diǎn)信息的匯總。Hadoop執(zhí)行任務(wù)時(shí)map和reduce兩個(gè)階段不是完全分開的,當(dāng)map任務(wù)完成后,reduce任務(wù)才開始,且會(huì)占據(jù)一個(gè)任務(wù)槽。
為降低耦合性,采用將map與reduce任務(wù)一起考慮的方法,根據(jù)集群作業(yè)中任務(wù)執(zhí)行時(shí)間,將reduce任務(wù)轉(zhuǎn)換成同性能下的map任務(wù)。當(dāng)作業(yè)數(shù)量較大時(shí),未被分配reduce任務(wù)節(jié)點(diǎn)高于正在工作的reduce任務(wù)節(jié)點(diǎn)。為了避免錯(cuò)誤,將邏輯完成數(shù)與節(jié)點(diǎn)平均值比較,若邏輯完成數(shù)大于平均值,那么節(jié)點(diǎn)是正常節(jié)點(diǎn);若邏輯完成數(shù)小于平均值,那么節(jié)點(diǎn)是異常節(jié)點(diǎn)。采用t分布下的標(biāo)準(zhǔn)分?jǐn)?shù)對(duì)節(jié)點(diǎn)的性能偏移進(jìn)行衡量,用公式表示為
(8)
其中,μ表示邏輯完成數(shù)的均值;σ表示標(biāo)準(zhǔn)差;Vthe表示閾值。數(shù)值越大表示偏移較多。
為了驗(yàn)證基于Hadoop網(wǎng)絡(luò)異常節(jié)點(diǎn)檢測(cè)方法的有效性,在Hadoop集群中使用5個(gè)運(yùn)行節(jié)點(diǎn),包含一個(gè)負(fù)責(zé)邏輯調(diào)度的主節(jié)點(diǎn)Nmain,四個(gè)負(fù)責(zé)邏輯計(jì)算的從節(jié)點(diǎn)N1from、N2from、N3from、N4from,每個(gè)節(jié)點(diǎn)配置邏輯CPU24個(gè),內(nèi)存32GB,硬盤1TB。選擇CPU hog故障進(jìn)行實(shí)驗(yàn)評(píng)估,在運(yùn)行負(fù)載前和運(yùn)行負(fù)載過程中對(duì)集群的某一個(gè)節(jié)點(diǎn)引入故障,判斷其異常檢測(cè)的準(zhǔn)確性。
運(yùn)行負(fù)載工作前,對(duì)第4個(gè)節(jié)點(diǎn)引入CPU hog故障,然后提交負(fù)載,通過測(cè)試,運(yùn)行負(fù)載前引入故障的邏輯完成數(shù)與t分布下的標(biāo)準(zhǔn)分?jǐn)?shù)如圖3所示。
圖3 運(yùn)行負(fù)載前引入CPU hog圖
從圖中可以看出,各個(gè)節(jié)點(diǎn)的邏輯完成數(shù)分別為(N1from,12)、(N2from,11)、(N3from,11)、(N4from,2),t分布下的標(biāo)準(zhǔn)分?jǐn)?shù)分別為(N1from,0.67)、(N2from,0.40)、(N3from,0.40)、(N4from,1.87),計(jì)算節(jié)點(diǎn)N4from的標(biāo)準(zhǔn)分?jǐn)?shù)高于t分布的閾值1.85,而其它計(jì)算節(jié)點(diǎn)均比閾值低,因此除了計(jì)算節(jié)點(diǎn)N4from存在異常外,其它計(jì)算節(jié)點(diǎn)沒有報(bào)警生成,實(shí)驗(yàn)結(jié)果與引入故障的節(jié)點(diǎn)具有一致性,驗(yàn)證了本文方法的有效性。
為了對(duì)運(yùn)行負(fù)載引入故障時(shí)CPU的利用率進(jìn)行檢測(cè),同樣在計(jì)算節(jié)點(diǎn)N4from引入CPU hog故障,通過測(cè)試,運(yùn)行負(fù)載前引入故障的CPU利用率如圖4所示。
圖4 運(yùn)行負(fù)載前引入故障CPU利用率
從圖中可以看出,4個(gè)節(jié)點(diǎn)的利用率比所有節(jié)點(diǎn)數(shù)的80%大時(shí),節(jié)點(diǎn)應(yīng)排在第一位,利用率比所有節(jié)點(diǎn)數(shù)的20%小時(shí),節(jié)點(diǎn)應(yīng)排在第五。由于N4from節(jié)點(diǎn)的CPU利用率排名第一,內(nèi)存利用率排名第二,I/O利用率排名第四,說明N4from節(jié)點(diǎn)的CPU利用率比所有節(jié)點(diǎn)數(shù)的80%大,于是可以判斷出該節(jié)點(diǎn)CPU存在異常,驗(yàn)證了本文方法對(duì)異常點(diǎn)判斷的準(zhǔn)確性。
運(yùn)行負(fù)載時(shí),同樣對(duì)N4from節(jié)點(diǎn)引入CPU hog故障,但需要通過不同的時(shí)間段進(jìn)行故障的引入,本文分別在map完成任務(wù)的10%、50%和90%時(shí)逐一引入的。Hadoop集群運(yùn)行負(fù)載時(shí)CPU hog故障引入后運(yùn)行的準(zhǔn)確率如表1所示。
表1 引入CPU hog故障測(cè)試結(jié)果
從表中可以看出,Hadoop集群運(yùn)行負(fù)載時(shí),map任務(wù)完成10%和50%時(shí)引入CPU hog故障,準(zhǔn)確率均能達(dá)到95%,召回率為1;雖然map任務(wù)完成90%時(shí)準(zhǔn)確率為89%,召回率為0.87左右,但完全滿足異常點(diǎn)檢測(cè)要求。
為了降低運(yùn)維成本,對(duì)網(wǎng)絡(luò)中異常節(jié)點(diǎn)性能問題進(jìn)行及時(shí)的定位與檢測(cè),提出一種基于Hadoop的動(dòng)態(tài)網(wǎng)絡(luò)異常節(jié)點(diǎn)智能檢測(cè)方法。從Hadoop日志中獲取相關(guān)任務(wù)狀態(tài)信息,對(duì)map和reduce任務(wù)個(gè)數(shù)加以綜合考慮,通過統(tǒng)計(jì)學(xué)分析節(jié)點(diǎn)的異常情況,一旦出現(xiàn)網(wǎng)絡(luò)異常節(jié)點(diǎn),通過收集系統(tǒng)及性能指標(biāo)對(duì)異常點(diǎn)進(jìn)行定位。在Hadoop集群中使用5個(gè)運(yùn)行節(jié)點(diǎn),對(duì)計(jì)算節(jié)點(diǎn)中的第4個(gè)節(jié)點(diǎn)分別在運(yùn)行負(fù)載前和運(yùn)行負(fù)載時(shí)引入CPU hog故障。實(shí)驗(yàn)結(jié)果表明,只有引入故障的節(jié)點(diǎn)才會(huì)有報(bào)警生成,其余節(jié)點(diǎn)均為正常節(jié)點(diǎn)。并且當(dāng)map任務(wù)完成10%和50%時(shí),準(zhǔn)確率均能達(dá)到95%,召回率均為1,充分證明本文方法的有效性和準(zhǔn)確性。