轉載自 https://mp.weixin.qq.com/s?__biz=MjM5ODYxMDA5OQ==&mid=2651960843&idx=1&sn=dcbb3d84f413b95fff4628c06da12003&chksm=bd2d03d78a5a8ac15be0757d923b7ccd34307958f0a49fa2fdbd55f1d1548be401fe42e831a9&scene=27#wechat_redirect
微信號 :架構師之路
要介紹統一監控平台,得先從告警策略聊起,后續再聊不同維度監控的架構與實現細節。
一、啥是告警?
監控平台發現系統異常,向系統負責人發出文字(例如,郵件/短信),色彩(有些公司,編譯不過,CI平台會亮紅燈),聲音(有些公司,有蜂鳴器嗡嗡響,研發壓力大呀)等警示,就是告警。
絕大部分公司,主要是通過文字發出系統異常告警信息。
文字告警有哪些常見的方法?
以58到家為例,目前提供了四種文字告警的方式,其成本,到達率,實時性都不一樣:
-
短信:成本高,實時性好,到達率高
-
郵件:成本低,實時性差,到達率高
-
釘釘/微信:成本低,實時性中,到達率中
畫外音:當然,得現有短信、郵件、釘釘、微信等消息網關的基礎服務。
二、啥是告警策略?
絕大部分公司,可能都沒有考慮系統監控告警策略,一旦發生異常,就發郵件/短信通知系統負責人,這樣可能導致這樣一些問題:
-
同一個集群的不同實例出問題,可能會造成重復告警,浪費帶寬資源,升高短信成本
-
系統負責人短時間內手機被告警短信刷屏,導致產生麻木感
-
系統負責人短時間內手機,郵箱,釘釘,微信同時對一個故障告警,導致產生巨大壓力
-
員工不重視告警,無法判斷告警的優先級,leader又不知情,導致事故影響擴大
畫外音:你猜,BAT一年的短信告警費用是多少?
為了解決上述問題,針對不同的服務,在不同的時間段,不同的員工層級,應該設定不同的告警策略,有哪些常見的告警策略呢?
-
模塊告警收斂策略:當一個模塊/服務異常時,與其對應的所有接口監控,與其對應集群的多有實例,都會告警,此時,應該收斂為一個模塊/服務告警,常見的實現方式是,模塊/服務按照集群名稱做告警去重
-
接口告警收斂策略:當一個模塊/服務的一個接口異常,與其對應集群的多個實例,都會告警,此時,應該收斂為一個接口告警,常見的實現方式是,按照接口名稱做告警去重
-
告警頻率收斂策略:對同一個服務或者接口,應該在固定的時間內,只發送有限的告警,常見的方式是,按照1分鍾1次限制告警次數,一來降低研發的緊張感與壓力感,二來節省成本
-
不同時段區分告警方式策略:工作日工作時段在公司時,通過郵件/釘釘/微信發送告警能更加節省成本;半夜或者周末發生故障時,通過郵件發送告警能保證實時性
-
逐層上報告警策略:每個模塊都應該有負責人,原則上告警會發送給模塊的負責人,但如果告警連續1小時未恢復正常,告警會自動發送給系統負責人的直屬leader,如果告警連續3個小時未恢復正常,告警會自動發送給系統負責人的二級leader
-
黑白跳動策略:當系統由正常變為異常,異常恢復正常,出現正反的變化時,都應該發出告警
畫外音:額,這么人性化,是“別人家”的公司么?
三、監控平台,告警策略依賴的基礎模塊
要實現統一監控平台,要實現告警策略化,需要依賴兩個非常重要的基礎模塊:
-
集群信息管理
-
員工信息管理
什么是集群信息管理?
額,這個架構設計中最容易忽略的部分,《監控平台基礎服務,集群信息統一管理》一文已經有過描述,文本不再展開。
以下是通過全局配置文件,實現集群信息集中管理,一個global.config舉例:
[user.service]
ip.list : ip1, ip2, ip3
port : 8080
bin.path : /user.service/bin/
log.path : /user.service/log/
conf.path : /user.service/conf/
ftp.path:ftp://192.168.0.1/USER_2_0_1_3/user.exe
owner.list : shenjian, zhangsan, lisi
從這里,監控中心能夠知道被監控的是 [user.service] 集群,有三個實例部署在 ip1/ip2/ip3 上,如果發生異常,要將告警發送給 shenjian, zhangsan, lisi 三個模塊直接負責人。
什么是員工信息?
額,顧名思義,是員工基礎信息的管理(額,這算什么解釋)。和集群信息管理一樣,員工信息的管理一定要集中化,不能分散在各處(分散的壞處是耦合,在《監控平台基礎服務,集群信息統一管理》一文里談得很多了)。
員工信息管理的實現方式主要有兩種:
-
員工信息管理服務
-
全局員工信息配置
如何通過員工信息管理服務集中管理員工信息?
如上圖,建立員工信息管理服務,絕大部分公司應該都是這么統一管理員工信息的,這個服務和HR系統結合應該是非常緊密的,即使是外采的HR系統,肯定有相關的模塊管理員工信息,相關的數據庫存儲員工信息。
如何通過全局配置文件集中管理員工信息?
如果不考慮和HR系統的打通,而只考慮監控系統,分級告警的需求,完全可以通過配置文件來管理系統負責人信息,例如global.owner.config:
[shenjian]
department : tech
leader : sandy
email : XX@OO.com
phone :15912345678
dingding : 15912345678@dingding.com
wechat : XXOO
…
四、總結
要開發統一監控平台,至少有兩個基礎模塊:
-
集群信息統一管理
-
員工信息統一管理
統一監控平台,不能一異常就告警,太不人性化,要實現統一的分級告警策略:
-
模塊告警收斂策略:按照集群名稱做去重
-
接口告警收斂策略:按照接口名稱做去重
-
告警頻率收斂策略:按照M分鍾N次限制告警
-
不同時段區分告警方式策略:工作日/非工作日,白天/夜晚區分
-
逐層上報告警策略:先模塊負責人告警,n分鍾未恢復升級,m分鍾未恢復再升級
-
黑白跳動策略:當系統由正常變為異常,異常恢復正常都通報
員工信息管理,需要注意:
-
避免分散管理,導致耦合
-
應當集中管理,有兩種常見的實現方式,統一服務/統一全局配置
五、調研
調研一、對於監控平台,你的感受是:
-
ca1,無監控平台,都是用戶反饋系統掛了
-
有機器層面的監控,有nginx層面404監控
-
有異常日志監控,有服務接口監控
-
頭疼,有各種奇形怪狀的警示燈,蜂鳴器告警,壓力異常之大
調研二、對於人性化告警,你的感受是:
-
ca2,沒有監控,談不上告警
-
ca3,沒有考慮人性化,每次手機短信響起,就緊張,每次批量收到告警,壓力就很大
-
有區分工作日/周末,白天/黑夜的告警策略區分
-
有收斂,去重,逐層上報的告警策略區分