posts - 156,  comments - 601,  trackbacks - 0
前一阵因看到一位同事正在开发一个监控软件,就搭建了这组件化的监控平台 http://www.blogjava.net/xmatthew/articles/185673.html。
看到有很多朋友的支持,在些表示非常感谢。即然平台已经搭建完成,接下就让需要一起来完善这些真正在应用的组件开发,所以我利用业余时间,开发了一个Tomcat服务监控组件和一个邮件通知服务组件。

下载地址
二进制程序
第三方类库下载,第三方类库下载2 放到lib目录下。
api-docs 
源代码

先来介绍Tomcat服务监控组件的实现,该监控组件目前实现了以下方面信息的监控:
1. Jvm堆内存和非堆内存的监控(可以设置使用的百分比或是具体使用的内存大小)
2. 当前操作文件打开的IO文件个数监控。 一般操作默认设置的最大值是1024,如果超过这个服务会导致Tomcat所有服务的停止。
3. 数据库连接池的监控(可以设置使用的百分比或是具体使用的连接数大小)
4. Tomcat服务模块(Web Module)的运行状态的监控(监控其状态是否为运行状态)

监控的方式通过Jmx取得当前Tomcat的服务状态,需要tomcat开始jmx服务。
方法如下:在startup.sh命令行中(linux)加入以下命令
 export JAVA_OPTS=" -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8060 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

windows下使用:
  set JAVA_OPTS=" -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8060 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"

下面我们来看一下该监控组件的实现类图




下面我们来操作一下如何使用Spring注册该组件(spy2servers.xml),使用其监控平台工作起来。

 1     <bean class="org.xmatthew.spy2servers.component.spy.jmx.TomcatJmxSpyComponent">
 2         <!-- 监控的Jmx服务IP -->
 3         <property name="host" value="x.x.x.x"></property>
 4         <!-- 监控的Jmx服务端口 -->
 5         <property name="port" value="8060"></property>
 6         <!-- 监控时间间隔 单秒是 毫秒 -->
 7         <property name="detectInterval" value="5000"></property>
 8         
 9         <property name="heapMemorySpy"> <!-- 堆内存 监控方案 -->
10             <bean class="org.xmatthew.spy2servers.component.spy.jmx.MemorySpy">
11                 <!-- 设置临界值 内存使用的百分比 使用的内存值 / 最大内存值。 注如果该值设置, memoryUsedToAlert自动失效-->
12                 <property name="memoryUsedPercentToAlert" value="5"></property>
13                 <!-- 设置临界值 内存超过一定值后触发 单位 Mb -->
14                 <!-- <property name="memoryUsedToAlert" value="100"></property> -->
15                 <!-- 设置临界值保持多久后,开始报警 单位秒。 注该值没有默认值,如果不认置则不会触发报警操作 -->
16                 <property name="alertAfterKeepTimeLive" value="10"></property>
17             </bean>
18         </property>
19         <property name="nonHeatMemorySpy"><!-- 非堆内存 监控方案 -->
20             <bean class="org.xmatthew.spy2servers.component.spy.jmx.MemorySpy">
21                 <property name="memoryUsedToAlert" value="100"></property>
22                 <property name="alertAfterKeepTimeLive" value="10"></property>
23             </bean>
24         </property>
25         <property name="fileSpy">
26             <bean class="org.xmatthew.spy2servers.component.spy.jmx.FileSpy">
27                 <!-- 设置临界值 文件打开数百分比 开始的文件数 / 最大的文件数。  注如果该值设置, filesOpenedToAlert自动失效 -->
28                 <property name="filesOpenedPercentToAlert" value="90"></property>
29                 <!-- 设置临界值 文件打开数 -->
30                 <!-- <property name="filesOpenedToAlert" value="1000"></property> -->
31                 <!-- 设置临界值保持多久后,开始报警 单位秒。 注该值没有默认值,如果不认置则不会触发报警操作 -->
32                 <property name="alertAfterKeepTimeLive" value="2"></property>
33             </bean>
34         </property>
35         
36         <property name="dataSourcesSpy"><!-- 文件IO打开数 监控方案 -->
37             <bean class="org.xmatthew.spy2servers.component.spy.jmx.DataSourcesSpy">
38                 <property name="dataSourceSpys">
39                     <set>
40                         <bean class="org.xmatthew.spy2servers.component.spy.jmx.DataSourceSpy">
41                             <!-- 设置临界值 连接池连接数占用比例 使用的连接数 / 最大的连接数。  注如果该值设置, numActiveToAlert自动失效 -->
42                             <property name="numActivePercentToAlert" value="90"></property>
43                             <!-- 设置临界值  连接池连目前使用的连接数 -->
44                             <!-- <property name="numActiveToAlert" value="20"></property> -->
45                             <property name="dataSourceName" value="jdbc/opendb"></property>
46                         </bean>
47                     </set>
48                 </property>
49             </bean>
50         </property>    
51         
52         <property name="webModuleSpy"><!-- Web Module 监控方案 -->
53             <bean class="org.xmatthew.spy2servers.component.spy.jmx.WebModuleSpy">
54                 <property name="webModules"> <!-- 监控的web module列表,如果模块状态为stop或undeploy则会报触发报警 -->
55                     <set>
56                         <value>/</value>
57                         <value>/jsp-examples</value>
58                         <value>/servlets-examples</value>
59                     </set>
60                 </property>
61             </bean>
62         </property>
63     </bean>


这样该组件就可以工作,下面是如何配置邮件通知组件。该组对当简单一些
实现类图如下:


配置好需要通知的邮件列表和登录的邮件服务器就可以了

 1     <bean class="org.xmatthew.spy2servers.component.alert.EmailAlertComponent">
 2         <property name="emails" ref="emails"/>
 3         <property name="emailAccount">
 4             <bean class="org.xmatthew.spy2servers.component.alert.EmailAccount">
 5                 <property name="server" value="smtp.163.com"></property>
 6                 <property name="serverPort" value="25"></property>
 7                 <property name="loginName" value="ant_miracle"></property>
 8                 <property name="loginPwd" value="xxx"></property>
 9                 <property name="sender" value="ant_miracle@163.com"></property>
10                 <property name="sendNick" value="EmailAlertComponent"></property>
11             </bean>
12         </property>
13     </bean>
14 
15     <util:list id="emails">
16         <value>ant_miracle@163.com</value>
17     </util:list>

最后我们再配置一下通知服务的规则。
下面的规则表示,TomcatJmxSpyComponent(组件名)的消息都会调度到EmailAlertComponent(组件名)。

 1     <bean id="simpleAlertRule" class="org.xmatthew.spy2servers.rule.SimpleAlertRule">
 2         <property name="channles">
 3             <set>
 4                 <ref bean="channel1" />
 5             </set>
 6         </property>
 7     </bean>
 8     
 9     <bean id="channel1" class="org.xmatthew.spy2servers.rule.Channel">
10         <property name="from">
11             <set>
12                 <value>TomcatJmxSpyComponent</value>
                   <!-- more components -->
13             </set>
14         </property>
15         <property name="to">
16             <set>
17                 <value>EmailAlertComponent</value>
18             </set>
19         </property>
20     </bean>


好了,基本的配置最是这些,应用程序和源代码已经上传大家可以自写阅览。大家如有任何问题请回复给我。

Good luck!
Yours Matthew!


posted on 2008-03-24 08:22 x.matthew 阅读(4277) 评论(9)  编辑  收藏 所属分类: Spy2Servers

只有注册用户登录后才能发表评论。


网站导航: