Sharing A Powerful Tool For Application Auto Monitor


本文分享的這個應用監控小工具,本來是我在五年多以前開發實現的windows服務監控的一個windows服務。聽上去比較拗口吧,是的,這個應用一開始就是個監控windows服務的windows服務。

記得當時寫這個程序的直接原因就是,做數據統計結轉遷移備份之類的后台定時windows任務實在太多,而且由於歷史原因,服務掛掉了也沒有人及時知道,最終都會造成用戶投訴,但很久才反饋到開發這邊,或者用戶根本不投訴,而日志系統又做的不好(可以算是沒有),很可能就一直不知道某些應用已經發生問題。

這個工具的缺點也很明顯,我親眼看到過某司后台強大的運維監控系統,各種詳細的參數和指標,大量日志和完善的日志分析系統,可以直接定位問題至某個集群某台服務器,以及可視化數據監控平台管理后台…必須承認,這個小工具做不到某司統一監控平台系統的任何一點。

后來隨着需求改變,監控的類型變多,逐漸完善,在這個過程中,也曾經考慮加入很多特殊應用的內部業務監控邏輯。但是開發組發現統一監控平台不是那么容易實現,抽象改進使監控通用必須統一應用框架,但我們那時候人手不足,只好簡單粗暴實現最容易的通用邏輯,且慢慢被改造為基於http的應用的簡單心跳檢查,目前支持的主要應用類型有windows服務、web服務、web頁面、wcf、web api等。

在某些特殊業務場景下,這個神器還能重見天日,還可以占有一席用武之地。

現在,這個應用支持兩種表現形式:1、winform程序 2、windows服務

將winform改造為windows服務很簡單,只要將Program類文件稍作修改:

Program

最后配合我這里介紹的動態安裝windows服務或者installutil.exe,可以直接實現監控服務安裝。

 

下面簡要概括這個監控系統包括的主要功能模塊。

一、應用監控管理模塊

這個模塊是這個應用程序的核心。

主要實現監控參數配置、監控項定義和業務邏輯實現。

最大亮點是支持動態監控項目配置。你可以通過工具界面及時調整監控項、重新定義時間間隔,同時它可以控制最大最小及隱藏,支持手動暫停和啟動,還支持日志功能及時查看等。

通過這個工具,以前靠猜,面向巧合編程,經常需要碼農手動一個一個排查windows日志找問題,現在直接通過工具日志就能直接定位排查線上問題了。

還有就是,這個小程序可以很簡單的實現windows服務監控並嘗試自動修復而減少人工干預,出現問題會根據配置發送郵件和(或)短信通知相關人員,當然,發郵件和短信的這個邏輯要依賴你自己完成,比如黑白名單功能、發送的優先級,要不要自動帶上服務器IP,發送的頻率控制等等。

1、監控主面板

2、監控項配置

monitoritem

對於監控項目和預警對象(MonitorItemInfo)的抽象非常重要,每一個監控項和提醒策略貫穿整個監控系統的始終。

MonitorItemInfo

如果你曾有過每天都有多個新應用同時上線的工作經歷,你一定知道這些抽象多么重要。

實際上,如果應用較少,應用類型很單一,我們完全可以定義一套通用的監控策略,而不用每個應用都有一個配置。

但是,變化是永恆的主題,不同子系統的不同應用肯定會有不同的監控業務邏輯,這里千萬不要認為是過度設計,我反而認為至少少了兩個抽象,定時時間策略和回調通知報警接口。

監控的應用類型也可以動態擴展,小程序中已經定義了監控接口IServiceMonitor,按照自己的業務要求實現邏輯,然后加上配置即可。

IServiceMonitor

其實,目前為止,這個工具的最大的兩個不足是:

(1)、監控調度周期不靈活

目前每個監控項的時間間隔定義是一致的,實際上,監控項的定時策略完全可以改造成類似quartz(cron表達式)那樣的定時任務調度,每個監控項都有自己的獨特的時間策略。

真正做到某一類型應用或者某一個應用單獨設置時間間隔進行監控才是接近最佳的。

(2)、不支持熱插拔

雖然這個工具已經支持監控項及定時調度配置實時改動,但是不支持監控項動態插件式的監控模式。

理想的情況是,有新的監控項目,直接開發搞出一個新的dll至某文件夾,當然有可能還要加上一段配置文件,然后監控不重啟即可動態監控。

雖然我之前搞過一個插件式文件處理系統,但是考慮到監控程序應該易用簡單不出問題,還是放棄了插件式設計思路。

 

二、管理員模塊

定義了一個簡易管理員功能模塊,實現了登陸和改密需求,示例代碼為了演示需要,被我改變了原來的基於角色的權限控制(RBAC)服務(AdminUserService)。

login       modifypwd

當然,這個模塊你可以根據監控需要進行擴展。

對了,這個小程序啟動時需要輸入用戶名和密碼,您可以根據如下用戶名和密碼進行登陸:

用戶名admin 

密碼123456

 

三、日志管理模塊

如你所知,監控系統越高級,監控參數越詳細,依賴的日志也越多。

這個工具定義了統一日志接口ILog,示例中模擬支持文本、數據庫和NoSQL類型的日志。

但是遠遠不夠,實際監控平台還需要分享大量web請求響應日志、OS日志等。

日志模塊可通過配置的方式進行動態管理。

logadmin

如果你需要開發可視化的管理后台,建議使用RDBMS如MySQL或者MongoDB等NoSQL記錄日志,當然你完全可以開發其他類型的日志提供程序與之適配。

 

最后再重復一次,這個小程序啟動時需要輸入用戶名和密碼,您可以根據如下初始用戶名和密碼進行登陸:

用戶名admin 

密碼123456

 

demo地址:PowerServiceMonitor


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM