最近看到一位同事正在開(kāi)發(fā)一個(gè)監(jiān)控軟件,要求就是通過(guò)針對(duì)服務(wù)器現(xiàn)有的一些接口,通過(guò)這些接口返回的數(shù)據(jù)進(jìn)行分析,如果監(jiān)控的值到達(dá)預(yù)先設(shè)定的范圍則通過(guò)短信的方式發(fā)送給管理員。 從整個(gè)開(kāi)發(fā)的功能上來(lái)看是一個(gè)比較單一也很明確的功能,所開(kāi)發(fā)的系統(tǒng)對(duì)所其所監(jiān)控的軟件的依賴(lài)性也非常大,主要是監(jiān)控的數(shù)據(jù)分析行為和監(jiān)控信息的服務(wù)報(bào)警行為這塊。既然這兩塊很難做成一個(gè)通用的功能模塊,那就搭建一個(gè)監(jiān)控平臺(tái),可以讓這些功能模塊通過(guò)組件的方式自由的注冊(cè)和銷(xiāo)毀。 所有我構(gòu)思了這個(gè)監(jiān)控平臺(tái),它對(duì)外有三個(gè)接口,分別是監(jiān)控接口,報(bào)警接口和監(jiān)控消息監(jiān)控接口。由平臺(tái)統(tǒng)一管理這些組件的生命周期,每個(gè)組件都過(guò)單獨(dú)的線程運(yùn)行。提供一個(gè)核心組件CoreComponent調(diào)度所有監(jiān)控?cái)?shù)據(jù)的流轉(zhuǎn)。平臺(tái)本身還使用基于jmx管理服務(wù)技術(shù)提供對(duì)所有當(dāng)前使用的組件運(yùn)行情況的監(jiān)控,也包括動(dòng)態(tài)的啟動(dòng)和停止組件的運(yùn)行狀態(tài)。 下載地址 二進(jìn)制程序 第三方類(lèi)庫(kù)下載,第三方類(lèi)庫(kù)下載2 放到lib目錄下。 api-docs 源代碼 下面是部分設(shè)計(jì)圖: AlertComponent設(shè)計(jì)圖
SpyComponent設(shè)計(jì)圖: MessageAlertChannelActiveAwareComponent設(shè)計(jì)圖 下面我利用該平臺(tái)開(kāi)發(fā)一個(gè)監(jiān)控ActiveMQ狀態(tài)的組件ActiveMQJmxSpyComponent,該組件實(shí)現(xiàn)對(duì)AMQ運(yùn)行狀態(tài)的監(jiān)控(監(jiān)聽(tīng)失敗或失敗后重新連接成功)??梢酝ㄟ^(guò)指定Queue名稱(chēng)列表來(lái)指定要監(jiān)控Queue隊(duì)列的消費(fèi)者是否為0(通常表示對(duì)方可能因?yàn)榫W(wǎng)絡(luò)或服務(wù)中斷而失去監(jiān)控)或是隊(duì)列消息都由0變?yōu)榇笥?表示消費(fèi)者重新監(jiān)聽(tīng)上服務(wù)。
下面是一個(gè)報(bào)警組件的實(shí)現(xiàn):只是簡(jiǎn)單的把監(jiān)控消息打印在屏幕上PrintScreenAlertComponent
下面該組件的注冊(cè)。${CUR_PATH}/conf/spy2servers.xml
ok,現(xiàn)在ActiveMQJmxSpyComponent監(jiān)控到的消息能會(huì)被PrintScreenAlertComponent打印到屏幕上。 現(xiàn)在啟動(dòng)程序,我們看到ActiveMQJmxSpyComponent和PrintScreenAlertComponent組件已經(jīng)啟動(dòng)了。 使用Jconsole進(jìn)行監(jiān)控
如果此時(shí)需要建立一個(gè)消息報(bào)警的規(guī)則,只要實(shí)現(xiàn)以下接口,并注入到CoreComponent的alertRule屬性中即可。
應(yīng)用這個(gè)平臺(tái)開(kāi)發(fā)監(jiān)控的組件就這么簡(jiǎn)單。
備注:因?yàn)殚_(kāi)發(fā)時(shí)間比較緊,如果有什么Bug也希望大家反饋給我,我會(huì)改進(jìn)。
下載地址 二進(jìn)制程序 第三方類(lèi)庫(kù)下載, 第三方類(lèi)庫(kù)下載2 放到lib目錄下。 api-docs 源代碼 Good luck!
Yours Matthew!