最近碰到一个有意思的问题,企业用户在应用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

yes

yes

yes

Oracle WebLogic

10gRel3, 11gRel1

yes

yes

yes

 

yes

Redhat JBoss

4.2, 5.1, 6.0

yes

yes

   

yes

Apache Tomcat

5.5, 6.0, 7.0

yes

yes

   

yes

工具提供了对这些服务器的关键指标的监控,这样对IT Pro人员全面掌握IT资源,提供了巨大的帮助。

此外,还可以与开源工具BeanSpy对部属运行的Java应用进行深度监控。

https://github.com/liupeirong/BeanSpy#readme