<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 156,  comments - 601,  trackbacks - 0

    最近看到一位同事正在開發一個監控軟件,要求就是通過針對服務器現有的一些接口,通過這些接口返回的數據進行分析,如果監控的值到達預先設定的范圍則通過短信的方式發送給管理員。

    從整個開發的功能上來看是一個比較單一也很明確的功能,所開發的系統對所其所監控的軟件的依賴性也非常大,主要是監控的數據分析行為和監控信息的服務報警行為這塊。既然這兩塊很難做成一個通用的功能模塊,那就搭建一個監控平臺,可以讓這些功能模塊通過組件的方式自由的注冊和銷毀。

    所有我構思了這個監控平臺,它對外有三個接口,分別是監控接口,報警接口和監控消息監控接口。由平臺統一管理這些組件的生命周期,每個組件都過單獨的線程運行。提供一個核心組件CoreComponent調度所有監控數據的流轉。平臺本身還使用基于jmx管理服務技術提供對所有當前使用的組件運行情況的監控,也包括動態的啟動和停止組件的運行狀態。

    下載地址 
    二進制程序
    第三方類庫下載,第三方類庫下載2 放到lib目錄下。
    api-docs 
    源代碼

    下面是部分設計圖:

     

    AlertComponent設計圖



     

    SpyComponent設計圖:


    MessageAlertChannelActiveAwareComponent設計圖


    下面我利用該平臺開發一個監控ActiveMQ狀態的組件ActiveMQJmxSpyComponent,該組件實現對AMQ運行狀態的監控(監聽失敗或失敗后重新連接成功)。可以通過指定Queue名稱列表來指定要監控Queue隊列的消費者是否為0(通常表示對方可能因為網絡或服務中斷而失去監控)或是隊列消息都由0變為大于0表示消費者重新監聽上服務。

     1public class ActiveMQJmxSpyComponent extends AbstractSpyComponent {   
     2    /**  
     3     * Logger for this class  
     4     */
      
     5    private static final Logger LOGGER = Logger.getLogger(ActiveMQJmxSpyComponent.class);   
     6    //AMQ jmx serverUrl to spy    
     7    private String serverUrl;   
     8    //detect interval(unit is ms)   
     9    private int detectInterval = 5000;   
    10    //the Queue name list to spy   
    11    private Set<String> destinationNamesToWatch;   
    12    // if queue's consumer suspends after then certain time then to notify. default is 3 minutes   
    13    private int queueSuspendNotifyTime = 3*60*1000;  


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

     1public class PrintScreenAlertComponent extends AbstractAlertComponent {   
     2  
     3    /* (non-Javadoc)  
     4     * @see org.xmatthew.spy2servers.core.Component#getName()  
     5     */
      
     6    public String getName() {   
     7        return "PrintScreenAlertComponent";   
     8    }
       
     9  
    10    /* (non-Javadoc)  
    11     * @see org.xmatthew.spy2servers.core.Component#startup()  
    12     */
      
    13    public void startup() {   
    14        setStatusRun();   
    15  
    16    }
       
    17  
    18    /* (non-Javadoc)  
    19     * @see org.xmatthew.spy2servers.core.Component#stop()  
    20     */
      
    21    public void stop() {   
    22        setStatusStop();   
    23  
    24    }
       
    25  
    26    @Override  
    27    protected void onAlert(Message message) {   
    28        System.out.println(message);   
    29           
    30    }
       
    31  
    32}
      
    33


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

     1<?xml version="1.0" encoding="UTF-8"?>  
     2<beans xmlns="http://www.springframework.org/schema/beans"  
     3    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
     4    xmlns:aop="http://www.springframework.org/schema/aop"  
     5    xmlns:tx="http://www.springframework.org/schema/tx"  
     6    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd   
     7           http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd   
     8           http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.0.xsd">  
     9  
    10    <bean class="org.xmatthew.spy2servers.core.CoreComponent"></bean>  
    11    <bean class="org.xmatthew.spy2servers.jmx.JmxServiceComponent"></bean>  
    12       
    13    <bean class="org.xmatthew.spy2servers.component.alert.PrintScreenAlertComponent"></bean>  
    14       
    15    <bean class="org.xmatthew.spy2servers.component.spy.jmx.ActiveMQJmxSpyComponent">  
    16        <property name="serverUrl" value="service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi"></property>  
    17        <property name="destinationNamesToWatch">  
    18          <set>  
    19            <value>Matthew.Queue</value>  
    20            <value>Rocket.Queue</value>  
    21          </set>             
    22        </property>  
    23        <property name="queueSuspendNotifyTime" value="50000"></property>  
    24    </bean>  
    25       
    26</beans>  
    27


    ok,現在ActiveMQJmxSpyComponent監控到的消息能會被PrintScreenAlertComponent打印到屏幕上。
    現在啟動程序,我們看到ActiveMQJmxSpyComponent和PrintScreenAlertComponent組件已經啟動了。


    使用Jconsole進行監控





    如果此時需要建立一個消息報警的規則,只要實現以下接口,并注入到CoreComponent的alertRule屬性中即可。

    1public interface AlertRule {   
    2  
    3    boolean isAlertAllow(MessageAlertChannel channel);   
    4}
      

    應用這個平臺開發監控的組件就這么簡單。

     備注:因為開發時間比較緊,如果有什么Bug也希望大家反饋給我,我會改進。

    下載地址 
    二進制程序
    第三方類庫下載  第三方類庫下載2  放到lib目錄下。
    api-docs 
    源代碼

     Good luck!

    Yours Matthew!

     

    posted on 2008-03-12 13:41 x.matthew 閱讀(2198) 評論(7)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 人成午夜免费大片在线观看| 亚洲成av人片在线天堂无| 国产精品视频免费| 相泽亚洲一区中文字幕| 久久亚洲欧美国产精品| 最近2019中文免费字幕| 亚洲情A成黄在线观看动漫软件| 色猫咪免费人成网站在线观看 | 99久久久国产精品免费蜜臀| 亚洲综合av永久无码精品一区二区| 精品97国产免费人成视频| 亚洲色欲色欲www在线丝| 免费人成网站在线观看不卡| 亚洲精品成人av在线| 精品一区二区三区无码免费视频| 亚洲网红精品大秀在线观看| 久久国产免费一区二区三区 | 成**人免费一级毛片| 亚洲综合久久一本伊伊区| 免费观看无遮挡www的视频| ww亚洲ww在线观看国产| 国产美女被遭强高潮免费网站| 日韩色视频一区二区三区亚洲| 亚洲美女高清一区二区三区| 中国人免费观看高清在线观看二区| 五月天网站亚洲小说| 特级做A爰片毛片免费69 | 国产一区二区三区免费观看在线 | 男人天堂2018亚洲男人天堂| 日韩成全视频观看免费观看高清| 视频一区二区三区免费观看| 一本色道久久综合亚洲精品| 久久久久久毛片免费播放| 亚洲人av高清无码| 中文字幕专区在线亚洲| 久久久精品免费视频| 亚洲成_人网站图片| ZZIJZZIJ亚洲日本少妇JIZJIZ| 久久免费的精品国产V∧| 亚洲精品无码mⅴ在线观看| 国产亚洲色视频在线|