天天看點

如何在實際場景中使用異常檢測?阿裡雲Prometheus智能檢測算子來了背景常見問題阿裡雲 Prometheus 監控是怎麼解決這些問題如何應用在具體業務場景裡最佳實踐關于 Prometheus- 智能檢測算子

作者|梵登、白玙

稽核&校對:白玙

編輯&排版:雯燕

異常檢測作為智能運維(AIOps)系統中基礎且重要功能,其旨在通過算法自動地發現 KPI 時間序列資料中的異常波動,為後續的告警、自動止損、根因分析等提供決策依據。那麼,我們該如何在實際場景中使用異常檢測呢,而異常檢測又是什麼,今天我們就進行一次深入講解。

在一切開始前,我們首先需要了解什麼是異常檢測。異常檢測是指從時間序列或者事件日志中,去識别出不正常的事件、現象等。我們這裡講的異常檢測特指時間序列的異常檢測。通過對時間序列的值大小,曲線形态等進行綜合判定,可以發現曲線異常點。異常的表現一般是指時間序列發生了不符合預期的上升、下降或者波動。

舉例來說:某台機器的記憶體使用率名額一直在 40% 左右的水位波動, 突然飙升至 100%;某個 Redis 資料庫的連接配接數正常水準一直在 100 數量左右, 突然發生了大規模的下跌至 0 的現象;某個業務的線上人數在 10 萬左右波動,突然下跌到了 5 萬等等。

時間序列是指一組按照時間發生先後順序進行排列的資料點序列,通常一組時間序列的時間間隔為一恒定值(如 1 分鐘、5 分鐘)。

目前開源版本的 Prometheus 檢測能力還是基于設定門檻值規則方式進行,而這種依賴門檻值設定的方式就引出了以下問題。

由于不同類型名額的含義差别大,對應設定的合理門檻值也不太一樣。哪怕是同一種類型名額,由于業務狀态不一樣,往往不能用相同門檻值。是以,在配置門檻值時,運維人員需要根據對應的業務情況去配置自認為合理的門檻值。由于運維人員認知水準和工作經驗存在差異,是以不同人員配置的門檻值也存在差别。其次,很多名額沒有明确合理的範圍定義,這導緻很多門檻值配置都是“拍腦袋”确定的,随機性比較強。

舉例來說:某線上人數名額, 必須仔細觀察分析曆史名額曲線的數值分布和變化趨勢,才能設定出合理的門檻值。

對于相對穩定的業務,業務名額長期處于穩定狀态,這種情況下配置的門檻值可以發揮比較長時間作用。但對于時刻變化的業務, 伴随業務的不斷演化,名額的水位和走勢也是在不斷變化。這些變化很容易導緻一開始設定的門檻值檢測,經過一段時間則不太滿足檢測現狀。這時候則需要運維專家定期核查檢測門檻值是否還符合目前檢測需求,對不合理的配置進行維護與修改。是以,靜态門檻值方式存在着維護成本高的問題。

舉例來說:某 IO 吞吐量一開始穩定在 1 萬的量值附近波動,一開始設定了檢測門檻值為超過 2 萬則告警。但随着業務發展,IO 吞吐量已穩定在 2.5 萬左右,這時候一開始設定的門檻值就導緻了源源不斷的告警叨擾。

資料品質不佳表現為幾種具展現象:采集延遲大、資料缺失值多、資料毛刺點比較多(反應在曲線上則是不夠平滑)。對于前面倆種, 更多的是從采集、聚合側進行針對性優化。ARMS-Prometheus 持續在采集能力進行優化。而對于資料毛刺點很多的資料品質問題,靜态門檻值方式無法有效的規避。而在 ARMS- 托管版 Prometheus 的智能算子中, 我們則針對多毛刺點進行了有效的識别,保證了毛刺點不會形成無效告警, 減少使用者側/運維側形成叨擾。

面對以上問題,阿裡雲 Prometheus 監控的檢測配置能力除了支援原生的設定門檻值檢測方式,全面新增支援模闆設定檢測門檻值方式與智能檢測算子方式。

(1)針對明确的應用場景配置檢測規則,阿裡雲 Prometheus 監控提供成熟的告警配置模闆化,使用者無需人工設定門檻值, 隻需要選擇對應的模版即可。

例如:機器名額場景下, 配置“機器名額的 cpu 使用率 >80%”的模闆。模闆的方式解決了配置中明确異常且業務比較穩定的應用場景痛點。

(2)針對不明确的名額場景或不好設定的業務名額場景,則推薦使用智能檢測算子功能。

例如需要對某線上人數名額設定門檻值, 這時需要花費很長的時間觀察曆史曲線狀态才能配置出合理的門檻值。這種場景下使用者可以直接選擇智能檢測算子。

阿裡雲 Prometheus 監控的智能檢測算子功能,通過設定參考曆史資料長度的參數,模型可以自适應的追蹤名額趨勢的變化,無需人工定期去審查配置規則。

在智能檢測算子功能中, 如果曆史資料出現了缺失,算法可以線性插值,多項式插值等多種方式,自動填補缺失值。

對于不平滑的名額曲線檢測,智能檢測算子也自适應的選擇針對該場景的最優模型進行檢測,保證整體的檢測效果。

如何在實際場景中使用異常檢測?阿裡雲Prometheus智能檢測算子來了背景常見問題阿裡雲 Prometheus 監控是怎麼解決這些問題如何應用在具體業務場景裡最佳實踐關于 Prometheus- 智能檢測算子

在業務開始設定門檻值時, 通過觀察很有可能設定門檻值不超過 150。但随着業務疊代,qps 名額也會發生各種各樣的變化。從名額上則表現為:出現階段性的突增至某個值,然後平穩的狀态。這種情況下,設定的靜态門檻值很難持續滿足檢測需求。另外一方面, 穩定情況也會出現突發的下跌, 隻設定上限的靜态門檻值是檢測出這種下跌情況的。這種情形下, 智能檢測算子則可以自适應的跟蹤業務水準的變化,智能識别業務的突增或突降。

如何在實際場景中使用異常檢測?阿裡雲Prometheus智能檢測算子來了背景常見問題阿裡雲 Prometheus 監控是怎麼解決這些問題如何應用在具體業務場景裡最佳實踐關于 Prometheus- 智能檢測算子

在名額畫像子產品,如果識别出目前的名額具有一定的周期,則會從中提取出對應的周期值、周期偏移值, 以及整體趨勢曲線。在原始的時間序列去除周期性、趨勢性後,利用殘差進行異常檢測。以上圖的周期名額為例, 11.30 分左右的周期與其他周期出現明顯差别。傳統靜态門檻值很難去解這類場景下的檢測問題, 而利用智能檢測算子,則可以識别出該種異常。

如何在實際場景中使用異常檢測?阿裡雲Prometheus智能檢測算子來了背景常見問題阿裡雲 Prometheus 監控是怎麼解決這些問題如何應用在具體業務場景裡最佳實踐關于 Prometheus- 智能檢測算子

此外,還有一種常見類型的名額異常是,在某一階段内, 名額一直呈現上升(或者下降)趨勢。在某一個節點出現突發性的趨勢破壞,局部呈現了和整體趨勢不一樣。這種異常類型也是很常見的,但是靜态門檻值很難設定來解決這種情形。而智能檢測算子則針對這種類型可以進行準确了的識别異常。

目前阿裡雲 Prometheus 監控已經支援智能檢測算子功能,隻需登陸 ARMS-Prometheus/grafana,輸入對應的 PromQL 即可。

輸入的必須是 range vector,是以需要在名額名稱後增加[180m], 時間範圍預設選擇 180m,參數預設選擇 3

如果先進行了其他聚合函數操作,則需要[180m:],使之變為 range vector,如下:anomaly_detect(sum(node_memory_free_bytes)[180m:],3)

step 1: 登陸到 ARMS-Prometheus 或 Grafana 中選擇對應的 Prometheus 資料源

如何在實際場景中使用異常檢測?阿裡雲Prometheus智能檢測算子來了背景常見問題阿裡雲 Prometheus 監控是怎麼解決這些問題如何應用在具體業務場景裡最佳實踐關于 Prometheus- 智能檢測算子

選擇對應的資料源:

如何在實際場景中使用異常檢測?阿裡雲Prometheus智能檢測算子來了背景常見問題阿裡雲 Prometheus 監控是怎麼解決這些問題如何應用在具體業務場景裡最佳實踐關于 Prometheus- 智能檢測算子

step 2: 選擇名額, 并檢視

如何在實際場景中使用異常檢測?阿裡雲Prometheus智能檢測算子來了背景常見問題阿裡雲 Prometheus 監控是怎麼解決這些問題如何應用在具體業務場景裡最佳實踐關于 Prometheus- 智能檢測算子

step 3: 輸入異常檢測算子

如何在實際場景中使用異常檢測?阿裡雲Prometheus智能檢測算子來了背景常見問題阿裡雲 Prometheus 監控是怎麼解決這些問題如何應用在具體業務場景裡最佳實踐關于 Prometheus- 智能檢測算子

阿裡雲 Prometheus 監控智能檢測算子,總結業界數十款領先的算法方案實踐設計而成。針對常見的名額類型建立了名額畫像,并自适應的選擇最佳模型去進行檢測計算。每一條名額資料輸入模型後, 模型首先會對目前的名額建立名額畫像,包括平穩性,抖動性,趨勢性,周期性,是否為特殊節假日/活動等。根據這些畫像特征建構之後, 模型自适應選擇最優一種或者多種算法組合來解目前的名額檢測問題,保證了整體效果最優。目前已經支援的功能包括:突增檢測、毛刺檢測、周期識别(識别周期性、周期的偏移)。

通過阿裡雲 Prometheus 監控中內建智能檢測算子, 我們希望給使用者可以提供開箱即用、持續疊代更新的智能檢測服務。目前使用者可以在阿裡雲 Prometheus 監控中檢視并使用智能檢測算子,而基于 ARMS 的原生配置智能檢測告警功能和 Grafana 動态展示将在近期推出。

👇點選這裡,立即接入 Prometheus 監控!

如何在實際場景中使用異常檢測?阿裡雲Prometheus智能檢測算子來了背景常見問題阿裡雲 Prometheus 監控是怎麼解決這些問題如何應用在具體業務場景裡最佳實踐關于 Prometheus- 智能檢測算子

繼續閱讀