基本邏輯流程
- 查詢當前告警類型配置的全部告警規則
- 每間隔一分鐘,取對應類型的報表,若是transaction類型的告警,就取transaction類型的報表,event類型的,就取event類型的報表,根據報表裏面的duration(key=當前分鐘,value=生成的次數)去校驗是否觸發告警規則,若是觸發,則返回告警實例。
- 將上一步返回的告警實例,插入到AlertMananger內部隊列裏
- 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