前言
最近需要開發一個監控項目,主要用於監控服務器的各項硬件指標,以及應用的狀態(只需要確認應用是否存活),到了這個階段也希望自己能靜下心來總結一下。
需求
服務器監控
服務器監控目前只需要監控起CPU、DISK和RAM的使用情況,本可以java編程解決,
但是考慮到程序的擴展(後續可能新增指標),所以使用了java+shell的方式,
即shell腳本獲取指標、打印,java控制shell腳本的執行,並獲取返回值。在經
由java後臺解析入庫。
應用監控
應用監控在此處就比較簡單,只考慮應用的存活情況即可。那麼考慮到通過端口的
狀態來確認應用的狀態(在部分情況下端口狀態並不能反映應用本身的狀態,但此
處暫不考慮)。
管理員維護
由於涉及到預警告知的概念,那便引入了管理員的概念,與服務器綁定,做通知用。
設計
系統架構
採用 單獨jar + 管理平臺的方式
1、單獨jar: 運行於服務器上,用於根據管理平臺下發的端口判斷應用狀態、定
期執行Shell腳本、解析返回值、推送結果至管理平臺。
2、管理平臺: 用於服務器、應用等的維護,針對服務器應用集端口的下發,接收
狀態報文,解析入縱表庫。並提供數據組裝、展示的功能。
設計重點
端口下發
1、由於應用監控的徐奧,要對每個服務器下發對於的應用端口集合,集合主要維護
在管理平臺;
2、管理平臺初始化時全量下發,每個服務器下發對應端口集,該過程需要在數據
源實例化之後、項目啓動前。
3、管理平臺在對服務器新增、修改應用數據後,只針對該服務器重新下發端口集以
及時更新。
服務器監控指標可配置
1、服務器監控指標需可配置,即可實現對A服務器只監控CPU,而對B服務器可監控
CPU、DISK、RAM和新增其他指標,並且不同服務器指標的閾值也可配置。
2、Shell腳本編輯擴展,送至單獨jar的數據集時一致的,而監控平臺拿到的數據
集也是一致的,但針對各個服務器監控指標集,需做篩選。
Shell執行及數據解析
1、理論上,新增指標只需更改Shell腳本即可實現。
2、Shell腳本的執行,由單獨Jar的定時任務控制。
數據推送及接收
1、數據經單獨Jar推送至監控平臺,考慮併發,先將接收的數據入隊列,另起線程
對隊列做處理,保證線程安全。
解析入庫
1、僅需注意數據表使用縱表即可(爲搭配參數可擴展設計)
歷史數據備份
1、根據監控頻率的不同和監控參數數量的差異,數據量不可控,所以需要做備份處
理。
2、新數據正常入數據表,定時任務控制每個週期的第一天凌晨(例如:每個月的一
號凌晨00:00:00)執行數據庫操作。
3、主要操作爲更改數據表名爲歷史表(帶上日期),並新建數據表作爲數據存儲用,
這樣設計省去了數據遷移的消耗。
總結
需求至此基本滿足,實現了服務器和應用的監控,此外,結合VUE+ECharts還能實現數據展示和圖表展示,使結果更爲直觀。