最近公司windows服务器刚做完Nginx+tomcat的负载均衡处理,下一步想实现对后台服务软件tomcat和nginx服务的监控。此处我们想实现的不是对性能等各项指标的监控,而是服务能否正常访问,若出现异常希望能重启服务,重启后最好能再向指定邮箱发一邮件(若该邮箱开通了来往邮件通知服务,则可以实现实时短信通知了)。临近年末不是特别忙,有些闲暇时间,计划把自己实现该需求的过程记录下来,给同行们一个参考。
本篇先对选择的监控工具做下简要介绍,后续会逐步实现其它需求。在选定使用的软件前从网上查了不少资料像JMX等,也没少尝试使用相关软件,但最终选定了第三方用户编写的一个监控工具——TomcatMoni(TOMCAT监控助手)。这款小软件是从一个软件站下载到的,下载地址:http://www.crsky.com/soft/26486.html
或者去我上传的地址下载了:http://download.csdn.net/detail/a443453087/8403203
下载的软件包名是TomcatMoni-v0.1beta.zip,解压后如下图:
其中有软件的使用说明,每个文件功能想必大家一看就明白了,下面对特殊功能点做下说明吧。
在conf.properties文件中有几项配置,可以配置定时访问的地址,以及出现异常后启动的命令。还可以设置时访问时间间隔,日志保存等。各参数如下:
- ##############################################################################
- #监视服务器配置
- ##############################################################################
- #服务器一 测试地址
- url1 = http://localhost:8080/login.jsp
- #服务器一 启动命令(可以调用一个批处理,在这个批处理中,您写上重启的命令)
- exec1 = cmd.exe /c E:\\restartServer.bat
- #服务器二 测试地址
- #url2 =
- #服务器二 启动命令
- #exec2 =
- #服务器三 测试地址
- #url3 =
- #服务器三 启动命令
- #exec3 =
- ##############################################################################
- #其他配置<span style="white-space:pre"> </span>
- ##############################################################################
- #时间间隔(单位分钟)
- times = 1
- #日志记录地址
- log = log.txt
配置之比后可以运行TomcatMoni.exe开始执行监控,可以尝试手动停止下服务,看它是否能监控到异常并执行指定命令。实际测试的结果该软件最多可以实现三路地址监控。之所以选择这个软件是因为它比较简单易用,并且可以在restartServer.bat中添加自己想要执行的命令,如:重启系统服务,发邮件等。如:restartServer.bat文件中示例代码所示,若想实现tomcat服务的停止与重启功能需要把tomcat作为服务来安装才可以
一、实现blat发送邮件
下载blat可以去官网:http://www.blat.net/ 当然你也可以去网上百度下,也会有大把下载资源。
下载之后解压找到如下图几个文件,把它们放到C:\WINDOWS\system32下面,这样做为了方便通过命令行直接调用。
放到指定路径后打开一个命令行窗口,输入blat会输出如下信息,说明blat可以使用了。
下面就使用blat来发邮件了,首先是一个批处理:
sendmail.bat:
- @echo off
- :::::::::::::: 参数设置::::::::::::::
- set from=test@163.com【发送方地址】
- set user=test【发送方账号】
- set pass=testpwd【发送方密码】
- set tf=mail_list.txt【收件人列表】
- set subj=这是邮件标题哈【邮件标题】
- set mail=mail_body.txt【邮件内容】
- set attach=c:\sendmail\fj.txt【邮件附件】
- set server=smtp.163.com【发送服务器】
- set debug=-debug -log blat.log -timestamp【日志】
- ::::::::::::::: 执行blat :::::::::::::::
- blat %mail% -tf %tf% -base64 -charset UTF8 -subject %subj% -attach "%attach%" -server %
- server% -f %from% -u %user% -pw %pass% %debug%
- 2831000205@qq.com
- 88888@qq.com
mail_body.txt:
- This email come from test@163.com,Congratulations!
- i am fj! 测试中文
2、发送方地址和发送方账号注意区分开来,发送方账号一定不要带形如:“@163.com“的后缀,否则将报登录失败的错误。
3、上面的邮箱地址密码都是我随意写的,实际使用时请使用正确的邮箱和密码等信息。
完成以上信息的配置后双击sendmail.bat,如果没有报出错误信息,那就可以看下你的收件箱了,应该已收到刚才发送的邮件了。
二、用VBS脚本发送邮件
现在通过blat发邮件是没问题的,但测试时发现通过上文介绍的Tomcatmoni监控助手无法调用sendmail.bat这个文件,调用后不能正常执行,但如果把这个bat文件换成其它命令就可以正常执行。后来尝试了好久还是没能实现通过TomcatMoni监控助手调用sendmail.bat正常发送邮件。但自己手动双击sendmail.bat确实可以发送邮件。于是又找到了接下来要介绍的第二种发送邮件的方式,通过vbs脚本来发送,样例如下:
sendmail.vbs
- NameSpace = "http://schemas.microsoft.com/cdo/configuration/"
- set Email = CreateObject("CDO.Message")
- Email.From = "sendtest@163.com" 【发送方地址】
- Email.To = "receive@163.com" 【接收方地址】
- Email.Subject = "这是邮件标题"【邮件标题】
- x="C:\TomcatMonitor\sendmail\mail_body.txt" 【邮件正文】
- y="C:\TomcatMonitor\sendmail\fj.txt"【附件】
- Set fso=CreateObject("Scripting.FileSystemObject")
- Set myfile=fso.OpenTextFile(x,1,Ture)
- c=myfile.readall
- myfile.Close
- Email.Textbody = c
- Email.AddAttachment y
- with Email.Configuration.Fields
- .Item(NameSpace&"sendusing") = 2
- .Item(NameSpace&"smtpserver") = "smtp.163.com"【邮件服务器地址】
- .Item(NameSpace&"smtpserverport") = 25
- .Item(NameSpace&"smtpauthenticate") = 1
- .Item(NameSpace&"sendusername") = "sendtest" 【发送方账号】
- .Item(NameSpace&"sendpassword") = ""sendtestpwd" 【密码】
- .Update
- end with
- Email.Send
- Set Email=Nothing
restartServer.bat:
- @rem 这里可以写您自己需要执行的命令
- @rem 重启tomcat的命令
- @rem 发出邮件通知
- wscript C:\TomcatMonitor\sendmail\sendmail.vbs