大衆點評Cat源碼閱讀(八)——告警機制

基本邏輯流程

  1. 查詢當前告警類型配置的全部告警規則
  2. 每間隔一分鐘,取對應類型的報表,若是transaction類型的告警,就取transaction類型的報表,event類型的,就取event類型的報表,根據報表裏面的duration(key=當前分鐘,value=生成的次數)去校驗是否觸發告警規則,若是觸發,則返回告警實例。
  3. 將上一步返回的告警實例,插入到AlertMananger內部隊列裏
  4. AlertManager 異步線程消費告警實例。根據類型、分組、級別(warn、error)查詢對應的發送通道(email、sms、weixin),不管發送成功與否,都要寫入數據庫。(這裏沒有記錄發送成功與否的狀態,算是個bug)

Transaction告警

Cat告警在Cat-home裏面。序列圖以下: 輸入圖片說明數據庫

如上圖所示,Cat後臺啓動時,啓動各類Alert,Alert內部每隔一分鐘,將全部的告警規則過一遍,將觸發了告警規則數據封裝成一個告警實例,將告警實例插入到AlertManager裏面的一個阻塞隊列裏面。AlertManager在初始化的時候啓動一個跑批任務,每隔5ms從隊列裏面取告警實例,發送出去。異步

具體發送告警的實體類是線程

com.dianping.cat.report.alert.sender.sender.Sender

Event告警機制

Event類型告警處理時序圖以下:code

輸入圖片說明

相關文章
相關標籤/搜索