許 健,王 琪,唐海榮,韓少聰,張 弛,陳 梁,倪 洋
(南京南瑞信息通信科技有限公司,南京 211106)
電網(wǎng)企業(yè)信息化運維系統(tǒng)在日益復(fù)雜的運維活動中扮演著重要角色,提升了信息運維工作水平和工作效率。其組件化的中臺設(shè)計可以有效降低系統(tǒng)耦合,提高基礎(chǔ)服務(wù)可復(fù)用性。被管IT資源可按以下分類:主機、數(shù)據(jù)庫、中間件、網(wǎng)絡(luò)、安全、存儲、虛擬化、服務(wù)、應(yīng)用、機房環(huán)境等。各類資源下具有不同的指標(biāo),指標(biāo)是對資源性能的數(shù)據(jù)描述或狀態(tài)描述。運維人員在監(jiān)測某些指標(biāo)的異常狀態(tài)時首先需要配置相應(yīng)的閾值規(guī)則,當(dāng)采集的指標(biāo)數(shù)據(jù)不在閾值范圍內(nèi)則判定為區(qū)間越界,需要及時產(chǎn)生告警并通知給運維人員。
面對大量復(fù)雜多樣的指標(biāo),運維人員手動錄入閾值規(guī)則往往依托經(jīng)驗,一定程度上影響著告警準(zhǔn)確性,并且重復(fù)勞動增加了運維負(fù)擔(dān)。當(dāng)業(yè)務(wù)需求變化時,運維人員需要重新編輯之前的閾值規(guī)則,維護成本較高,閾值規(guī)則的靈活性較差。針對這些痛點,本文轉(zhuǎn)變靜態(tài)閾值的配置思路,引入簡單高效的K-means聚類分析方法,充分利用指標(biāo)歷史數(shù)據(jù)分析產(chǎn)生各時段動態(tài)閾值的區(qū)間上下限,降低人工參與度,提高閾值告警規(guī)則配置的靈活性和告警的準(zhǔn)確性。傳統(tǒng)K-means算法聚類數(shù)和中心點的選取缺乏明確標(biāo)準(zhǔn)定義[1],改進隨機選取問題來優(yōu)化算法聚類效果。
電網(wǎng)企業(yè)信息化運維系統(tǒng)監(jiān)測的資源指標(biāo)數(shù)據(jù)由采集控制組件提供。采集控制組件基于各類采集插件,實現(xiàn)支持多級復(fù)雜主、子資源結(jié)構(gòu)關(guān)系的安全設(shè)備、存儲設(shè)備、網(wǎng)絡(luò)設(shè)備、數(shù)據(jù)庫、虛擬化及大數(shù)據(jù)部分類型的組件數(shù)據(jù)采集。資源監(jiān)測組件基于微服務(wù)架構(gòu)接口規(guī)范為上層應(yīng)用提供主機、數(shù)據(jù)庫、中間件、網(wǎng)絡(luò)設(shè)備、安全設(shè)備、存儲設(shè)備及云平臺等資源的狀態(tài)監(jiān)測數(shù)據(jù)、性能數(shù)據(jù)及告警數(shù)據(jù)服務(wù)。采集監(jiān)測的層次關(guān)系如圖1所示。
圖1中的異常告警及通知依賴于運維人員配置的指標(biāo)閾值,實時采集的指標(biāo)值存儲到消息總線上,兩者進行閾值規(guī)則匹配。比如CPU使用率大于95%時則產(chǎn)生告警等級為嚴(yán)重的告警,并對告警信息進行通知分發(fā)。
圖1 采集監(jiān)測層次關(guān)系
電網(wǎng)企業(yè)信息化運維系統(tǒng)在日常運維中需要由人工來錄入指標(biāo)的閾值告警規(guī)則,配置過程中需要進行較多的頁面交互,主要流程如下:
(1)在系統(tǒng)菜單中進入告警策略管理頁面,在主資源類型下新增相應(yīng)的告警策略,主資源類型包括服務(wù)器類、數(shù)據(jù)庫類、中間件類、網(wǎng)絡(luò)設(shè)備、鏈路、安全設(shè)備、云平臺等。
(2)點擊告警策略中的觸發(fā)條件藍(lán)色數(shù)字下鉆到該策略的資源與指標(biāo)關(guān)聯(lián)列表頁面。主資源下包含許多子資源,不同主子資源又包含豐富的指標(biāo)。
(3)點擊需要監(jiān)測的指標(biāo)中的觸發(fā)規(guī)則藍(lán)色數(shù)字下鉆到該指標(biāo)的觸發(fā)規(guī)則配置頁面。配置閾值告警規(guī)則,填寫閾值上下限、持續(xù)時間、告警級別等表單信息,確認(rèn)保存。
從整個流程來看,面對豐富的監(jiān)測指標(biāo),一是交互多重復(fù)工作量大,二是對運維人員的經(jīng)驗有一定要求。且當(dāng)業(yè)務(wù)需求變化時,還需回到原表單處重新編輯閾值告警規(guī)則,維護成本較高,欠缺靈活性。
聚類分析屬于無監(jiān)督學(xué)習(xí),常見的分類主要有基于層次的聚類算法、基于劃分的聚類算法、基于密度的聚類算法、基于網(wǎng)絡(luò)的聚類算法和基于模型的聚類算法[2]。
針對上節(jié)提到的問題,轉(zhuǎn)變靜態(tài)閾值的配置思路,從運維現(xiàn)場每五分鐘采集一次指標(biāo)數(shù)據(jù)來看,有豐富的指標(biāo)歷史數(shù)據(jù)可供使用,便可聚類分析出各時段指標(biāo)的動態(tài)閾值上下限,降低人工參與度,提高閾值告警規(guī)則配置的靈活性和告警的準(zhǔn)確性。
2.1.1 手肘法
手肘法通過樣本聚類總誤差平方和SSE這一指標(biāo)來表示樣本的聚合程度,其值越小表示類間樣本越緊湊。SSE的計算公式為
其中,Ci表示第i個類,n表示Ci中的樣本點,mi是Ci中所有樣本的均值。每個類的聚合程度會隨著聚類數(shù)k的增大而逐漸提高,樣本劃分越來越精細(xì),誤差平方和SSE也會逐漸變小。在聚類初期,k小于真實聚類數(shù),k的增大會迅速增加每個類的聚合程度,SSE的下降幅度也會很大;而當(dāng)k到達(dá)真實聚類數(shù)時,再增大k時樣本聚合程度改變不會很大,SSE的下降幅度隨著k值的繼續(xù)增大而趨于平緩,即SSE和k的關(guān)系圖是一個手肘的形狀,而這個肘部對應(yīng)的k值就是數(shù)據(jù)的真實聚類數(shù)。然而,SSE加和的方式會使得某些分類效果較差的類計算所得的類間誤差平方和被聚類效果較好的類間誤差平方和中和[3],本文進一步結(jié)合統(tǒng)計學(xué)中的Gap Statistic方法來確定最佳聚類數(shù)。
2.1.2 Gap Statistic法
Gap Statistic的主要思想是計算每一類里各樣本兩兩之間歐式距離的平方和,并將其與構(gòu)建的參考零均值均勻分布所得的聚類結(jié)果相比較,從而確定數(shù)據(jù)集的最佳聚類數(shù)目。當(dāng)聚類數(shù)k為最優(yōu)值時,Gap Statistic這個統(tǒng)計量達(dá)到最大值,也意味著此時的聚類結(jié)果與零均值均勻分布產(chǎn)生的數(shù)據(jù)的聚類結(jié)果差別最大。算法流程分為以下三步:
第1步:改變聚類數(shù)量k從1到kmax,計算不同k值對應(yīng)的類內(nèi)偏離和wk,計算公式為
其中Cr表示聚類得到的第r類,nr表示樣本個數(shù),表示該類中所有樣本兩兩之間的距離和。
第2步:構(gòu)建B個參考零均值均勻分布數(shù)據(jù),改變聚類數(shù)量k從1到kmax,計算不同k值對應(yīng)的類內(nèi)偏離和wkb,b=1,2,…,B,k=1, 2, …,kmax。
第3步:對前兩步的類內(nèi)偏離和取對數(shù)處理,二者比較后的差值作為Gap(k),計算公式為
傳統(tǒng)K-means算法在開始運行時初始聚類中心的選取是隨機的[4],對聚類結(jié)果的影響較大。為了避免聚類中心陷入局部最優(yōu)解,仿生智能優(yōu)化算法的出現(xiàn)提高了K-means算法的全局搜索能力,比較流行的算法有螢火蟲算法、森林優(yōu)化算法、遺傳算法等[5]。本文采用變步長螢火蟲算法的最優(yōu)解作為初始聚類中心點。
2.2.1 螢火蟲算法
螢火蟲算法是一種基于群體的隨機搜索算法[6]。把空間各點看成螢火蟲,利用發(fā)光弱的螢火蟲受發(fā)光強的螢火蟲吸引的特點進行位置迭代,從而完成尋優(yōu)過程。尋優(yōu)過程和螢火蟲的相對亮度和相互吸引度有關(guān)。相對亮度用式(4)表示,相互吸引度用式(5)表示:
式(4)、式(5)中的γ為光吸收因子,一般情況下γ∈ [0.01,100][7],r為兩只螢火蟲間的歐式距離,I0表示r為0時的亮度,β0表示r為0時的吸引度,也即最大吸引度。發(fā)光越亮代表其位置越好,最亮螢火蟲即代表函數(shù)的最優(yōu)解。發(fā)光越亮的螢火蟲對周圍螢火蟲的吸引度越高,同時與距離成反比,距離越大吸引度越小,若發(fā)光亮度一樣,則螢火蟲做隨機運動進行位置更新,假設(shè)Xj比Xi吸引度高,Xi位置更新計算公式為
其中α為步長因子,rand()為[-0.5,0.5]區(qū)間范圍內(nèi)的隨機擾動[8]。
算法流程如下:
第1步:初始化算法參數(shù):螢火蟲數(shù)量、光吸收因子、最大吸引度、步長因子和最大迭代次數(shù);
第2步:計算初始位置處的螢火蟲目標(biāo)函數(shù)值作為各自的最大熒光亮度;
第3步:計算螢火蟲群的相對亮度和相互吸引度,根據(jù)相對亮度判斷螢火蟲移動方向,更新位置;
第4步:根據(jù)更新后的位置,重新計算相對亮度;
第5步:當(dāng)滿足最大迭代次數(shù)則輸出最優(yōu)個體值,否則返回第3步繼續(xù)下一次尋優(yōu)。
2.2.2 變步長螢火蟲算法
隨著迭代次數(shù)的增加,螢火蟲群會在最優(yōu)值附近聚集[9]。此時螢火蟲個體與最優(yōu)值之間的距離已經(jīng)非常小,在個體向最優(yōu)值趨近的過程中,很可能會出現(xiàn)螢火蟲移動的距離大于個體與最優(yōu)值間距的情況,而導(dǎo)致個體更新自己位置時跳過了最優(yōu)值,出現(xiàn)震蕩,將會導(dǎo)致最優(yōu)值發(fā)現(xiàn)率降低,影響算法的收斂精度和速度。為了盡量避免由上述原因造成的收斂較慢情況,潘曉英等[10]采用自適應(yīng)移動步長代替原有固定步長,通過螢火蟲種群的聚合程度令步長變化呈減小的趨勢,自適應(yīng)移動步長計算公式為
其中α,為螢火蟲每一代的自適應(yīng)步長因子,D(Ci)t+1為螢火蟲種群移動后的類間距離和。本文借鑒了該思想,在算法開始時,將初始步長設(shè)定為相對較大值,而后隨著迭代次數(shù)增加設(shè)定一個判定條件:當(dāng)?shù)螖?shù)達(dá)到最大迭代次數(shù)的一半時,用式(8)替代固定步長α,使其逐漸減小趨于0,第t次的步長因子為
其中e為自然常數(shù),則螢火蟲算法將在開始時具有較好的全局尋優(yōu)能力,迅速定位在接近全局最優(yōu)解的區(qū)域,而后期也具有良好的局部搜索能力,能精確得到全局最優(yōu)解。
聚類數(shù)和初始聚類中心點的選取對算法的結(jié)果有重要的影響。針對手肘法可能出現(xiàn)“肘點”不明確問題,進一步結(jié)合Gap Statistic確定出最佳聚類數(shù);針對螢火蟲算法隨著迭代次數(shù)增加可能會在最優(yōu)值附近出現(xiàn)震蕩的問題,改變步長因子來提高螢火蟲算法的全局尋優(yōu)和局部搜索能力,將最優(yōu)值作為K-means聚類算法的初始中心點。改進后的K-means算法流程如圖2所示。
圖2 改進K-means算法流程圖
為驗證改進K-means算法的指標(biāo)閾值告警方法,在電網(wǎng)企業(yè)某省公司信息化運維系統(tǒng)測試環(huán)境中進行數(shù)據(jù)測試。采集由五臺物理機組成,操作系統(tǒng)為centos7.5,配置為32核CPU,64 G內(nèi)存,500 G硬盤。其中兩臺部署weblogic集群及jar包庫,三臺部署采集后臺服務(wù)。信息化運維系統(tǒng)采集控制組件和資源監(jiān)測組件進行容器化部署。
第1步:對樣本個數(shù)為n的指標(biāo)數(shù)據(jù)進行缺失值處理,缺失值采用該指標(biāo)當(dāng)天的平均值填充。
第2步:利用二分查找,計算[1,?n]范圍內(nèi)不同k值下誤差平方和以及類內(nèi)偏離和。
第3步:繪制出誤差平方和隨k值增加的變化趨勢,記錄誤差平方和減少趨勢不再明顯時的k1值。
第4步:計算樣本在均勻分布推斷下的平均類內(nèi)偏離和。
第5步:計算樣本類內(nèi)偏離和與平均類內(nèi)偏離和的log差作為Gap Statistic。
第6步:繪制出Gap Statistic隨k值增加的變化趨勢Gap(k)函數(shù),記錄Gap(k)max時的k2值。
第7步:比較第2步和第5步中的k值,如果兩者相等則將此k值作為樣本聚類個數(shù),如果不等則k1不斷遞增1,取Gap(k1)最大時的k1作為樣本聚類個數(shù)。
第8步:設(shè)定變步長螢火蟲算法參數(shù):綜合考慮精度和計算開銷,設(shè)定螢火蟲數(shù)量為,光吸收因子為0.5,最大吸引度為1,最大迭代次數(shù)為200,初始步長因子設(shè)定為0.95,當(dāng)?shù)螖?shù)達(dá)到100時,按式(9)減少步長因子,迭代直到收斂到最優(yōu)解作為初始聚類中心點。
第9步:由第7步得到的最佳聚類數(shù)和第8步得到的初始聚類中心點進行K-means聚類分析,繪制結(jié)果。
實驗指標(biāo)數(shù)據(jù)選取CPU使用率,采樣周期為5分鐘,按天計,一天可采集24*60/5=288個CPU使用率數(shù)值,連續(xù)四周的工作日共計288*5*4=5760個樣本。檢查樣本數(shù)據(jù)中是否存在缺失項,若存在則采用該天的CPU使用率平均值填充缺失值。在anaconda3環(huán)境中啟動Jupyter Notebook后運行了python代碼,繪制出實驗流程第3步中的誤差平方和隨k值增加的變化趨勢,如圖3所示,第6步中的Gap Statistic隨k值增加的變化趨勢如圖4所示。
圖3 誤差平方和隨k值增加的變化趨勢
圖4 Gap Statistic隨k值增加的變化趨勢
由圖3、圖4可知,“肘點”的k值為4,Gap Statistic取最大值時的k值為4,故本次實驗的最佳聚類數(shù)為4,由實驗流程第8步求得的初始聚類中心點進行K-means聚類分析,結(jié)果如圖5所示,橫軸表示時間,進行歸一化處理后,范圍為0~23,單位為h,指代一天24小時;縱軸表示CPU使用率,范圍為0~100,單位為%。
圖5 CPU使用率聚類模擬實驗
從聚類結(jié)果來看,整個圖形近似呈現(xiàn)正態(tài)分布的特征,即業(yè)務(wù)活躍時段如早晨8點到下午5點,有著較高的網(wǎng)站訪問量、程序計算以及數(shù)據(jù)庫讀寫等操作,CPU使用率活動在20%~90%之間;而非業(yè)務(wù)活躍時段如非工作時段和夜間,網(wǎng)站訪問量降低后,機器的壓力也隨之減少,CPU使用率基本在20%以下。從時間段劃分來看,上午10點到下午4點之間,CPU使用率有較大概率大于60%,為了留有一定的富余量應(yīng)對業(yè)務(wù)高峰,此時應(yīng)將告警的閾值適當(dāng)降低,例如大于80%則產(chǎn)生告警級別為警告的告警。綜上所述,通過改進后的K-means算法能夠聚類分析出各時段的動態(tài)閾值,由后臺微服務(wù)動態(tài)調(diào)整并與消息總線上采集的指標(biāo)進行閾值規(guī)則匹配。電網(wǎng)企業(yè)某省公司現(xiàn)場運維運用新算法后,產(chǎn)生了更加精確的告警,降低了運維人員維護的工作量。
電網(wǎng)企業(yè)信息化運維系統(tǒng)由人工配置指標(biāo)閾值告警欠缺靈活性且重復(fù)工作量大,針對這一痛點,采用簡單高效的K-means聚類算法對指標(biāo)歷史數(shù)據(jù)按時間進行劃分并由后臺微服務(wù)調(diào)整各時段的動態(tài)閾值。聚類數(shù)的設(shè)定和初始聚類中心點的選取對聚類結(jié)果有很大影響。針對手肘法可能出現(xiàn)“肘點”不明確問題,進一步結(jié)合GapStatistic確定出最佳聚類數(shù);針對螢火蟲算法隨著迭代次數(shù)增加可能會在最優(yōu)值附近震蕩問題,改變步長因子來提高螢火蟲算法的全局尋優(yōu)和局部搜索能力,將最優(yōu)值作為K-means聚類算法的初始中心點。通過電網(wǎng)企業(yè)某省公司信息化運維系統(tǒng)測試環(huán)境采集的CPU使用率歷史數(shù)據(jù)進行聚類分析實驗,結(jié)合業(yè)務(wù)特性分析了不同時段CPU使用率的閾值情況,實驗結(jié)果表明改進的K-means算法能有效分析出指標(biāo)不同時段的閾值情況,從而可由后臺微服務(wù)調(diào)整動態(tài)閾值,減輕運維人員在系統(tǒng)中配置大量的指標(biāo)閾值告警規(guī)則,降低了系統(tǒng)的運維成本,進一步提升了告警的準(zhǔn)確性。