國網(wǎng)河南省電力公司信息通信公司 賈海鋒 河南九域騰龍信息工程有限公司 譚鐵磊 馮向陽
為保障信息系統(tǒng)安全平穩(wěn)的運(yùn)行,需對(duì)信息系統(tǒng)中所有設(shè)備的運(yùn)行狀態(tài)進(jìn)行監(jiān)測巡檢。神經(jīng)網(wǎng)絡(luò)由一個(gè)輸入層、一個(gè)或多個(gè)隱藏層及一個(gè)輸出層串聯(lián)而成。輸入層用于接收輸入數(shù)據(jù),故輸入層中神經(jīng)元的數(shù)量與輸入數(shù)據(jù)的維度相同,接收到輸入數(shù)據(jù)后隱藏層對(duì)輸入數(shù)據(jù)進(jìn)行多次線性變換和非線性激活得到輸入數(shù)據(jù)的低維表示,最后將低維表示作為輸出層的輸入,得到神經(jīng)網(wǎng)絡(luò)的輸出結(jié)果。
神經(jīng)網(wǎng)絡(luò)中線性變換和非線性激活的計(jì)算過程如圖1,神經(jīng)元1為神經(jīng)網(wǎng)絡(luò)中任意一個(gè)神經(jīng)元,x1,x2,x3,…,xm為神經(jīng)元1的輸入數(shù)據(jù),則神經(jīng)元1的輸出結(jié)果為其中:w1i為神經(jīng)元1對(duì)輸入xi的權(quán)值,b1為神經(jīng)元1對(duì)所有輸入數(shù)據(jù)的偏置,表示神經(jīng)元1對(duì)輸入信息的線性變換過程,φ為非線性激活函數(shù),常用的非線性激活函數(shù)包括ReLU激活函數(shù)、Sigmoid激活函數(shù)和Tanh激活函數(shù)。
通過自建的監(jiān)控系統(tǒng)對(duì)不同信息系統(tǒng)設(shè)備的日志信息進(jìn)行字段解析以監(jiān)控多種信息系統(tǒng)的運(yùn)行數(shù)據(jù),監(jiān)控類型覆蓋服務(wù)器、小型機(jī)、數(shù)據(jù)庫、中間件、負(fù)載均衡、網(wǎng)絡(luò)等多種信息系統(tǒng)設(shè)備,數(shù)據(jù)采集間隔可低至30秒[1]。當(dāng)前公司監(jiān)控系統(tǒng)覆蓋各類信息設(shè)備共計(jì)2483臺(tái),采集項(xiàng)目11萬項(xiàng),每日采集監(jiān)控信息3400萬條,包括設(shè)備運(yùn)行時(shí)CPU、內(nèi)存、硬盤、網(wǎng)絡(luò)等海量運(yùn)行數(shù)據(jù),運(yùn)行數(shù)據(jù)可直觀反映信息系統(tǒng)設(shè)備的運(yùn)行狀態(tài),故可作為信息系統(tǒng)自動(dòng)巡檢的依據(jù)。
根據(jù)信息系統(tǒng)的用處,將所有信息系統(tǒng)劃分為用于用戶交互的業(yè)務(wù)應(yīng)用類系統(tǒng)和用于數(shù)據(jù)處理的數(shù)據(jù)平臺(tái)類系統(tǒng)兩大類,針對(duì)信息系統(tǒng)的類別和訪問數(shù)據(jù)計(jì)算每一個(gè)信息系統(tǒng)的運(yùn)行向量,信息系統(tǒng)的運(yùn)行向量包括CPU使用率、CPU負(fù)載、內(nèi)存使用率、SWAP空間使用率、磁盤空間使用率、網(wǎng)絡(luò)流速及信息系統(tǒng)類別共七個(gè)維度。
CPU使用率:針對(duì)業(yè)務(wù)應(yīng)用類系統(tǒng),采集一天時(shí)間內(nèi)每小時(shí)的用戶訪問量得到用戶訪問量集合,將用戶訪問量集合中所有數(shù)值從大到小排列,并計(jì)算排名前25%的數(shù)值的均值作為一天時(shí)間內(nèi)CPU使用率;針對(duì)數(shù)據(jù)平臺(tái)類系統(tǒng),采集一天時(shí)間內(nèi)每小時(shí)的CPU平均使用率得到CPU平均使用率集合,將CPU平均使用率集合中所有數(shù)值從大到小排列,并計(jì)算排名前25%的數(shù)值的均值作為一天時(shí)間內(nèi)CPU使用率。
CPU負(fù)載:對(duì)于業(yè)務(wù)應(yīng)用類系統(tǒng)和數(shù)據(jù)平臺(tái)類系統(tǒng),CPU負(fù)載的計(jì)算方法是相同的,采集一天時(shí)間內(nèi)每小時(shí)的CPU平均負(fù)載得到CPU平均負(fù)載集合,將CPU平均負(fù)載集合中所有數(shù)值從大到小排列,并計(jì)算排名前25%的數(shù)值的均值作為一天內(nèi)CPU平均負(fù)載;內(nèi)存使用率:針對(duì)業(yè)務(wù)應(yīng)用類系統(tǒng),一天內(nèi)的內(nèi)存使用率與一天內(nèi)一天時(shí)間內(nèi)CPU使用率的計(jì)算方法相同。針對(duì)數(shù)據(jù)平臺(tái)類系統(tǒng),采集一天時(shí)間內(nèi)每小時(shí)內(nèi)存平均使用率得到內(nèi)存平均使用率集合,將內(nèi)存平均使用率集合中所有數(shù)值從大到小排列,并計(jì)算排名前25%的數(shù)值的均值作為一天內(nèi)的內(nèi)存平均使用率。
SWAP空間使用率:對(duì)于業(yè)務(wù)應(yīng)用類系統(tǒng)和數(shù)據(jù)平臺(tái)類系統(tǒng),SWAP空間使用率的計(jì)算方法是相同的,采集一天時(shí)間內(nèi)每小時(shí)平均SWAP空閑空間得到空閑空間集合,將空閑空間集合中所有數(shù)值從大到小排列,并計(jì)算排名前25%的數(shù)值的均值作為日SWAP空閑空間MI;進(jìn)一步獲取空閑空間集合中的最大值MAX,則一天內(nèi)SWAP空間使用率為:DI=1-MI/MAX。
磁盤空間使用率:針對(duì)業(yè)務(wù)應(yīng)用類系統(tǒng),一天內(nèi)的磁盤空間使用率與一天內(nèi)一天時(shí)間內(nèi)CPU使用率的計(jì)算方法相同;針對(duì)數(shù)據(jù)平臺(tái)類系統(tǒng),采集一天時(shí)間內(nèi)每小時(shí)磁盤平均使用量得到內(nèi)磁盤平均使用量集合,將磁盤平均使用量集合中所有數(shù)值從大到小排列,并計(jì)算排名前25%的數(shù)值的均值作為一天內(nèi)的磁盤平均使用量。
網(wǎng)絡(luò)流速:對(duì)于業(yè)務(wù)應(yīng)用類系統(tǒng)和數(shù)據(jù)平臺(tái)類系統(tǒng),網(wǎng)絡(luò)流速的計(jì)算方法是相同的,采集一天時(shí)間內(nèi)每小時(shí)網(wǎng)絡(luò)流入量和網(wǎng)絡(luò)流出量的比值得到網(wǎng)絡(luò)流速集合,將網(wǎng)絡(luò)流速集合中所有數(shù)值從大到小排列,并計(jì)算排名前25%的數(shù)值的均值作為一天內(nèi)的網(wǎng)絡(luò)流速;信息系統(tǒng)類別:若信息系統(tǒng)的類別屬于業(yè)務(wù)應(yīng)用類系統(tǒng),則信息系統(tǒng)類別的數(shù)值為0,若信息系統(tǒng)的類別屬于數(shù)據(jù)平臺(tái)類系統(tǒng),則信息系統(tǒng)類別的數(shù)值為1。
至此,將同一個(gè)信息系統(tǒng)設(shè)備七個(gè)維度的數(shù)值按照固定順序排列,即可得到信息系統(tǒng)在一天內(nèi)的運(yùn)行向量,進(jìn)一步對(duì)人工巡檢的歷史巡檢日志進(jìn)行字段解析得到大量的巡檢信息,每條巡檢信息包括巡檢日期、信息系統(tǒng)編號(hào)和巡檢結(jié)果,其中巡檢結(jié)果包括1和0兩種情況,1表示巡檢結(jié)果正常、0表示巡檢結(jié)果異常;針對(duì)每一條巡檢信息,獲取巡檢日期當(dāng)天信息系統(tǒng)編號(hào)對(duì)應(yīng)的信息系統(tǒng)的運(yùn)行向量,并將巡檢結(jié)果作為該運(yùn)行向量的標(biāo)簽信息得到一組訓(xùn)練樣本;按照相同的方法對(duì)所有巡檢信息進(jìn)行信息提取得到大量的訓(xùn)練樣本,將所有訓(xùn)練樣本按照9:1的比例劃分為訓(xùn)練集和測試集、完成數(shù)據(jù)采集的過程,整個(gè)過程自動(dòng)實(shí)現(xiàn),無需人為參與。
為使神經(jīng)網(wǎng)絡(luò)的結(jié)構(gòu)適用于信息系統(tǒng)自動(dòng)巡檢的實(shí)際情況,本文設(shè)計(jì)可一種5層的全連接神經(jīng)網(wǎng)絡(luò),全連接網(wǎng)絡(luò)的輸入為信息系統(tǒng)的運(yùn)行向量,輸出為信息系統(tǒng)的巡檢結(jié)果,包括一個(gè)輸入層、三個(gè)隱藏層和一個(gè)輸出層。
輸入層中神經(jīng)元的數(shù)量為7個(gè),用于接收信息系統(tǒng)的運(yùn)行向量;三個(gè)隱藏層對(duì)信息系統(tǒng)的運(yùn)行向量進(jìn)行升維和降維操作,最終得到2維的特征向量作為輸出層的輸入;輸出層采用用于分類處理的Softmax函數(shù),得到分類向量。其中,分類向量包括信息系統(tǒng)的運(yùn)行向量屬于正常的概率值p1和屬于異常的概率值p2,且兩個(gè)概率值之和為1;比較分類向量中概率值p1和概率值p2的大小,若p1大于p2則信息系統(tǒng)的巡檢結(jié)果為正常,若p1不大于p2則信息系統(tǒng)的巡檢結(jié)果為異常。
Softmax函數(shù)為歸一化指數(shù)函數(shù),函數(shù)的輸入數(shù)據(jù)可為一個(gè)或多個(gè)數(shù)值,經(jīng)Softmax函數(shù)處理后將每一個(gè)數(shù)值映射為0到1的概率值,且所有概率值之和為1,Softmax函數(shù)的計(jì)算公式為:pk=其中:a為函數(shù)的輸入數(shù)據(jù)k中第k個(gè)數(shù)值,K表示函數(shù)的輸入數(shù)據(jù)中所有數(shù)值的數(shù)量,exp表示以自然常數(shù)e為底的指數(shù)函數(shù),pk為函數(shù)的輸入數(shù)據(jù)中第k個(gè)數(shù)值對(duì)應(yīng)概率值,按照相同的計(jì)算公式得到函數(shù)的輸入數(shù)據(jù)中每一個(gè)數(shù)值的概率值,即可得到Softmax函數(shù)的輸出結(jié)果。
基于多次的實(shí)驗(yàn)結(jié)果和不同非線性激活函數(shù)的函數(shù)曲線,本文選擇Tanh激活函數(shù)作為第一層隱藏層的激活函數(shù),Tanh激活函數(shù)可將輸入的數(shù)值映射至-1~1的范圍內(nèi),可學(xué)習(xí)到運(yùn)行向量中不同維度的數(shù)值對(duì)自動(dòng)巡檢的正相關(guān)或負(fù)相關(guān)的關(guān)系;選擇Sigmoid激活函數(shù)作為第二層隱藏層的激活函數(shù),Sigmoid激活函數(shù)可將輸入的數(shù)值映射至0~1的范圍內(nèi),可學(xué)習(xí)到運(yùn)行向量中不同維度的數(shù)值對(duì)自動(dòng)巡檢的重要程度;選擇ReLU激活函數(shù)作為第三層隱藏層的激活函數(shù),當(dāng)輸入的數(shù)值大于0時(shí),ReLU激活函數(shù)的輸出與輸入的數(shù)值相同,當(dāng)輸入的數(shù)值不大于0時(shí)ReLU激活函數(shù)的輸出為0,可緩解神經(jīng)網(wǎng)絡(luò)在訓(xùn)練過程中的過擬合問題。
在神經(jīng)網(wǎng)絡(luò)訓(xùn)練前需對(duì)搭建完畢的神經(jīng)網(wǎng)絡(luò)的參數(shù)初始化,合適的初始化參數(shù)能在網(wǎng)絡(luò)訓(xùn)練過程中一定程度上避免出現(xiàn)梯度消失和梯度爆炸的情況,本文利用凱明初始化方法對(duì)神經(jīng)網(wǎng)絡(luò)每一層的參數(shù)進(jìn)行初始化,其調(diào)用代碼為:init.kaiming_uniform_(self.weight,a),其中a的取值與激活函數(shù)的種類有關(guān)。
對(duì)初始化后的神經(jīng)網(wǎng)絡(luò)進(jìn)行訓(xùn)練,首先設(shè)置一個(gè)訓(xùn)練批次中的數(shù)據(jù)量,本文設(shè)置的訓(xùn)練批次為32,在一個(gè)訓(xùn)練周期(epoch)中,從訓(xùn)練集中隨機(jī)選取32個(gè)運(yùn)行向量構(gòu)成一個(gè)訓(xùn)練批次,將該訓(xùn)練批次中所有運(yùn)行向量依次輸入神經(jīng)網(wǎng)絡(luò)得到每一個(gè)運(yùn)行向量的分類向量;進(jìn)一步利用交叉熵?fù)p失函數(shù)作為損失函數(shù)計(jì)算分類向量與標(biāo)簽信息的誤差,在計(jì)算損失函數(shù)的數(shù)值后,利用梯度下降法將誤差反向傳播以更新神經(jīng)網(wǎng)絡(luò)中每一層的參數(shù),即神經(jīng)網(wǎng)絡(luò)中參數(shù)的更新是從最后一層開始,每一層參數(shù)的更新依賴于后一層的誤差[2]。
在訓(xùn)練過程中,不斷從訓(xùn)練集中挑選訓(xùn)練批次的輸入神經(jīng)網(wǎng)絡(luò)以更新神經(jīng)網(wǎng)絡(luò)的參數(shù),每當(dāng)更新后計(jì)算當(dāng)前時(shí)刻的神經(jīng)網(wǎng)絡(luò)在測試集上的準(zhǔn)確率。學(xué)習(xí)率的大小控制著神經(jīng)網(wǎng)絡(luò)參數(shù)每次更新時(shí)的更新幅度,為保證神經(jīng)網(wǎng)絡(luò)參數(shù)的更新速度,設(shè)置初始學(xué)習(xí)率為0.001;但隨著訓(xùn)練周期的增加,神經(jīng)網(wǎng)絡(luò)的參數(shù)逐漸趨于穩(wěn)定,此時(shí)若繼續(xù)采用初始學(xué)習(xí)率會(huì)導(dǎo)致神經(jīng)網(wǎng)絡(luò)的參數(shù)達(dá)不到最優(yōu)值,故當(dāng)檢測到測試集的準(zhǔn)確率在3個(gè)訓(xùn)練周期內(nèi)沒有增加時(shí),將初始學(xué)習(xí)率下減半以降低神經(jīng)網(wǎng)絡(luò)的參數(shù)每次更新時(shí)的幅度。
同時(shí),為防止因訓(xùn)練次數(shù)過多導(dǎo)致神經(jīng)網(wǎng)絡(luò)的輸出結(jié)果過度依賴于訓(xùn)練集、即出現(xiàn)過擬合情況,當(dāng)檢測到測試集的準(zhǔn)確率在5個(gè)連續(xù)的訓(xùn)練周期內(nèi)沒有上升,就提前結(jié)束訓(xùn)練過程。
本次訓(xùn)練使用的數(shù)據(jù)集中共包含76745個(gè)訓(xùn)練樣本,按照9:1的比例拆分后,訓(xùn)練集中的運(yùn)行向量的數(shù)量為69070,測試集中運(yùn)行向量的數(shù)量為7675。訓(xùn)練過程中訓(xùn)練集上損失函數(shù)值與測試集上準(zhǔn)確率的變化情況如圖3所示,隨著訓(xùn)練周周的不斷增加,神經(jīng)網(wǎng)絡(luò)在測試集上的準(zhǔn)確率逐漸提高,第20個(gè)周期時(shí)準(zhǔn)確率已經(jīng)達(dá)到99%左右,第21個(gè)訓(xùn)練在周期時(shí)提前結(jié)束訓(xùn)練過程,完成訓(xùn)練。
實(shí)施效果:在信息系統(tǒng)自動(dòng)巡檢方法使用中,每天采集所有信息系統(tǒng)的運(yùn)行向量,將運(yùn)行向量輸入訓(xùn)練完畢的神經(jīng)網(wǎng)絡(luò),得到每一個(gè)信息系統(tǒng)的巡檢結(jié)果,當(dāng)巡檢結(jié)果為異常時(shí),將異常的信息系統(tǒng)的編號(hào)推送給運(yùn)維人員,在由運(yùn)維人員進(jìn)行定向巡檢并及時(shí)采取相應(yīng)措施,實(shí)現(xiàn)不同類型的信息系統(tǒng)的自動(dòng)化巡檢。