1. Cat應用告警實戰
1.1. 前言
- 好像是中間件設計者的通病,文檔寫的都是面向有一定使用各種中間件經驗的人,告警模塊中每個參數其實都可以詳細解釋一下,要不然我們理解起來真的很吃力還容易采坑
1.2. 全局系統配置
1.2.1. 告警策略
-
如下圖所示,告警策略官方有模板,只要適當修改一下即可,這里我詳細解釋一下這里涉及到的一些概念,剛接觸的人真的可能一臉懵逼
-
首先看到這里指定send為
mail,weixin,sms
等等是不是很激動,以為它都給你封裝好了,你只需配置一下就可以發送告警?別想多了,這里只代表一個個類型,suspendMinute
代表發送告警間隔時間,避免同樣的告警一直發送,而warning
和error
在這個系統中也多次出現了都是同樣的意思,只是代表一種告警類型,不要以為是你系統報了error錯誤或者warn錯誤它就會報警,而id為Transaction
則是一種標識,當在別的便簽里看到id為該值時就知道了
1.2.2. 默認告警人
- 如下圖,看到id值就知道了和上面的告警策略對應,需要保持相同,email等可以填多個值
1.2.3. 告警服務端
-
如下圖,對應了告警策略中mail類型的服務端配置,這里只有url需要改動,也是告警的核心功能,自己寫接口去,把發送郵件的接口提供出來然后把地址放這里
-
請注意一點,也是我踩過的坑,看到
successCode="200"
這個配置了嗎?我們提供接口肯定是要有返回值的吧,我沒在它的文檔里找到交代,在報完錯后直接找它的源碼,發現了它判斷接口調用成功的依據是你返回給它的字符串里包含"200",別懷疑了,連引號也包括,我第一次返回的是個對象屬性里存在Integer類型的code為200,這都不行,必須是字符串的,所以最簡單的返回值如下:
@RequestMapping(value = "/alert/msg")
public String sendAlert(HttpServletRequest request) {
...
發送郵件代碼,網上一大堆自己抄,省略
...
return "200";
}
或者code為String類型
1.3. 應用告警配置
1.3.1. Transaction告警
-
如圖,可以是
Transaction
級別也可以是Event
級別,以Transaction
為例,點右上角加號可以添加監控項
-
因為Cat本身提供了一個例子,但同時也可能起到誤導作用,它例子的Type類型都是URL,但是這不是一個可選項,這是一個必填項,而填什么文檔有沒有交代清楚,導致了我調試很久才反應過來,這里應該填的是我們系統自己埋點時,
Transaction
中填的type,如下
Transaction newTransaction(String type, String name) {
或者用注解的時候我們也會指定個type,這里需要填寫的就是這個
- 進入編輯
- 如上圖第一點,這里點進去看起來灰蒙蒙的,在一般理解都是不可選擇項,但實際上它是可以點開來的,選中狀態顏色是會深一點點
- 這里的幾個詞的概念它文檔同樣沒解釋清楚,一筆帶過,這里的執行次數還帶歪了我同事,讓他以為是在一定時間內錯誤異常的執行次數達到一定值就會告警,但實際上,它就是個計數器,在自己設置的持續時間內,到達規則指定值就會告警,比如最大值100,持續1分鍾,那么1分鍾請求200次就會告警,和異常毫無關系
- 還有響應時間,失敗率,最大響應時間等,文檔都是一筆帶過,或者描述不夠詳細,最起碼的應該告訴我單位是什么吧,雖然毛想想響應時間應該是毫秒級別,失敗率應該是個小數,但誰知道失敗率你會不會以%為單位乘了個100呢,經過我實際測試,失敗率的確是填寫的小數,也就是持續時間比如1分鍾內,請求失敗的數量除以總請求書,所以報錯到告警最晚可能會延遲1分鍾
- 至於這持續分鍾經測試不能填寫小數
- 還有第二點告警級別,我同事一度以為是代碼的報錯級別,實際上這里僅僅代表你需要發送告警到哪幾個環境以及發送告警的時間間隔