JavaMelody是用來在QA和實(shí)際運(yùn)行生產(chǎn)環(huán)境中監(jiān)控Java或Java EE應(yīng)用程序服務(wù)器的一個(gè)開源框架。它不是一個(gè)工具來模擬來自用戶的請(qǐng)求,而是一個(gè)測(cè)量和計(jì)算用戶在實(shí)際操作中應(yīng)用程序的使用情況的工具,并以圖表的形式顯示,圖表可以按天,周,月,年或自定義時(shí)間段查看。
JavaMelody基礎(chǔ)的監(jiān)控包括Java內(nèi)存和Java CPU使用情況,用戶Session數(shù)量,JDBC連接數(shù),和http請(qǐng)求、sql請(qǐng)求、jsp頁面與業(yè)務(wù)接口方法(EJB3、Spring、 Guice)的執(zhí)行數(shù)量,平均執(zhí)行時(shí)間,錯(cuò)誤百分比等。如果要監(jiān)控Jenkins,JIRA,Sonar等等一些,需要另外安裝對(duì)應(yīng)的插件,還有一些高級(jí)文檔用于高級(jí)配置。此文僅以JavaMelody v1.63.0版本演示基礎(chǔ)功能的集成及使用,更多功能請(qǐng)深入研究官方文檔。
1. 相關(guān)鏈接
- 官方文檔 https://github.com/javamelody/javamelody/wiki/UserGuide
- 下載地址 https://github.com/javamelody/javamelody/releases
2. 運(yùn)行環(huán)境要求
- JDK 1.6及以上。
- Servlet api 2.4以上 (或者 JavaEE 1.4),比如Tomcat 5.5 or +, GlassFish v2+, JBoss 4+, Jetty 6+, WebLogic 9+。
3. 基礎(chǔ)集成
- 在下載頁面選擇
javamelody-1.63.0.zip : Zip of project下載之后解壓。 - 解壓后在根目錄里找到
javamelody.jar和jrobin-x.jar,把這兩個(gè)文件拷貝到應(yīng)用程序的WEB-INF/lib中。 - 如果應(yīng)用服務(wù)器兼容Servlet API 3.0比如tomcat 7, glassfish v3或者 jboss 6,一般可以跳過這一步,除非你用了一個(gè)沒有
version="3.0"的web.xml。不然就如下操作:在程序的WEB-INF/web.xml里面,在servlet之前添加如下行,其中注意<async-supported>true</async-supported>和<dispatcher>ASYNC</dispatcher>是需要在Servlet API 3.0里用來支持異步請(qǐng)求的。
<filter>
<filter-name>javamelody</filter-name>
<filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>javamelody</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ASYNC</dispatcher>
</filter-mapping>
<listener>
<listener-class>net.bull.javamelody.SessionListener</listener-class>
</listener>
- 現(xiàn)在可以部署程序啟動(dòng)服務(wù)器,在瀏覽器打開
http://<host>/<context>/monitoring。<host>:為你的主機(jī)名+端口地址,<context>:為你的應(yīng)用配置地址。應(yīng)該可以看到如下界面:
初始化監(jiān)控界面.jpg
4. SQL監(jiān)控集成
-
如果你的JDBC驅(qū)動(dòng)是無數(shù)據(jù)源直接使用的,那你的驅(qū)動(dòng)類應(yīng)該定義為:
net.bull.javamelody.JdbcDriver,然后應(yīng)該加入jdbc屬性為driver,值為真正的dirver class。例如,如果你使用的是hibernate.cfg.xml和mysql (無hibernate.connection.datasource):<property name ="hibernate.connection.driver_class" >net.bull.javamelody.JdbcDriver </property> <property name ="hibernate.connection.driver">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.url"> jdbc:mysql://localhost:3306/myschema </property> <property nam="hibernate.connection.username">myuser</property> <property name="hibernate.connection.password">mypassword</property>只要保證原有的
connection.driver是真實(shí)的驅(qū)動(dòng),上面添加一個(gè)參數(shù)connection.driver_class是javamelody的那個(gè)jdbc驅(qū)動(dòng)即可。 -
如果使用了數(shù)據(jù)源,而且數(shù)據(jù)源又定義在spring的配置文件里面,那么數(shù)據(jù)源也是可以通過spring的后置處理器來監(jiān)控。如果使用spring,是不需要額外設(shè)置驅(qū)動(dòng)類的。前提是,需要在web.xml指定加載的spring配置文件。比如在web.xml中配置了
org.springframework.web.context.ContextLoaderListener這個(gè)監(jiān)聽器,那在contextConfigLocation的參數(shù)里需要如下配置,再運(yùn)行程序然后去monitoring頁面查看應(yīng)該已經(jīng)有sql的統(tǒng)計(jì)了:<context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:monitoring-spring.xml classpath:applicationContext.xml </param-value> </context-param>

注意事項(xiàng):確保
monitoring-spring.xml被當(dāng)作配置文件第一個(gè)加載。如果應(yīng)用中springAOP或者@Autowired的配置與monitoring-spring.xml中的配置有沖突,那么使用monitoring-spring-datasource.xml文件替代monitoring-spring.xml就可以了,這個(gè)文件僅僅包含一個(gè)數(shù)據(jù)源的后置處理器和SpringDataSourceFactoryBean的一個(gè)例子。其中monitoring-spring.xml和monitoring-spring-datasource.xml文件都在解壓目錄的src\main\resources\net\bull\javamelody目錄下,需要將對(duì)應(yīng)使用的文件拷貝到classpath目錄下。
5. Spring方法級(jí)監(jiān)控
- 前提是使用
monitoring-spring.xml文件(不做修改),然后在需要監(jiān)控的方法上使用@MonitoredWithSpring注解即可。另外一種方式是修改monitoring-spring.xml文件內(nèi)容如下:
<bean id="monitoringAdvisor" class="net.bull.javamelody.MonitoringSpringAdvisor">
<property name="pointcut">
<bean class="org.springframework.aop.support.JdkRegexpMethodPointcut">
<!-- 監(jiān)控com.system.service下所有類的方法 -->
<property name="pattern" value="com.system.service.*.*" />
</bean>
</property>
</bean>

6. 其他內(nèi)容
- javamelody監(jiān)控?cái)?shù)據(jù)存放的目錄位于 C:\Users\xxx\AppData\Local\Temp\javamelody。可以將對(duì)應(yīng)項(xiàng)目的目錄刪除,再重啟服務(wù)器可以看到數(shù)據(jù)已經(jīng)清空。
