準確率89%,攜程酒店大前端智能預警歸因實踐
一、背景
攜程酒店大前端為了監測生產用戶運行的穩定性和流暢度,對大量的系統指標、業務場景配置了監控。在運作的過程中我們發現,監控確實能發現很多的問題,但由此帶來的排查成本隨著量級的增加也變的不可控。
以系統指標監控說明:
目前約有30+類型,如頁面慢加載、白屏等。每種異常監控都是獨立的數據處理、預警機制、問題排查分析流程,互相之間沒有關聯。這一現狀導致了一個個的數據孤島,管理的高度碎片化,且無法復用,讓維護和新增的成本較高。
同時,問題的原因不盡相同,排查鏈路也各自獨立。舉個例子:頁面白屏異常上漲時,通過白屏的監控規則,觸發預警后通知相關人員。排查人員從現有的白屏報表中進行badcase分析,排查鎖定初步原因后,需要跨多個報表進行交叉驗證,直至找到根本原因,整個過程中會耗費大量人力和時間成本。
在對頁面白屏問題的深入剖析中,發現其根本原因往往與服務失敗、服務耗時增長、內存溢出、增量數據拉取失敗等因素密切相關。在現有的鏈路繁瑣、異常之間沒有關聯性、分析效率低下、分析結果也不盡如人意。
基于目前情況,該如何找到解決方案呢?
經過對流程及問題的梳理,羅列了一些當前存在的核心痛點
數據角度:數據源分散,缺少關聯性,報表過多,監控難維護&增加成本高
排查角度:現有流程鏈路長排查不方便,非常依賴人工定位,系統并不能很好的給出實際有問題點的方向。
針對上述問題,優化策略已明確成形,聚焦于幾個核心要點:
數據整合:整合分散的數據源,確保數據結構的一致性與準確性,為后續分析奠定堅實基礎。
統一預警規則:抽取預警規則庫,形成統一的規則,減少重復編寫預警流程和調整規則,提高預警的效率和準確性
算法歸因分析:引入算法模型,深入挖掘不同數據與維度間的內在聯系,精準歸因問題根源,有效規避人工判斷的主觀性與不確定性,提高故障排查的效率。
簡化流程:縮短故障排查路徑,通過優化聚合排查報表,讓問題定位更加直觀快捷。
二、智能歸因體系實現
2.1 整體方案
基于上述的優化方向,我們搭建了酒店前端智能預警歸因系統,將多個數據預警孤島串聯起來,形成數據池。抽取統一且豐富預警規則,形成預警規則庫,保證預警準確性。針對預警的異常,引進算法模型,實現算法模型歸因分析,快速定位問題根源,并生成詳盡的歸因報告,給到開發明確排查方向。最終,將分析結果轉化為清晰的告警通知郵件&排查報表,助力團隊迅速響應,開展有效的故障排查與解決,大大提高了排查效率。
2.2 數據池
在整個體系中,搭建數據池是其重要的基石。數據池起到整合不同數據源的作用,將不同格式、維度的數據集中存儲在同一個數據池中,對其定義統一的數據結構及標準,確保數據一致性和準確性。
拆解來看,將數據池劃分為六大字段維度:數據類型、平臺、指標、核心監控維度、基礎字段以及業務特有字段。細致的數據維度分類不僅使得數據匯總更加直觀,同時也大大提升了數據的結構化處理能力、降低后續使用成本。
數據池的數據,為以下3個流程,提供了核心的數據支持:
1)算法模型的基礎輸入:為算法模型提供必要的輸入數據,確保模型運算數據的準確性和有效性。
2)預警規則的底表:作為預警系統的基礎數據,為規則設定提供堅實的數據支撐,確保預警系統的精確性和可靠性。
3)監控預警郵件badcase的數據來源:針對監控預警郵件中的badcase,提供了詳細且多維度的數據來源,以便進行深入的分析。
2.3 預警規則&加權
預警數據的準確性,是預警歸因系統中的重要一環,如何讓監控保證準確、不遺漏,且降低誤報的概率呢?為了達到這個目標,把數據進行流量分級,且構建了多類預警規則,以權重加權的方式,進行預警判斷,最后把多個規則的預警結果匯總起來,成為最終的結果。
首先說說流量分級和預警規則。
從數據池獲取數據時,把數據本身的流量進行分級,分為高、中、低、僅關注四級。根據類型不同,并針對不同流量級別設置了合理的變化率閾值。流量越大,則對變化率越敏感。
權重計算公式:權重=流量分級系數*變化率
舉個例子:數據變化率上升50%,通過規則,會計算出高級的權重值為max,中級的權重值為5,低級的權重值則為2,僅關注的權重值則為0。
在預警規則上,構建了四種不同維度的規則,以確保數據異常&變化的及時發現與處理:
1)單日同環比規則:通過對比當前數據與上周同日(同比)或相鄰日期(環比)的數據,發現單日內的顯著變化,如激增、驟減、新增或異常波動。
2)連續多日(周聚合)趨勢波動規則:除了關注單日的數據變化外,還制定了周維度的數據趨勢。通過對比每周的數據變化,能夠更準確地評估數據的長期或持續性的趨勢異常。這一預警規則不僅關注數據的變化幅度,還關注數據的變化方向和速度,從而更全面地把握數據的動態變化,確保不漏掉那些單日波動中被忽略的異常情況。
3)綜合流量變動規則:該規則不僅考慮了數據本身的變化,還結合了與其相關指標/大盤流量,從而降低因用戶流量放大、縮小而導致的數據變動預警噪音,確保預警的準確性。例如,針對頁面白屏異常,監測異常率(異常數/頁面流量)。
4)分位線預警規則:針對非報錯類數據源,引入了分位線規則,以天為單位設定最優分位線作為基準,實時監測高于或低于該基準的數據占比變化及波動,確保數據的細微變化可以反饋出來。
基于以上四種預警規則,再結合數據本身的流量大小,設置了合理的變動權重。通過對權重進行加權計算后,能夠精準得出每日的預警數據,確保系統與業務中的數據變動得到及時發現和處理。
在得到各規則的對比權重值后,同樣根據流量分級進行分類加權,對加權結果進行閾值或權重的過濾,以確定在該規則下是否觸發預警(具體參考“觸發預警標準表”)。再根據不同的業務需求,疊加多個規則進行最終的數據預警,以確保預警的精準性,并有效降低預警的噪音。
2.4 模型歸因
有了實際預警的類型后,基于預警結果及預警池中全量異常數據,將其作為算法模型的數據輸入,經過不同的模型進行歸因分析,最終獲得歸因結果值。
在實踐中,考慮到對異常數據進行本身根因的分析、與其相關的其他問題導致情況、趨勢問題等各類問題歸因,使用了以下三種算法模型:
- Adtributor算法
- Pearson相關系數
- 滑動T檢驗
2.4.1 Adtributor算法
Adtributor算法是微軟研究院于2014年提出的一種多維時間序列異常根因分析方法,在多維度復雜根因的場景下具有良好的可靠性。在任務中,首先對監控的各種關鍵性能指標(KPI)進行實時異常檢測,當一個KPI發生異常時,想要解除異常,定位出其根因所在的位置是非常關鍵的一步。歸因系統需要對檢測到的異常指標進行維度分析和根因定位,而Adtributor算法非常適用于這個場景。
首先對異常指標進行維度拆分,維度拆分意在從預警結果的諸多維度中,分析出哪幾個維度對一條預警造成的影響最大。
使用Adtributor算法來實現維度拆分主要包括以下幾個步驟:
1)數據收集:以pv、uv作為參考指標KPI,將預警結果和預警池作為數據源,按維度構造原始數據集。
2)異常檢測:采用ARMA時間序列模型對KPI進行實時預測,將預測值F和真實值A對比,判斷KPI是否發生異常。
3)維度分析:Adtributor對異常KPI的所有維度和元素計算EP值和S值,從而定位到影響程度最大的維度。
下面對重要細節展開闡述:
數據收集
對于發生預警的數據,通過關聯預警池,獲取到每條預警在某個維度下,過去60天內每天的明細pv、uv值。
異常檢測
ARMA(auto regressive moving average model,自回歸移動平均)模型是研究時間序列的重要方法,它可以基于歷史數據來預測未來的事情。
在每個維度下,基于過去59天的歷史數據,使用ARMA模型推理得到當天的預測pv、uv值。將預測值與真實值進行對比,可以判斷預警是否發生異常。
維度分析
將多維分析問題分解為多個單維分析問題,采用EP值和S值定位出每個維度下的異常元素集合,最后根據每個維度總的S值大小匯總輸出相關維度集合。
1)對于異常KPI,計算所有維度下所有元素的真實值和預測值的差異,即S值(Surprise, 意外性),將每一維度下的元素依據S值大小降序排列;
2)對于每一維度,從上到下依次對排序后的所有元素計算其變化在KPI變化總量中的占比,即元素對于KPI異常的解釋能力EP值(Explanatory power, 解釋能力)。
EP值
對于每一維度,如果元素的波動變化在異常KPI的波動變化中的占比越大,則認為元素越能解釋KPI異常的發生。EP值(Explanatory power, 解釋能力)用于衡量元素對異常的解釋能力。EP值計算公式如下:
式中,A為真實值,F為ARMA時間序列模型正常預測值,下標i為維度、j為元素、m為異常指標。EP值可以為正、為負、大于100%,但是每個維度下的所有元素EP之和必須為100%。EP為正表示可能是異常維度,為負表示不是異常維度,大于100%表示與KPI異常有非常明顯的正相關關系。
S值
如果KPI在某一維度下的真實值和預測值相差越大,則越有可能是異常維度。
KPI先驗概率和后驗概率的相似度可以采用相對熵(relative entropy)來衡量,進而判斷維度是否具有意外性。JSD散度(Jensen-Shannnon divergence)是相對熵的一種變形,其對稱性好、對于零值具有適應性、對相似度判別更加準確,這里基于JSD散度,得到S值(Surprise, 意外性)公式如下:
其中,預測概率或先驗概率計算公式為:
真實概率或后驗概率計算公式為:
維度的S值為維度下所有元素的S值之和,即:
在得到維度拆分的分析結果之后,還需要做深度根因的定位,根因定位意在從預警結果中,找出造成該預警的深度原因。例如:預警類型為頁面白屏,而深度原因在于內存溢出,算法需要通過頁面白屏與內存溢出之間的關聯性,定位到深度原因。
通過計算預警結果所屬類型的uv、pv行為,與其他深度類型uv、pv的相似度,來匹配深度原因。深度歸因的實現是基于維度拆分的結果,具體來說:首先得到了一條告警影響最大的一個或者幾個維度,然后只獲取這些維度下的uv、pv指標作為特征向量,忽略其他影響不大的維度。對于所有的候選深度類型,也獲取相同維度下的特征向量,然后計算向量間的余弦相似度,作為數據類型之間的關聯性指標。相似度最接近的深度類型,即是該條預警關聯性最高的深度原因。
2.4.2 Pearson相關系數(Pearson Correlation Coefficient)
考慮到通過 Adtributor算法定位深度原因,沒有充分利用uv、pv的趨勢變化,而事實上趨勢的變化是預警判斷時的重要依據,因此這里補充使用了另外一種基于趨勢的相似度計算方法來定位預警的深度原因。
首先對預警明細表基于每個維度聚合,得到21天的pv、uv值作為特征表。然后對于每一條預警數據,以及待匹配的深度類型,都從特征表中獲取相關特征,然后計算特征間的相似度。
由于主要考慮特征在趨勢上相似性,因此選擇Pearson相關系數(Pearson Correlation Coefficient)作為相似度指標。Pearson相關系數的絕對值越大,相關性越強,正數表示正相關,負數表示負相關。
總體相關系數公式如下:
其中 cov(X,Y)是X,Y的協方差,σX是X的標準差,σY是Y的標準差。
2.4.3 滑動T檢驗(Moving T test , MTT)
上述兩種方法分別通過維度拆分、考慮趨勢變化來定位預警的深度原因,已經比較周全,但仍存在問題,例如:開啟的實驗和頁面的預警不能完全匹配。因此針對實驗維度,啟用了另外一種方案來解決,該方案通過匹配KPI的突變時刻與業務變更時間來實現。
具體來說,對于每條預警信息,首先獲取當天分鐘級別的pv、uv值,分別作為兩組特征變量。對于每一組特征變量,使用滑動T檢驗(Moving T test , MTT)算法來定位發生突變的時刻。
滑動t檢驗是通過考察兩組樣本平均值的差異是否顯著來檢驗突變。其基本思想是把序列中兩段子序列均值有無顯著差異看作來自兩個總體均值有無顯著差異的問題來檢驗。如果兩段子序列的均值差異超過了一定的顯著性水平,則可以認為有突變發生。
找到突變時刻后,可以將其與業務變更時間點進行匹配。若在時間范圍內匹配成功,則數據變化可能與該業務變更有一定關聯。如:結合了AB實驗的數據,獲取了所有AB實驗流量開啟、分流結果等的操作信息。若數據突變點前10分鐘內,預警頁面有相關的實驗操作變更,則輸出相應的實驗歸因數據。
2.4.4 歸因結果聚合輸出
在得到上邊四個算法的結果后,按照既定的根因分類,根據根因實際情況,使用單個模型或多個模型的EP值結果限制卡點,進行歸因結果聚合。
接下來,拆解這些根因的實際算法使用考量。
- 核心優化的異常深度歸因和相似異常推薦。首先會根據配置表中的“對該類會有影響的根因類型”和“其他不相關異常推薦類型”,進行算法結果的過濾。在該場景下,主要使用趨勢相似性算法結果,深度歸因結果作為輔助過濾條件。
- 操作系統等不會短期內變化的維度,則會主要使用趨勢相似度模型,再把維度拆分模型的結果作為輔助參考,獲得更準確的歸因結果
- 版本等維度,由于他們的變化情況及異常波動較大,相比之下就并不適合使用相似度模型,因此僅使用維度拆分模型結果,反而會更精確。
- 實驗維度,直接使用突變點與實驗操作變更匹配數據進行輸出。
有了歸因結果后,最終會以預警郵件或消息的形式發送給相關開發,并以監控報表的形式,來展示多維度的分布數據和異常明細,以提高整體排障效率。
看下實際案例:
案例1:6月9日,某詳情頁白屏上升,歸因到代碼報錯升高導致
該日,通過多天的同環比規則權重疊加,監控出該頁面白屏上升,報錯率從0.22%上升至0.38%。
通過算法歸因結果輸出:鎖定了操作系統、版本及頻道;且深度歸因發現,該類報錯,是由于底層代碼報錯升高導致,兩者間的關聯度為97%。
歸因結果給到開發有指向性的排查方向,提高排障效率。
案例2:5月21日,某頁面圖片慢加載上升,歸因到與業務實驗開啟有關
該日,通過多天的同環比規則閾值限制,監控出該頁面圖片慢加載上升,報錯率從24%上升至70%。
通過算法歸因結果輸出,該異常升高與平臺、系統、及實驗開啟有關。
歸因結果直接定位到了實驗,精確到影響該異常的需求改動及關系方,以更好的評估新需求對系統性能是否帶來影響。
三、階段成果&后續規劃
3.1 階段成果
1)預警的準確性升高:老版監控的準確度約為60%,會有數據正常波動的場景也誤觸預警的情況;新版預警歸因系統的準確率約為89%,有比較明顯的改善。
2)從歸因結果提供、排查報表數據整合、排查鏈路縮減三個方面來看,整體排查時間縮短約40%。
3)數據池中接入40+的數據類型。
4)已有19個傳統預警、資源消耗監控,接入到新版智能預警歸因系統中。
5)新版歸因系統已發現問題約70+個,其中圖片相關問題20+、頁面慢加載問題10+、資源消耗問題7個……。預警后系統能直接找到影響的根本原因,如:內存上漲與圖片size變大有關,流量上漲與服務調用次數變多有關;異常變化與實驗開啟有關。
6)該系統降低了不同數據源增加監控的開發成本。
3.2 后續規劃
- 豐富預警規則,提高預警的精確度
- 傳統預警繼續接入新版歸因系統中
- 多類指標大盤監控數據,接入智能預警歸因系統
- 單日預警接入bug缺陷提交系統