天天看點

基于AI算法的資料庫異常監測系統的設計與實作

作者:美團技術團隊
美團資料庫平台研發組,面臨日益急迫的資料庫異常發現需求,為了更加快速、智能地發現、定位和止損,我們開發了基于AI算法的資料庫異常檢測服務。本文從特征分析、算法選型、模型訓練與實時檢測等次元介紹了我們的一些實踐和思考,希望為從事相關工作的同學帶來一些啟發或者幫助。

1. 背景

資料庫被廣泛用于美團的核心業務場景上,對穩定性要求較高,對異常容忍度非常低。是以,快速的資料庫異常發現、定位和止損就變得越來越重要。針對異常監測的問題,傳統的固定門檻值告警方式,需要依賴專家經驗進行規則配置,不能根據不同業務場景靈活動态調整門檻值,容易讓小問題演變成大故障。

而基于AI的資料庫異常發現能力,可以基于資料庫曆史表現情況,對關鍵名額進行7 * 24小時巡檢,能夠在異常萌芽狀态就發現風險,更早地将異常暴露,輔助研發人員在問題惡化前進行定位和止損。基于以上這些因素的考量,美團資料庫平台研發組決定開發一套資料庫異常檢測服務系統。接下來,本文将會從特征分析、算法選型、模型訓練與實時檢測等幾個次元闡述我們的一些思考和實踐。

2. 特征分析

2.1 找出資料的變化規律

在具體進行開發編碼前,有一項非常重要的工作,就是從已有的曆史監控名額中,發現時序資料的變化規律,進而根據資料分布的特點選取合适的算法。以下是我們從曆史資料中選取的一些具有代表性的名額分布圖:

基于AI算法的資料庫異常監測系統的設計與實作

圖1 資料庫名額形态

從上圖我們可以看出,資料的規律主要呈現三種狀态:周期、漂移和平穩[1]。是以,我們前期可以針對這些普遍特征的樣本進行模組化,即可覆寫大部分場景。接下來,我們分别從周期性、漂移性和平穩性這三個角度進行分析,并讨論算法設計的過程。

2.1.1 周期性變化

基于AI算法的資料庫異常監測系統的設計與實作
  1. 提取趨勢成分,分離出殘差序列。使用移動平均法提取出長期趨勢項,跟原序列作差得到殘差序列(此處周期性分析與趨勢無關,若不分離趨勢成分,自相關将顯著受到影響,難以識别周期)。
  2. 計算殘差的循環自相關(Rolling Correlation)序列。通過循環移動殘差序列後,與殘差序列進行向量點乘運算來計算自相關序列(循環自相關可以避免延遲衰減)。
  3. 根據自相關序列的峰值坐标來确定周期T。提取自相關序列的一系列局部最高峰,取橫坐标的間隔為周期(如果該周期點對應的自相關值小于給定門檻值,則認為無顯著周期性)。

具體過程如下:

基于AI算法的資料庫異常監測系統的設計與實作

圖2 周期提取流程示意

2.1.2 漂移性變化

對于待模組化的序列,通常要求它不存在明顯的長期趨勢或是存在全局漂移的現象,否則生成的模型通常無法很好地适應名額的最新走勢[2]。我們将時間序列随着時間的變化出現均值的顯著變化或是存在全局突變點的情況,統稱為漂移的場景。為了能夠準确地捕捉時間序列的最新走勢,我們需要在模組化前期判斷曆史資料中是否存在漂移的現象。全局漂移和周期性序列均值漂移,如下示例所示:

基于AI算法的資料庫異常監測系統的設計與實作

圖3 資料漂移示意

資料庫名額受業務活動等複雜因素影響,很多資料會有非周期性的變化,而模組化需要容忍這些變化。是以,差別于經典的變點檢測問題,在異常檢測場景下,我們隻需要檢測出曆史上很平穩,之後出現資料漂移的情況。綜合算法性能和實際表現,我們使用了基于中位數濾波的漂移檢測方法,主要的流程包含以下幾個環節:

  1. 中位數平滑 a.根據給定視窗的大小,提取視窗内的中位數來擷取時序的趨勢成分。 b.視窗需要足夠大,以避免周期因素影響,并進行濾波延遲矯正。 c.使用中位數而非均值平滑的原因在于為了規避異常樣本的影響。
  2. 判斷平滑序列是否遞增或是遞減 a.中位數平滑後的序列資料,若每個點都大于(小于)前一個點,則序列為遞增(遞減)序列。 b.如果序列存在嚴格遞增或是嚴格遞減的性質,則名額明顯存在長期趨勢,此時可提前終止。
  3. 周遊平滑序列,利用如下兩個規則來判斷是否存在漂移的現象 a.目前樣本點左邊序列的最大值小于目前樣本點右邊序列的最小值,則存在突增漂移(上漲趨勢)。 b.目前樣本點左邊序列的最小值大于目前樣本點右邊序列的最大值,則存在突降漂移(下跌趨勢)。

2.1.3 平穩性變化

對于一個時序名額,如果其在任意時刻,它的性質不随觀測時間的變化而變化,我們認為這條時序是具備平穩性的。是以,對于具有長期趨勢成分亦或是周期性成分的時間序列而言,它們都是不平穩的。具體示例如下圖所示:

基于AI算法的資料庫異常監測系統的設計與實作

圖4 資料平穩示意

針對這種情況,我們可以通過機關根檢驗(Augmented Dickey-Fuller Test)[3]來判斷給定的時間序列是否平穩。具體地說,對于一條給定時間範圍名額的曆史資料而言,我們認為在同時滿足如下條件的情況下,時序是平穩的:

  1. 最近1天的時序資料通過adfuller檢驗獲得的p值小于0.05。
  2. 最近7天的時序資料通過adfuller檢驗獲得的p值小于0.05。

3. 算法選型

3.1 分布規律與算法選擇

通過了解業界的一些知名公司在時序資料異常檢測上公布的産品介紹,加上我們曆史積累的經驗,以及對部分線上實際名額的抽樣分析,它們的機率密度函數符合如下情況的分布:

基于AI算法的資料庫異常監測系統的設計與實作

圖5 分布偏斜示意

針對上述的分布,我們調研了一些常見的算法,并确定了箱形圖、絕對中位差和極值理論作為最終異常檢測算法。以下是對常見時序資料檢測的算法對比表:

基于AI算法的資料庫異常監測系統的設計與實作

我們沒有選擇3Sigma的主要原因是它對異常容忍度較低,而絕對中位差從理論上而言具有更好的異常容忍度,是以在資料呈現高對稱分布時,通過絕對中位差(MAD)替代3Sigma進行檢測。我們對不同資料的分布分别采用了不同的檢測算法(關于不同算法的原理可以參考文末附錄的部分,這裡不做過多的闡述):

  1. 低偏态高對稱分布:絕對中位差(MAD)
  2. 中等偏态分布:箱形圖(Boxplot)
  3. 高偏态分布:極值理論(EVT)

有了如上的分析,我們可以得出具體的根據樣本輸出模型的流程:

基于AI算法的資料庫異常監測系統的設計與實作

圖6 算法模組化流程

算法的整體模組化流程如上圖所示,主要涵蓋以下幾個分支環節:時序漂移檢測、時序平穩性分析、時序周期性分析和偏度計算。下面分别進行介紹:

基于AI算法的資料庫異常監測系統的設計與實作

舉例來說,假設給定時序自2022/03/01 00:00:00至2022/03/08 00:00:00止,給定視窗大小為5,周期跨度為一天,那麼對于時間索引30而言,對其模組化所需要的樣本點将來自于如下時間段:

[03/01 00:25:00, 03/01 00:35:00]

[03/02 00:25:00, 03/02 00:35:00]

...

[03/07 00:25:00, 03/07 00:35:00]

  1. 偏度計算。時序名額轉化為機率分布圖,計算分布的偏度,若偏度的絕對值超過門檻值,則通過極值理論進行模組化輸出門檻值。若偏度的絕對值小于門檻值,則通過箱形圖或是絕對中位差的方式進行模組化輸出門檻值。

3.2 案例樣本模組化

這裡選取了一個案例,展示資料分析及模組化過程,便于更清晰的了解上述過程。其中圖(a)為原始序列,圖(b)為按照天的跨度進行折疊的序列,圖(c)為圖(b)中某時間索引區間内的樣本經過放大後的趨勢表現,圖(d)中黑色曲線為圖(c)中時間索引所對應的下門檻值。如下是針對某時序的曆史樣本進行模組化的案例:

基于AI算法的資料庫異常監測系統的設計與實作

圖7 模組化案例

上圖(c)區域内的樣本分布直方圖以及門檻值(已剔除其中部分異常樣本),可以看到,在該高偏分布的場景中,EVT算法計算的門檻值更為合理。

基于AI算法的資料庫異常監測系統的設計與實作

圖8 偏斜分布門檻值對比

4. 模型訓練與實時檢測

4.1 資料流轉過程

為了實時檢測規模龐大的秒級資料,我們以基于Flink進行實時流處理為出發點,設計了如下的技術方案:

  1. 實時檢測部分:基于Flink實時流處理,消費Mafka(美團内部的消息隊列元件)消息進行線上檢測,結果存儲于Elasticsearch(以下簡稱ES)中,并産生異常記錄。
  2. 離線訓練部分:以Squirrel(美團内部的KV資料庫)作為任務隊列,從MOD(美團内部運維資料倉庫)讀取訓練資料,從配置表讀取參數,訓練模型,儲存于ES,支援自動和手動觸發訓練,通過定時讀取模型庫的方式,進行模型加載和更新。

以下是具體的離線訓練和線上檢測技術設計:

基于AI算法的資料庫異常監測系統的設計與實作

圖9 離線訓練和線上檢測技術設計

4.2 異常檢測過程

異常檢測算法整體采用分治思想,在模型訓練階段,根據曆史資料識别提取特征,標明合适的檢測算法。這裡分為離線訓練和線上檢測兩部分,離線主要根據曆史情況進行資料預處理、時序分類和時序模組化。線上主要加載運用離線訓練的模型進行線上實時異常檢測。具體設計如下圖所示:

基于AI算法的資料庫異常監測系統的設計與實作

圖10 異常檢測過程

5. 産品營運

為了提高優化疊代算法的效率,持續營運以提高精準率和召回率,我們借助Horae(Horae是美團内部可擴充的時序資料異常檢測系統)的案例回溯能力,實作線上檢測、案例儲存、分析優化、結果評估、釋出上線的閉環。

基于AI算法的資料庫異常監測系統的設計與實作

圖11 營運流程

目前,異常檢測算法名額如下:

  • 精準率:随機選擇一部分檢測出異常的案例,人工校驗其中确實是異常的比例,為81%。
  • 召回率:根據故障、告警等來源,審查對應執行個體各名額異常情況,對照監測結果計算召回率,為82%。
  • F1-score:精準率和召回率的調和平均數,為81%。

6. 未來展望

目前,美團資料庫異常監測能力已基本建構完成,後續我們将對産品繼續進行優化和拓展,具體方向包括:

  1. 具有異常類型識别能力。可以檢測出異常的類型,如均值變化、波動變化、尖刺等,支援按異常類型進行告警訂閱,并作為特征輸入後續診斷系統,完善資料庫自治生态[4]。
  2. 建構Human-in-Loop環境。支援根據回報标注自動學習,保障模型持續優化[5]。
  3. 多種資料庫場景的支援。異常檢測能力平台化以支援更多資料庫場景,如DB端到端報錯、節點網絡監測等。

7. 附錄

7.1 絕對中位差

絕對中位差,即Median Absolute Deviation(MAD),是對單變量數值型資料的樣本偏差的一種魯棒性測量[6],通常由下式計算而得:

基于AI算法的資料庫異常監測系統的設計與實作

其中在先驗為正态分布的情況下,一般C選擇1.4826,k選擇3。MAD假定樣本中間的50%區域均為正常樣本,而異常樣本落在兩側的50%區域内。當樣本服從正态分布的情況下,MAD名額相較于标準差更能适應資料集中的異常值。對于标準差,使用的是資料到均值的距離平方,較大的偏差權重較大,異常值對結果影響不能忽視,而對MAD而言少量的異常值不會影響實驗的結果,MAD算法對于資料的正态性有較高要求。

7.2 箱形圖

箱形圖主要通過幾個統計量來描述樣本分布的離散程度以及對稱性,包括:

  • Q0:最小值(Minimum)
  • Q1:下四分位數(Lower Quartile)
  • Q2:中位數(Median)
  • Q3:上四分位數(Upper Quartile)
  • Q4:最大值(Maximum)
基于AI算法的資料庫異常監測系統的設計與實作

圖12 箱線圖

将Q1與Q3之間的間距稱為IQR,當樣本偏離上四分位1.5倍的IQR(或是偏離下四分位數1.5倍的IQR)的情況下,将樣本視為是一個離群點。不同于基于正态假設的三倍标準差,通常情況下,箱形圖對于樣本的潛在資料分布沒有任何假定,能夠描述出樣本的離散情況,且對樣本中包含的潛在異常樣本有較高的容忍度。對于有偏資料,Boxplot進行校準後模組化更加符合資料分布[7]。

7.3 極值理論

真實世界的資料很難用一種已知的分布來概括,例如對于某些極端事件(異常),機率模型(例如高斯分布)往往會給出其機率為0。極值理論[8]是在不基于原始資料的任何分布假設下,通過推斷我們可能會觀察到的極端事件的分布,這就是極值分布(EVD)。其數學表達式如下(互補累積分布函數公式):

基于AI算法的資料庫異常監測系統的設計與實作

其中t代表樣本的經驗門檻值,對于不同場景可以設定不同取值,,分别是廣義帕累托分布中的形狀參數與尺度參數,在給定樣本超過人為設定的經驗門檻值t的情況下,随機變量X-t是服從廣義帕累托分布的。通過極大似然估計方法我們可以計算獲得參數估計值與 ,并且通過如下公式來求取模型門檻值:

基于AI算法的資料庫異常監測系統的設計與實作

上述公式中q代表風險參數,n是所有樣本數量,Nt是滿足x-t>0的樣本數量。由于通常情況下對于經驗門檻值t的估計沒有先驗的資訊,是以可以使用樣本經驗分位數來替代數值t,這裡經驗分位數的取值可以根據實際情況來選擇。

8. 參考資料

  • [1] Ren, H., Xu, B., Wang, Y., Yi, C., Huang, C., Kou, X., ... & Zhang, Q. (2019, July). Time-series anomaly detection service at microsoft. In Proceedings of the 25th ACM SIGKDD international conference on knowledge discovery & data mining (pp. 3009-3017).
  • [2] Lu, J., Liu, A., Dong, F., Gu, F., Gama, J., & Zhang, G. (2018). Learning under concept drift: A review. IEEE Transactions on Knowledge and Data Engineering, 31(12), 2346-2363.
  • [3] Mushtaq, R. (2011). Augmented dickey fuller test.
  • [4] Ma, M., Yin, Z., Zhang, S., Wang, S., Zheng, C., Jiang, X., ... & Pei, D. (2020). Diagnosing root causes of intermittent slow queries in cloud databases. Proceedings of the VLDB Endowment, 13(8), 1176-1189.
  • [5] Holzinger, A. (2016). Interactive machine learning for health informatics: when do we need the human-in-the-loop?. Brain Informatics, 3(2), 119-131.
  • [6] Leys, C., Ley, C., Klein, O., Bernard, P., & Licata, L. (2013). Detecting outliers: Do not use standard deviation around the mean, use absolute deviation around the median. Journal of experimental social psychology, 49(4), 764-766.
  • [7] Hubert, M., & Vandervieren, E. (2008). An adjusted boxplot for skewed distributions. Computational statistics & data analysis, 52(12), 5186-5201.
  • [8] Siffer, A., Fouque, P. A., Termier, A., & Largouet, C. (2017, August). Anomaly detection in streams with extreme value theory. In Proceedings of the 23rd ACM SIGKDD International Conference on Knowledge Discovery and Data Mining (pp. 1067-1075).

關于團隊

美團基礎技術部/資料庫研發中心/資料庫平台研發組,負責為美團各個業務線提供高效便捷的資料庫使用入口,幫助美團DBA穩定快捷地維護資料庫,同時提供分析診斷平台,實作資料庫自治。

| 本文系美團技術團隊出品,著作權歸屬美團。歡迎出于分享和交流等非商業目的轉載或使用本文内容,敬請注明“内容轉載自美團技術團隊”。本文未經許可,不得進行商業性轉載或者使用。任何商用行為,請發送郵件至[email protected]申請授權。

繼續閱讀