阿里云Prometheus智能檢測算子來了

來源: 網(wǎng)易
作者:梵登、白玙
時間:2021-11-08
16492
異常檢測作為智能運維(AIOps)系統(tǒng)中基礎且重要功能,其旨在通過算法自動地發(fā)現(xiàn) KPI 時間序列數(shù)據(jù)中的異常波動,為后續(xù)的告警、自動止損、根因分析等提供決策依據(jù)。那么,我們該如何在實際場景中使用異常檢測呢,而異常檢測又是什么,今天我們就進行一次深入講解。
異常檢測作為智能運維(AIOps)系統(tǒng)中基礎且重要功能,其旨在通過算法自動地發(fā)現(xiàn) KPI 時間序列數(shù)據(jù)中的異常波動,為后續(xù)的告警、自動止損、根因分析等提供決策依據(jù)。那么,我們該如何在實際場景中使用異常檢測呢,而異常檢測又是什么,今天我們就進行一次深入講解。


背景

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

什么是異常檢測?

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

舉例來說:某臺機器的內(nèi)存使用率指標一直在 40% 左右的水位波動, 突然飆升至 100%;某個 Redis 數(shù)據(jù)庫的連接數(shù)正常水平一直在 100 數(shù)量左右, 突然發(fā)生了大規(guī)模的下跌至 0 的現(xiàn)象;某個業(yè)務的在線人數(shù)在 10 萬左右波動,突然下跌到了 5 萬等等。

什么是時間序列?

時間序列是指一組按照時間發(fā)生先后順序進行排列的數(shù)據(jù)點序列,通常一組時間序列的時間間隔為一恒定值(如 1 分鐘、5 分鐘)。

當前開源 Prometheus 是如何做異常檢測的?

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

常見問題

問題 1:面對數(shù)以萬計的指標數(shù)量,如何快速又合理的完成檢測配置?

由于不同類型指標的含義差別大,對應設定的合理閾值也不太一樣。哪怕是同一種類型指標,由于業(yè)務狀態(tài)不一樣,往往不能用相同閾值。因此,在配置閾值時,運維人員需要根據(jù)對應的業(yè)務情況去配置自認為合理的閾值。由于運維人員認知水平和工作經(jīng)驗存在差異,因此不同人員配置的閾值也存在差別。其次,很多指標沒有明確合理的范圍定義,這導致很多閾值配置都是“拍腦袋”確定的,隨機性比較強。

舉例來說:某在線人數(shù)指標, 必須仔細觀察分析歷史指標曲線的數(shù)值分布和變化趨勢,才能設置出合理的閾值。

問題 2:隨著業(yè)務的演化,如何進行檢測規(guī)則的維護?

對于相對穩(wěn)定的業(yè)務,業(yè)務指標長期處于穩(wěn)定狀態(tài),這種情況下配置的閾值可以發(fā)揮比較長時間作用。但對于時刻變化的業(yè)務, 伴隨業(yè)務的不斷演化,指標的水位和走勢也是在不斷變化。這些變化很容易導致一開始設定的閾值檢測,經(jīng)過一段時間則不太滿足檢測現(xiàn)狀。這時候則需要運維專家定期核查檢測閾值是否還符合當前檢測需求,對不合理的配置進行維護與修改。因此,靜態(tài)閾值方式存在著維護成本高的問題。

舉例來說:某 IO 吞吐量一開始穩(wěn)定在 1 萬的量值附近波動,一開始設定了檢測閾值為超過 2 萬則告警。但隨著業(yè)務發(fā)展,IO 吞吐量已穩(wěn)定在 2.5 萬左右,這時候一開始設定的閾值就導致了源源不斷的告警叨擾。

問題 3:數(shù)據(jù)質量不佳如何解決?

數(shù)據(jù)質量不佳表現(xiàn)為幾種具體現(xiàn)象:采集延遲大、數(shù)據(jù)缺失值多、數(shù)據(jù)毛刺點比較多(反應在曲線上則是不夠平滑)。對于前面?zhèn)z種, 更多的是從采集、聚合側進行針對性優(yōu)化。ARMS-Prometheus 持續(xù)在采集能力進行優(yōu)化。而對于數(shù)據(jù)毛刺點很多的數(shù)據(jù)質量問題,靜態(tài)閾值方式無法有效的規(guī)避。而在 ARMS- 托管版 Prometheus 的智能算子中, 我們則針對多毛刺點進行了有效的識別,保證了毛刺點不會形成無效告警, 減少用戶側/運維側形成叨擾。

阿里云 Prometheus 監(jiān)控是怎么解決這些問題

面對以上問題,阿里云 Prometheus 監(jiān)控的檢測配置能力除了支持原生的設定閾值檢測方式,全面新增支持模板設定檢測閾值方式與智能檢測算子方式。

業(yè)務價值 1:高效高質量的告警配置

(1)針對明確的應用場景配置檢測規(guī)則,阿里云 Prometheus 監(jiān)控提供成熟的告警配置模板化,用戶無需人工設定閾值, 只需要選擇對應的模版即可。例如:機器指標場景下, 配置“機器指標的 cpu 使用率 >80%”的模板。模板的方式解決了配置中明確異常且業(yè)務比較穩(wěn)定的應用場景痛點。

(2)針對不明確的指標場景或不好設定的業(yè)務指標場景,則推薦使用智能檢測算子功能。

例如需要對某在線人數(shù)指標設定閾值, 這時需要花費很長的時間觀察歷史曲線狀態(tài)才能配置出合理的閾值。這種場景下用戶可以直接選擇智能檢測算子。

業(yè)務價值 2:自適應追蹤業(yè)務變化,大大降低檢測閾值維護成本

阿里云 Prometheus 監(jiān)控的智能檢測算子功能,通過設定參考歷史數(shù)據(jù)長度的參數(shù),模型可以自適應的追蹤指標趨勢的變化,無需人工定期去審查配置規(guī)則。

業(yè)務價值 3: 對于質量不佳,缺失值/毛刺點過多的指標也可以實現(xiàn)智能檢測

在智能檢測算子功能中, 如果歷史數(shù)據(jù)出現(xiàn)了缺失,算法可以線性插值,多項式插值等多種方式,自動填補缺失值。對于不平滑的指標曲線檢測,智能檢測算子也自適應的選擇針對該場景的最優(yōu)模型進行檢測,保證整體的檢測效果。

如何應用在具體業(yè)務場景里

水位突增/突降型指標:某業(yè)務的 qps 指標

27.jpg

在業(yè)務開始設定閾值時, 通過觀察很有可能設定閾值不超過 150。但隨著業(yè)務迭代,qps 指標也會發(fā)生各種各樣的變化。從指標上則表現(xiàn)為:出現(xiàn)階段性的突增至某個值,然后平穩(wěn)的狀態(tài)。這種情況下,設定的靜態(tài)閾值很難持續(xù)滿足檢測需求。另外一方面, 穩(wěn)定情況也會出現(xiàn)突發(fā)的下跌, 只設置上限的靜態(tài)閾值是檢測出這種下跌情況的。這種情形下, 智能檢測算子則可以自適應的跟蹤業(yè)務水平的變化,智能識別業(yè)務的突增或突降。

周期性的指標:

26.jpg

在指標畫像模塊,如果識別出當前的指標具有一定的周期,則會從中提取出對應的周期值、周期偏移值, 以及整體趨勢曲線。在原始的時間序列去除周期性、趨勢性后,利用殘差進行異常檢測。以上圖的周期指標為例, 11.30 分左右的周期與其他周期出現(xiàn)明顯差別。傳統(tǒng)靜態(tài)閾值很難去解這類場景下的檢測問題, 而利用智能檢測算子,則可以識別出該種異常。

趨勢破壞型的指標:

24.jpg

此外,還有一種常見類型的指標異常是,在某一階段內(nèi), 指標一直呈現(xiàn)上升(或者下降)趨勢。在某一個節(jié)點出現(xiàn)突發(fā)性的趨勢破壞,局部呈現(xiàn)了和整體趨勢不一樣。這種異常類型也是很常見的,但是靜態(tài)閾值很難設定來解決這種情形。而智能檢測算子則針對這種類型可以進行準確了的識別異常。

最佳實踐
阿里云Prometheus監(jiān)控內(nèi)使用流程

目前阿里云 Prometheus 監(jiān)控已經(jīng)支持智能檢測算子功能,只需登陸 ARMS-Prometheus/grafana,輸入對應的 PromQL 即可。

算子定義

"anomaly_detect": { Name: anomaly_detect",ArgTypes: []ValueType{ValueTypeMatrix, ValueTypeScalar},ReturnType: ValueTypeVector,},輸入:指標的時間序列,類型為range vector;檢測參數(shù),使用默認的3即可輸出:異常返回1, 正常返回0 使用 case:

anomaly_detect(node_memory_free_bytes[20m],3)

  1. 輸入的必須是 range vector,因此需要在指標名稱后增加[180m], 時間范圍默認選擇 180m,參數(shù)默認選擇 3

  2. 如果先進行了其他聚合函數(shù)操作,則需要[180m:],使之變?yōu)?range vector,如下:anomaly_detect(sum(node_memory_free_bytes)[180m:],3)

使用示例:

step 1: 登陸到 ARMS-Prometheus 或 Grafana 中選擇對應的 Prometheus 數(shù)據(jù)源

25.jpg

選擇對應的數(shù)據(jù)源:

23.jpg

step 2: 選擇指標, 并查看

22.jpg

step 3: 輸入異常檢測算子

21.jpg

關于 Prometheus- 智能檢測算子

阿里云 Prometheus 監(jiān)控智能檢測算子,總結業(yè)界數(shù)十款領先的算法方案實踐設計而成。針對常見的指標類型建立了指標畫像,并自適應的選擇最佳模型去進行檢測計算。每一條指標數(shù)據(jù)輸入模型后, 模型首先會對當前的指標建立指標畫像,包括平穩(wěn)性,抖動性,趨勢性,周期性,是否為特殊節(jié)假日/活動等。根據(jù)這些畫像特征構建之后, 模型自適應選擇最優(yōu)一種或者多種算法組合來解當前的指標檢測問題,保證了整體效果最優(yōu)。目前已經(jīng)支持的功能包括:突增檢測、毛刺檢測、周期識別(識別周期性、周期的偏移)。

通過阿里云 Prometheus 監(jiān)控中集成智能檢測算子, 我們希望給用戶可以提供開箱即用、持續(xù)迭代更新的智能檢測服務。目前用戶可以在阿里云 Prometheus 監(jiān)控中查看并使用智能檢測算子,而基于 ARMS 的原生配置智能檢測告警功能和 Grafana 動態(tài)展示將在近期推出。

20.jpg

1)系統(tǒng)架構面臨的三大挑戰(zhàn),看 Kubernetes 監(jiān)控如何解決?

2)面對疾風吧,如何搭建高協(xié)同的精準告警系統(tǒng)

立即登錄,閱讀全文
版權說明:
本文內(nèi)容來自于網(wǎng)易,本站不擁有所有權,不承擔相關法律責任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權,請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質服務商推薦
更多
掃碼登錄
打開掃一掃, 關注公眾號后即可登錄/注冊
加載中
二維碼已失效 請重試
刷新
賬號登錄/注冊
個人VIP
小程序
快出海小程序
公眾號
快出海公眾號
商務合作
商務合作
投稿采訪
投稿采訪
出海管家
出海管家