最近碰到一个有意思的问题,企业用户在应用System Center的时候,除了对常规的IT资源进行监控和管理的同时,希望通过System Center Operations Manager (SCOM)能够对自己的应用进行监控,特别是一些Java写的应用。
这样的做法,显然有其明显的价值,增强了IT对业务的支持和洞察力,提高了响应的即时性和准确性。
但问题是,如何通过SCOM对Java应用进行监控?
一些常见的实现方案包括:
· Java应用将状态信息(例如业务数据状态、操作异常、流程状态、流程异常等)写入Windows Event Log,这是一个比较直观的做法,同时也是一种松耦合的方式。这种方法充分与Windows的Log机制相结合,但也需要对Windows的Event Log进行管理,特别是大量的日志文件的写入和清理,对系统本身性能、存储的影响等。
具体实现,可参考Log4j:
http://logging.apache.org/log4j/1.2/
· Java应用将状态信息(例如业务数据状态、操作异常、流程状态、流程异常等)写入文本文件,这也是比较直观的做法,具体处理逻辑可以由开发商自己来确定,并可以根据自身需要和经验进行性能优化、分布式处理等。
· 通过Windows Management Instrumentation (WMI)方式,通过Windows Service方式存储状态,并与SCOM进行互操作:
http://msdn.microsoft.com/en-us/library/aa310909(v=vs.71).aspx
这种方法可以更好地监控应用的健康度(health), SCOM可以对WMI进行更好的监控。
可以用C#,或者用C++/C来开发。
http://msdn.microsoft.com/en-us/library/windows/desktop/aa389762(v=vs.85).aspx
以上做法对于System Center 2012之前的版本,例如System Center Operations Manager 2007 R2,是可以考虑的选择。对于System Center 2012,可以考虑使用其所提供的一个Add-On:System Center 2012 – Operations Manager Component Add-On,具体参考下面网址:
http://www.microsoft.com/en-us/download/details.aspx?id=29270
安装后,基于这个包,可以实现对Java应用的监控,支持IBM WebSphere, Oracle WebLogic, Red Hat JBoss and Apache Tomcat等服务器。
具体版本如下(包括了对非Windows操作系统的支持):
Version
RHEL
SLES
Solaris
AIX
Windows
IBM WebSphere
6.1, 7.0
yes
Oracle WebLogic
10gRel3, 11gRel1
Redhat JBoss
4.2, 5.1, 6.0
Apache Tomcat
5.5, 6.0, 7.0
工具提供了对这些服务器的关键指标的监控,这样对IT Pro人员全面掌握IT资源,提供了巨大的帮助。
此外,还可以与开源工具BeanSpy对部属运行的Java应用进行深度监控。
https://github.com/liupeirong/BeanSpy#readme