本文主要介绍利用JAMon监控java程序,本文中所用的应用服务器为jboss,对于其他服务器,配置类似。
从Sourceforge上下载JAMon,解压之后是一个jar包和一个war包。将jar包拷贝到lib目录下,war包布署到deploy目录下。
一、页面监控
对于页面监控主要修改你所监控的war包中的web.xml文件,增加一个filter即可,代码如下:
JAMonFilter
com.jamonapi.JAMonFilter
JAMonFilter
/*
对于JAMon提供的这个filter不一定满足需求,我们可以自己写一个filter。
二、java方法的监控
JAMon是通过在要监控的代码前后加上start()和stop方法来实现的,如下:
importcom.jamonapi.*;
...
Monitor monitor=MonitorFactory.start("myMonitor");
...Your Code...
monitor.stop();
因此我们可以借助aspectj来实现对java方法的监控,代码如下:
ApiAspect.aj
publicaspect ApiAspect...{
//com.mycompany.*.*包下的所有类的所有public方法
publicpointcut apiExecution():
execution(public*com.mycompany.*.*.*(..)) ;
before():apiExecution()...{
//start()方法
MonitorManageFactory.getMonitor(thisJoinPoint.toString().substring(
thisJoinPoint.toString().indexOf("")+1));
}
after() returning():apiExecution()...{
//stop()方法
MonitorManageFactory.getMonitor(
thisJoinPoint.toString().substring(
thisJoinPoint.toString().indexOf("")+1)).stop();
}
}
MonitorManageFactory.java
importjava.util.ArrayList;
importjava.util.List;
importcom.jamonapi.Monitor;
importcom.jamonapi.MonitorFactory;
publicclassMonitorManageFactory...{
privatestaticListmonitorPoll=newArrayList();
publicstaticMonitor getMonitor(String label)...{
for(Monitor monitor : monitorPoll)...{
if(label.equals(monitor.getLabel()))...{
returnmonitor;
}
}
Monitor monitor=MonitorFactory.start(label);
monitorPoll.add(monitor);
returnmonitor;
}
}
aop.xml
<?xml version='1.0' encoding='utf-8'?>
aop.xml要放在META-INF文件夹下,将编译之后的文件和META-INF文件夹拷贝到被监控的war包或jar包中。war中的目录为WEB-INF/classes,jar包为根目录。
最后就是修改应用服务器的启动,在run.bat中加入set JAVA_OPTS=-javaagent:%ASPECTJ_HOME%/aspectjweaver.jar %JAVA_OPTS%
其中ASPECTJ_HOME为aspectjweaver.jar所在的目录的环境变量。
启动jboss,通过访问/jamon就可以看到监控的信息了。