基于组件化的监控平台开发监控Tomcat服务及邮件通知功能

前一阵因看到一位同事正在开发一个监控软件,就搭建了这组件化的监控平台 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),使用其监控平台工作起来。

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 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 <!-- <propertyname="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 <!-- <propertyname="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 <!-- <propertyname="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" > <!-- WebModule监控方案 -->
53 < bean class ="org.xmatthew.spy2servers.component.spy.jmx.WebModuleSpy" >
54 < property name ="webModules" > <!-- 监控的webmodule列表,如果模块状态为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 >



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



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

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 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(组件名)。

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --> 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!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值