最近看到一位同事正在開發(fā)一個監(jiān)控軟件,要求就是通過針對服務(wù)器現(xiàn)有的一些接口,通過這些接口返回的數(shù)據(jù)進(jìn)行分析,如果監(jiān)控的值到達(dá)預(yù)先設(shè)定的范圍則通過短信的方式發(fā)送給管理員。
從整個開發(fā)的功能上來看是一個比較單一也很明確的功能,所開發(fā)的系統(tǒng)對所其所監(jiān)控的軟件的依賴性也非常大,主要是監(jiān)控的數(shù)據(jù)分析行為和監(jiān)控信息的服務(wù)報警行為這塊。既然這兩塊很難做成一個通用的功能模塊,那就搭建一個監(jiān)控平臺,可以讓這些功能模塊通過組件的方式自由的注冊和銷毀。
所有我構(gòu)思了這個監(jiān)控平臺,它對外有三個接口,分別是監(jiān)控接口,報警接口和監(jiān)控消息監(jiān)控接口。由平臺統(tǒng)一管理這些組件的生命周期,每個組件都過單獨(dú)的線程運(yùn)行。提供一個核心組件CoreComponent調(diào)度所有監(jiān)控數(shù)據(jù)的流轉(zhuǎn)。平臺本身還使用基于jmx管理服務(wù)技術(shù)提供對所有當(dāng)前使用的組件運(yùn)行情況的監(jiān)控,也包括動態(tài)的啟動和停止組件的運(yùn)行狀態(tài)。
下載地址
二進(jìn)制程序
第三方類庫下載,第三方類庫下載2 放到lib目錄下。
api-docs
源代碼
下面是部分設(shè)計圖:
AlertComponent設(shè)計圖
SpyComponent設(shè)計圖:
MessageAlertChannelActiveAwareComponent設(shè)計圖
下面我利用該平臺開發(fā)一個監(jiān)控ActiveMQ狀態(tài)的組件ActiveMQJmxSpyComponent,該組件實現(xiàn)對AMQ運(yùn)行狀態(tài)的監(jiān)控(監(jiān)聽失敗或失敗后重新連接成功)。可以通過指定Queue名稱列表來指定要監(jiān)控Queue隊列的消費(fèi)者是否為0(通常表示對方可能因為網(wǎng)絡(luò)或服務(wù)中斷而失去監(jiān)控)或是隊列消息都由0變?yōu)榇笥?表示消費(fèi)者重新監(jiān)聽上服務(wù)。

2

3

4

5

6

7

8

9

10

11

12

13

下面是一個報警組件的實現(xiàn):只是簡單的把監(jiān)控消息打印在屏幕上PrintScreenAlertComponent

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

下面該組件的注冊。${CUR_PATH}/conf/spy2servers.xml

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

ok,現(xiàn)在ActiveMQJmxSpyComponent監(jiān)控到的消息能會被PrintScreenAlertComponent打印到屏幕上。
現(xiàn)在啟動程序,我們看到ActiveMQJmxSpyComponent和PrintScreenAlertComponent組件已經(jīng)啟動了。
使用Jconsole進(jìn)行監(jiān)控
如果此時需要建立一個消息報警的規(guī)則,只要實現(xiàn)以下接口,并注入到CoreComponent的alertRule屬性中即可。

2

3

4

應(yīng)用這個平臺開發(fā)監(jiān)控的組件就這么簡單。
備注:因為開發(fā)時間比較緊,如果有什么Bug也希望大家反饋給我,我會改進(jìn)。
下載地址
二進(jìn)制程序
第三方類庫下載, 第三方類庫下載2 放到lib目錄下。
api-docs
源代碼
Good luck!
Yours Matthew!