聊聊指標異常檢測與等待事件分析的相互補充作用
指標異常檢測是基于對指標歷史的分析的,傳統的指標異常檢測是基于基線的。通過專家的經驗或者根據某個系統平時的運行狀況,設定一個極限范圍,然后對指標的高值、低值,均值等進行分析,發現其是否有違背基線的現象發生,如果存在則產生基線告警。這種簡單的基線告警算法目前還是大多數運維自動化系統中的主要方法。
在運維實踐工作中,這種基線告警方法的效果并不好,主要有兩個原因,第一個是基線的設置都是個性化的,需要有經驗的專家針對系統的個性化特點去設置才更有效,否則基線告警的準確性就不夠。而且隨著系統不斷地變化,基線也需要動態進行調整,否則基線告警的準確性會進一步降低。
而這種動態調整,如果是手工進行的,那么工作量就太大了。另外一個就是系統中的各種指標也是存在一些畸變的,還有些指標是單邊增長,并無上下限的,針對這樣的指標的處理也需要有一定的個性化方法。
正是基于這個原因,指標異常分析如果基于基線,就會存在實踐效果不佳的問題。如果我們對企業中的上百套系統使用幾種預置的基線模板,那么分析效果就十分有限。采用動態自動基線的方法是目前較為先進的方法。
其基本方法是根據某個指標在過去的某段時間里的變化特點,經過一段時間的數據積累之后,自動抽象出其變化特點,形成一個立體化的帶有時間延續性的基線特征。然后根據這個特征來判斷指標是否異常。
這種基于復合算法的指標異常分析方法避免了通過簡單的上下閾值設置的指標基線那種呆板與教條化的問題,在實際應用中更為有效。不過這種算法更為消耗算例,為了控制計算量,會設定一個參數,通過調整精度來降低算例需求。這和人臉識別的準確性與誤識別率類似,參數設置的嚴格了,算力要求高,誤判少,但是也可能會漏掉一些異常,設置的寬松一點,算力要求低,誤判就多了,遺漏的異常就會少一些。
因此這種異常檢測最大的問題就是準確率和告警數量之間的平衡。不管怎么樣,這種算法總是會遺漏一些問題的。另外一種情況是,如果某個指標是新加入的,或者以前并無歷史數據,那么算法是無法發揮作用的。這種時候,需要一些其他的方法來進行輔助。
去年年底遇到的一個案例給了我一些啟示,在具有等待事件的某些數據庫系統(比如Oracle、PostgreSQL、達夢、Oceanbase、PolarDB等)中,利用等待事件分析結合指標異常檢測,會取得更好的效果。
去年年底時候,一個客戶的系統突然比較慢,通過D-SMART發現這段時間有一個告警的出現比較頻繁。
12點多之后一直出現這個報警。而這個報價一般情況下最常見的就是三種情況,一種是存在rman備份作業,一種是存在大量的DIRECT PATH操作,包括SQL LOADER,expdp,第三種是有些SQL寫的不好,產生了大量的direct path read 。這三種情況最終都引起了存儲的IO性能問題,從而影響了數據庫的總體性能。
和用戶溝通后,用戶認為當天不是周末,中午時間頂多有幾分鐘就能完成的歸檔日志備份,不可能有能夠持續幾十分鐘的備份作業存在。他們馬上登錄到系統中,查看了當前正在執行的備份作業,也沒有發現當前系統中存在rman備份的進程。
不過他們通過智能診斷工具分析了一下,發現了當時確實存在較大的RMAN流量。于是查了系統中的rman備份歷史數據的相關視圖,發現了一個剛剛被終止不久的未完成備份。與管理系統備份的人員溝通后確認因為這是一套新升級,更換了存儲和服務器,升級了數據庫的版本。因此備份任務剛剛配置,并且備份啟動時間被配置錯了,第一次備份時間應該是本周日開始,沒想到今天中午就觸發了。他們發現后也立即終止了備份任務。
這件事當時就很簡單的結束了,不過從上面的診斷分析中,我們發現有很多指標因為缺乏足夠的歷史數據,從而導致我們的異常檢測無法進行。
因此當時的智能診斷的分析結果中,IO延時的問題被排在第一位,而智能診斷工具根據一些其他的蛛絲馬跡,也發現了其中可能存在備份任務的問題。不過如果看這個結果,IO延時可能是主因,而實際上備份作業引發了IO問題,是問題的主因。
去年這個案例發生的時候,我們的基于等待事件的智能診斷工具還沒有開發完成,不過用戶的歷史數據已經送到我們實驗室了。今天早上我在想寫點什么的時候,翻出了這個案例。于是我利用等待事件智能分析工具重新分析了一下。雖然使用了歷史抽樣數據來進行分析,不過等待事件分析還是很好的還原了當時系統的現場,更為準確的發現了當時系統存在的問題。這個診斷結論比上面的那個要準確多了。
如果是人工分析,有經驗的專家可以根據自己的經驗舉一反三,很容易切中要點。不過智能分析主要依賴于存在缺陷的數據和算法,因此很難做到人類專家那樣的綜合分析。在以往的運維事件中,我們也發現了,通過不同維度的多種渠道去做分析,然后匯總其結果,這種三明治算法往往能夠獲得較好的效果。
在利用指標異常檢測做智能化診斷分析的時候,配合以同一時間段的等待事件分析,綜合其結果,那么可能會獲得更好的分析性能。我們隨后會開展這方面的研究與驗證工作。后續我再給大家分享實踐結果吧!