告警規(guī)則引擎服務(wù)概述

1. 什么是規(guī)則引擎

規(guī)則引擎是一種嵌套在應(yīng)用程序種的組件,它實現(xiàn)了將業(yè)務(wù)規(guī)則從應(yīng)用程序代碼中分離出來,
使復(fù)雜的業(yè)務(wù)規(guī)則實現(xiàn)變得簡單,也可以動態(tài)修改業(yè)務(wù)規(guī)則,從而快速的響應(yīng)需求變更。


image.png

2. 常見報警規(guī)則設(shè)計

2.1 Cat

基本邏輯流程

  1. 查詢當(dāng)前告警類型配置的所有告警規(guī)則
  2. 每間隔一分鐘,取對應(yīng)類型的報表,如果transaction類型的告警,就取transaction類型的報表,event類型的,就取event類型的報表,根據(jù)報表里面的duration(key=當(dāng)前分鐘,value=生成的次數(shù))去校驗是否觸發(fā)告警規(guī)則,如果觸發(fā),則返回告警實例。
  3. 將上一步返回的告警實例,插入到AlertMananger內(nèi)部隊列里
  4. AlertManager 異步線程消費告警實例。根據(jù)類型、分組、級別(warn、error)查詢對應(yīng)的發(fā)送通道(email、sms、weixin),無論發(fā)送成功與否,都要寫入數(shù)據(jù)庫。(這里沒有記錄發(fā)送成功與否的狀態(tài),算是個bug)
image.png

2.2 Open-Falcon

image.png

transfer,接收客戶端發(fā)送的數(shù)據(jù),做一些數(shù)據(jù)規(guī)整,檢查之后,轉(zhuǎn)發(fā)到多個后端系統(tǒng)去處理。在轉(zhuǎn)發(fā)到每個后端業(yè)務(wù)系統(tǒng)的時候,transfer會根據(jù)一致性hash算法,進行數(shù)據(jù)分片,來達到后端業(yè)務(wù)系統(tǒng)的水平擴展。

報警判定,是由judge組件來完成。用戶在web portal來配置相關(guān)的報警策略,存儲在MySQL中。heartbeat server 會定期加載MySQL中的內(nèi)容。judge也會定期和heartbeat server保持溝通,來獲取相關(guān)的報警策略。

heartbeat sever不僅僅是單純的加載MySQL中的內(nèi)容,根據(jù)模板繼承、模板項覆蓋、報警動作覆蓋、模板和hostGroup綁定,計算出最終關(guān)聯(lián)到每個endpoint的告警策略,提供給judge組件來使用。

transfer轉(zhuǎn)發(fā)到j(luò)udge的每條數(shù)據(jù),都會觸發(fā)相關(guān)策略的判定,來決定是否滿足報警條件,如果滿足條件,則會發(fā)送給alarm,alarm再以郵件、短信、米聊等形式通知相關(guān)用戶,也可以執(zhí)行用戶預(yù)先配置好的callback地址。

用戶可以很靈活的來配置告警判定策略,比如連續(xù)n次都滿足條件、連續(xù)n次的最大值滿足條件、不同的時間段不同的閾值、如果處于維護周期內(nèi)則忽略 等等。

另外也支持突升突降類的判定和告警。

2.3 滴滴夜鶯

告警資料 https://www.bookstack.cn/read/Nightingale/3972cc67c6123806.md

image.png

https://s3-gz01.didistatic.com/n9e-pub/video/n9e-arch-intro.mp4

  • collector 即 agent,可以采集機器常見指標(biāo),原生支持日志監(jiān)控,支持插件機制,支持業(yè)務(wù)通過接口直接上報數(shù)據(jù);

  • transfer提供 rpc 接口接收 collector 上報的數(shù)據(jù),然后通過一致性哈希,將數(shù)據(jù)轉(zhuǎn)發(fā)給多臺tsdb和多臺judge;

  • tsdb 即 open-falcon 中的 graph 組件,用于存儲歷史數(shù)據(jù),支持配置為雙寫模式提升系統(tǒng)容災(zāi)能力,tsdb 會把監(jiān)控數(shù)據(jù)轉(zhuǎn)發(fā)一份給 index 建索引;

  • index 是內(nèi)存索引模塊,替換原來的 mysql 方案,在內(nèi)存里構(gòu)建索引,便于后續(xù)數(shù)據(jù)檢索,在檢索的靈活性和檢索性能方面大幅提升;

  • judge 是告警引擎,從 monapi(portal) 同步監(jiān)控策略,然后對接收到的數(shù)據(jù)做告警判斷,如滿足閾值,則生成告警事件推送到 redis 隊列;

  • monapi(alarm) 從 redis 隊列中讀取 judge 生成的事件,進行二次處理,補充一些元信息,生成告警消息,重新推送回 redis 隊列;

  • 各發(fā)送組件,比如 mail-sender、sms-sender 等,從 redis 讀取告警消息,發(fā)送告警,抽象出各類 sender 是為了后續(xù)定制方便;

  • monapi 集成了原來多個模塊的功能,提供接口給 js 調(diào)用,api 前綴為 /api/portal,數(shù)據(jù)查詢走 transfer,去除了 open-falcon 中原來的 query 組件,api 前綴為 /api/transfer,索引查詢的 api 前綴 /api/index,于是,在前端統(tǒng)一搭建 nginx,即可通過不同 location 將請求轉(zhuǎn)發(fā)到不同后端;

  • 數(shù)據(jù)庫仍然使用 MySQL,主要存儲的內(nèi)容包括:用戶信息、團隊信息、樹節(jié)點信息、告警策略、監(jiān)控大盤、屏蔽策略、采集策略、部分組件心跳信息等。

對比:Nightingale與Open-Falcon---->告警引擎重構(gòu)

  • Open-Falcon 的告警策略,在監(jiān)控數(shù)據(jù)推送上來的同時會觸發(fā)策略判斷,這種「推」的模式優(yōu)勢是策略的判斷時效性非常高,但是不利于更高級的告警策略的支持和擴展,比如多條件的組合報警就很難支持。
  • Nightingale 轉(zhuǎn)為推拉結(jié)合模式,通過推模式保證大部分策略判斷的效率,通過拉模式支持了與條件告警和nodata告警;

2.4 prometheus

http://www.itdecent.cn/p/af0f98fe7699

image.png
image.png

prometheus一次alert流程 主要包括告警閾值觸發(fā)、分組(group)、抑制(inhibitor) 、Silencer(靜默)、 重復(fù)告警延時(Dedup)等。

2.4.1 告警

Prometheus以scrape_interval(默認為1m)規(guī)則周期,從監(jiān)控目標(biāo)上收集信息。其中scrape_interval可以基于全局或基于單個metric定義;然后將監(jiān)控信息持久存儲在其本地存儲上。

Prometheus以evaluation_interval(默認為1m)另一個獨立的規(guī)則周期,對告警規(guī)則做定期計算。其中evaluation_interval只有全局值;然后更新告警狀態(tài)。

其中包含三種告警狀態(tài):

  • inactive:沒有觸發(fā)閾值

  • pending:已觸發(fā)閾值但未滿足告警持續(xù)時間

  • firing:已觸發(fā)閾值且滿足告警持續(xù)時間

image.png
  1. Prometheus以5s(scrape_interval)一個采集周期采集狀態(tài);
  2. 然后根據(jù)采集到狀態(tài)按照10s(evaluation_interval)一個計算周期,計算表達式;
  3. 表達式為真,告警狀態(tài)切換到pending;
  4. 下個計算周期,表達式仍為真,且符合for持續(xù)10s,告警狀態(tài)變更為active,并將告警從Prometheus發(fā)送給Altermanger;
  5. 下個計算周期,表達式仍為真,且符合for持續(xù)10s,持續(xù)告警給Altermanger;
  6. 直到某個計算周期,表達式為假,告警狀態(tài)變更為inactive,發(fā)送一個resolve給Altermanger,說明此告警已解決。

2.4.2 告警分組、抑制、靜默

告警發(fā)送給了Altermanger,但是Altermanger并不是把一條從Prometheus接收到的告警簡簡單單的直接發(fā)送出去;直接發(fā)送出去會導(dǎo)致告警信息過多,運維人員會被告警淹沒;所以Altermanger需要對告警做合理的收斂

2.4.2.1 告警分組的作用

 同類告警的聚合幫助運維排查問題

 通過告警郵件的合并,減少告警數(shù)量

2.4.2.2 告警抑制的作用

消除冗余的告警

2.4.2.1 告警靜默的作用

阻止發(fā)送可預(yù)期的告警

2.4.3 告警延時

分組勢必會帶來延時;合理的配置延時,才能避免告警不及時的問題,同時幫助我們避免告警轟炸的問題

告警延時涉及的幾個主要參數(shù)

   group_by:分組參數(shù),比如按照[mysql-id]分組

   group_wait:分組等待時間,比如:5s

   group_interval:分組嘗試再次發(fā)送告警的時間間隔,比如:5m

   Repeat_interval: 分組內(nèi)發(fā)送相同告警的時間間隔,比如:60m
image.png
image.png
image.png

3. Skywalking與prometheus集成

image.png
  1. skywalking 將指標(biāo)數(shù)據(jù)發(fā)送kafka
  2. 告警規(guī)則模塊監(jiān)聽kafka指標(biāo)數(shù)據(jù),將指標(biāo)數(shù)據(jù)轉(zhuǎn)換為prometheus標(biāo)準(zhǔn)的數(shù)據(jù)寫入prometheus target模塊
  3. prometheus模塊 從Gateway拉出指標(biāo)數(shù)據(jù),進行處理,
  4. 程序啟動的時候加載默認告警規(guī)則,寫入到prometheus AlertManager模塊
  5. prometheus AlertManager 模塊提供webhook回調(diào)地址,由告警規(guī)則模塊接口控制消息告警
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容