對於互聯網公司。監控就像本身的眼睛,沒有眼睛的人,面臨的災難可想而知,所謂無監控不調優,目前的監控總共分幾類:前端
一類 服務級別監控:(服務是否可用,磁盤是否足夠,cpu是否高)這個創業公司都是直接用雲的賦能服務,目前簡單的監控,容器化後,k8s幫我作了不少web
二類 業務級別監控:(QPS、RT、失敗比例、錯誤日誌等)業務級別的監控,通常大的公司都有針對本身的特色對開源框架的組合。以前公司採用的是:spring
監控埋點日誌->KAFKA->influshdb-> 前端grafana展現 。 api
目前創業公司,時間和資源有限,就在考慮一種簡單的能快速上線的方案。下面採用的就是簡單的基於釘釘的監控:app
首先平時一直在用釘釘,比較讚的地方,釘釘提供了很是方即可以定義的釘釘機器人,能夠經過webhook方式推送消息和格式。框架
具體可參考: https://open-doc.dingtalk.com/docs/doc.htm?treeId=257&articleId=105735&docType=1url
具體實現:
簡單版本實現: 經過每一個服務接口異常進行捕獲,對異常消息進行處理同時採用線程池(單線程:純內存操做不是IO操做)方式推送消息到本地隊列,隊列限制大小(可配置),避免無限制推送spa
而後推送模塊定時按必定頻率(可配置)獲取消息。而後推送消息到釘釘機器人。引入方式各個服務接入jar線程
後續版本擴展:日誌
是否能夠一樣多種推送方式(郵件、短信、釘釘)
是否支持多種存儲消息方式(內存隊列、MQ、Redis)
是否能夠接入簡單的統計(方法執行時間、方法訪問量、超時告警等)
一、總體流程
二、實現細節(Spring boot接入)
具體源碼就不公開了
一、利用spring boot的自動注入功能。在spring.factories 中增長啓動注入
二、利用ConditionalOnProperty註解中增長配置 只有註解啓用時候纔會加載成功
@Configuration @EnableConfigurationProperties(DingtalkProperties.class) @ConditionalOnProperty(value = "monitor.alert.dingtalk.enble",havingValue ="true")
三、DingtalkProperties中配置參數
配置參數:
1 monitor: 2 alert: 3 dingtalk: 4 enble: true 5 phone: [xxxx,xxxx] 6 url: https://oapi.dingtalk.com/robot/send? access_token=
這樣服務接入的時候更靈活,簡單~
參數名 |
可選值 |
默認值 |
描述 |
示例 |
---|---|---|---|---|
enable |
true| false |
false |
true 啓用 false 禁用 |
如上 |
phone |
手機號 |
無 |
通知人手機號,多我的用逗號隔開 |
如上 |
url |
url地址 |
無 |
通知的地址,必填項 |
如上 |
level |
short|full |
short |
通知信息是否縮短 short:通知內容最長500個字符 full:通知內容不作縮短 |
建議默認值 |
capacity |
整數 |
100 |
存儲異常信息個數,超過閾值不進行推送 |
建議默認值 |
pull-interval |
整數 |
5000 |
報警時間間隔(ms) |
可自定義修改 |
at-all |
true| false |
false |
組內全部都會被通知 |
建議默認值 |
env |
字符串 |
Spring激活環境 |
dev|test|pro等 |
可自定義修改 |
applicationName |
字符串 |
Spring應用名稱 |
order-service|user-service等 |
可自定義修改 |
四、接入方式(jar包引入)
告警通知須要知足條件:
- @AccessService註解的類或方法中拋出的異常
- 配置文件中啓用了監控(即enable:true)
五、通知效果