數(shù)據(jù)庫運維的那些難題,我們用機器學(xué)習(xí)解決了
作者介紹
馬博,平安科技數(shù)據(jù)庫團隊運維開發(fā)工程師,參與了平安科技數(shù)據(jù)庫領(lǐng)域的AIOps落地項目,主要包括趨勢預(yù)測、異常檢測、自動化運維平臺、日志告警等方面,目前致力于平安云上的數(shù)據(jù)庫智能運維體系建設(shè)。
回顧整個運維的發(fā)展史,從最開始的系統(tǒng)管理到基礎(chǔ)腳本運維,再到自動化運維,***發(fā)展到了智能運維。經(jīng)過這些年的發(fā)展,運維人員的工作內(nèi)容發(fā)生了翻天覆地的變化:
十幾年前,我們不知道故障會出現(xiàn)在哪,也不知道什么時候會出現(xiàn)故障,只有在故障出現(xiàn)的時候才能去查找根因并解決故障,這是一種很被動的方法。
到后來大規(guī)模的腳本引入,我們處理問題的方式變得更加科學(xué)了,速度也差強人意,但還是沒有改變這一種被動解決問題的本質(zhì)現(xiàn)象;有了先前的經(jīng)驗,很多公司引入了監(jiān)控系統(tǒng),發(fā)展了自己的自動化運維平臺,旨在問題發(fā)生或者即將發(fā)生時能夠自動地去解決問題,這種方式剛突破了之前所有的“被動運維”的本質(zhì),能夠防患于未然,將故障扼殺在搖籃中。但與之而來的卻是大量的告警及海量的監(jiān)控數(shù)據(jù),如何更加高效地解決故障成了我們現(xiàn)在必須解決的難題。
人工智能時代的來臨恰好解決了上面我們所面臨的問題,而AIOps就是希望基于已有的運維數(shù)據(jù)(日志、監(jiān)控信息、應(yīng)用信息等),并通過機器學(xué)習(xí)的方式來進一步解決自動化運維沒辦法解決的問題。
我們目前正在積極推動數(shù)據(jù)庫運維從自動化到智能化的轉(zhuǎn)變。眾所周知,數(shù)據(jù)挖掘和機器學(xué)習(xí)離不開海量的數(shù)據(jù)作為基礎(chǔ),而平安科技通過這幾年的自動化運維的應(yīng)用,已經(jīng)積累了海量多維的數(shù)據(jù)庫性能數(shù)據(jù)、日志數(shù)據(jù)和主機數(shù)據(jù)。
利用這些數(shù)據(jù),我們可以通過機器學(xué)習(xí)等方法在時間序列異常檢測、根因分析、郵件告警收斂、容量預(yù)測等多個應(yīng)用場景中獲取我們想要的信息,從而進行故障的自動發(fā)現(xiàn)、自動診斷和自動解決。
一、時間序列異常檢測
時序數(shù)據(jù)是AIOps的基礎(chǔ)數(shù)據(jù),有著規(guī)模大、種類多、需求多樣的特點。在自動化運維階段,我們所采用的大多是恒定閾值的方法。
這種方法簡單易實現(xiàn),但是缺點也顯而易見:它不夠靈活,發(fā)現(xiàn)故障也不夠及時,無法滿足現(xiàn)在的告警需求。如下圖所示,傳統(tǒng)的閾值告警會忽略掉兩個波動的異常:
恒定閾值方法
動態(tài)閾值的方法在此時應(yīng)運而生,傳統(tǒng)的動態(tài)閾值的方法采用了基于同比和環(huán)比的統(tǒng)計方法,這種方法解釋性強,易于實現(xiàn),但是靈活性較差,受節(jié)假日影響較大(如下圖中,9月24號為中秋節(jié),流量和上周相比下降明顯,此時環(huán)比和同比的方法不適用),發(fā)現(xiàn)問題也不夠及時。
還有許多公司采用帶權(quán)移動平均的方法來做動態(tài)閾值,他們認為在同一個維度下,某一個點的數(shù)值必然和它之前一段時間的數(shù)據(jù)有關(guān),如以下公式所示:
9/18-9/25指標數(shù)據(jù)圖
我們目前正將機器學(xué)習(xí)應(yīng)用在時序數(shù)據(jù)異常檢測中,和上述方法相比,機器學(xué)習(xí)的方法更為準確,成本也更大。
時間序列異常檢測本質(zhì)上也可以看做“正常”和“異常”的二分類問題,通過將歷史的監(jiān)控數(shù)據(jù)打上標簽,再將有監(jiān)督和無監(jiān)督算法結(jié)合建立模型,可以判斷當前的時間序列是否是正常的。
二、根因分析
大多數(shù)情況下,由于監(jiān)控指標的相關(guān)聯(lián)性,如果某個指標異常了,很多相關(guān)指標也會異常。如果同時對所有的告警指標進行分析和處理,會浪費許多人力。為了解決這個問題,我們需要進行根因分析來進行針對性處理。
通常我們可以通過下列3種方法對數(shù)據(jù)進行根因分析:
-
相關(guān)度指標獲取,找到和異常指標在特定時間段內(nèi)相似的指標。
-
在大量的樣本中,找出經(jīng)常一起出現(xiàn)的異常指標(該問題就轉(zhuǎn)換成了頻繁序列挖掘問題),實現(xiàn)方法有關(guān)聯(lián)規(guī)則、APRIORI、FP_GROTH等。
-
利用決策樹的強可解釋性,對正負樣本進行分類,然后通過異常指標的分類樹途徑,找到頻繁的異常指標集。
以O(shè)racle數(shù)據(jù)庫的DB_TIME偏高為例:
-
***種方法找出當前時間段內(nèi)與DB_TIME指標有相似曲線的指標,并將最相似指標TOP N作為根因;
-
第二種方法則是在歷史數(shù)據(jù)中,當DB_TIME異常時,把其他異常的指標組成若干個項集,再從這些項集里面利用關(guān)聯(lián)規(guī)則找出強相關(guān)組合,則這些組合中的其他指標被視為根因;
-
第三種方法,則是在歷史數(shù)據(jù)中根據(jù)DB_TIME是否異常,將歷史數(shù)據(jù)分為正、負樣本,訓(xùn)練決策樹模型得到最終的根因。
根因分析方法一
根因分析方法二
根因分析方法三
三、告警收斂
當監(jiān)控業(yè)務(wù)發(fā)展到一定規(guī)模時,每日收到的告警郵件數(shù)會呈指數(shù)型增長,尤其是一些監(jiān)控頻率較高的監(jiān)控項出現(xiàn)問題時,這種情況特別明顯。
為了解決這一問題,在最開始,我們設(shè)定了告警頻率,讓同一種告警在一段時間內(nèi)只出現(xiàn)一次。
這種方法確實會減少一部分告警,但是還有一些顯而易見的告警可以通過制定規(guī)則的方法來實現(xiàn)進一步的告警收斂。比如同一個集群內(nèi)的數(shù)據(jù)庫都出現(xiàn)了ping不通的問題,又比如同一個網(wǎng)段內(nèi)的所有IP流量突增,就可以將這些告警整合后再發(fā)送。
而在AIOps時代,告警收斂和根因分析往往是一起進行的。
和根因分析方法二類似,我們可以先獲取告警項集數(shù)據(jù),并提取頻繁項。如果在頻繁告警項集中,告警A和告警B經(jīng)常一起出現(xiàn)并且在A出現(xiàn)的時間比B早,則在郵件告警中,我們可以忽略B告警,只將A告警推送給運維人員。
不同場景下的告警收斂有著不同的需求,和AIOps相比,傳統(tǒng)的告警收斂方法更加簡單和高效,基于規(guī)則的方法也具有很強的拓展性和解釋性;而AIOps卻能挖掘出我們利用常識和經(jīng)驗無法發(fā)現(xiàn)的關(guān)聯(lián)項并進行告警收斂。
四、容量預(yù)測
容量預(yù)測在數(shù)據(jù)庫運維中的很多地方都應(yīng)用著,不同的應(yīng)用場景有不同的特性,我們很難找到一個模型去適應(yīng)所有的數(shù)據(jù)。
在容量預(yù)測上,我們的典型應(yīng)用是數(shù)據(jù)庫DB_SIZE容量預(yù)測,數(shù)據(jù)庫容量具有總體上升、無規(guī)律、波動大的特點。對數(shù)據(jù)庫容量進行合理的預(yù)測,短期可以提前發(fā)現(xiàn)可能的故障,進行主動預(yù)防和提前解決,無需在問題發(fā)生時被動處理;長期可以進行合理的容量規(guī)劃和資源分配。
最開始,我們想到的是線性回歸加上簡單的數(shù)據(jù)預(yù)處理,但是結(jié)果十分不理想。由于業(yè)務(wù)規(guī)模的落差,不同數(shù)據(jù)庫的容量有著很大的差別,并且在數(shù)據(jù)庫進行導(dǎo)表,擴容等操作時,線性擬合或者非線性擬合的效果不盡人意。
顯然,傳統(tǒng)的線性回歸方法雖然簡單,但是預(yù)測效果較差,不能滿足要求。為了解決這一問題,我們將容量數(shù)據(jù)進行了分類,分為周期型和突升突降型,分類的方法可以采用統(tǒng)計方法,也可以使用聚類或分類的方法。
對于周期型數(shù)據(jù),我們可以認為其實線性可擬合的,因為在總體上升的趨勢上,周期型的數(shù)據(jù)在周期內(nèi)的增長值是線性遞增的。對于這種類型的數(shù)據(jù),我們可以采用線性回歸的機器學(xué)習(xí)方法來對數(shù)據(jù)庫容量進行預(yù)測。
周期型數(shù)據(jù)
而對于突增突降型的數(shù)據(jù),線性擬合效果較差,這時我們使用環(huán)比增量求和的方法,求得歷史數(shù)據(jù)中星期一到星期天的具體每天增量的加權(quán)平均值;再將這個增量應(yīng)用到預(yù)測中。和單純的線性擬合方法相比,這種方法的準確性提高了很多,平均預(yù)測數(shù)據(jù)的均方殘差縮小了近一倍。
突升突降型數(shù)據(jù)
以上四個應(yīng)用場景的技術(shù)開拓都是致力于通過AI讓運維更加高效,讓更多的故障可以被提前發(fā)現(xiàn)和解決。關(guān)于AIOps,我們還有很多東西可以去嘗試和探索,如智能問答機器人、日志集中分析平臺等,后續(xù)有相關(guān)成果再與大家分享。