JavaMelody简介
JavaMelody是一个方便的Java或JavaEE Web 应用程序监控工具。它允许自动存储由 Web 应用程序的实际操作产生的统计数据和错误,以供以后评估。JavaMelody 很容易集成到应用程序本身中,因此无需安装或修改 Web 服务器配置。
需要注意的是,JavaMelody 工具并不是用来产生数据的,它的功能是对应用程序的实际运行进行测量和统计。它主要基于用户自己使用应用程序的请求统计和演化图的管理。如您所见,它主要用于质量或生产环境。
JavaMelody 在开源许可下分发,可以安全地在生产环境中的应用程序中使用。JavaMelody 很容易集成到大多数应用程序中(不需要配置文件或数据库)并且相当轻量级。JavaMelody 可以安全地激活,因为它在工具和我们的应用程序之间创建了一个几乎透明的层。它不会在性能方面产生任何类型的下降。
安装配置
1. 将 JavaMelody 添加到我们的项目中
<dependency>
<groupId>net.bull.javamelody</groupId>
<artifactId>javamelody-core</artifactId>
<version>1.77.0</version>
</dependency>
<dependency>
<groupId>com.lowagie</groupId>
<artifactId>itext</artifactId>
<version>2.1.7</version>
</dependency>
注意:尽管遵循安装说明,据说该库是可选的,但在执行工具时加载图形时出现错误,因为必须使用 iText 工具
2. 配置
修改 WEB-INF/ web.xml文件以建立以下过滤器,其中包含要监控的配置和资源。
<!--javamelody 监控项目-->
<filter>
<filter-name>javamelody</filter-name>
<filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
<async-supported>true</async-supported>
<init-param>
<!--添加登录验证,默认是不带登录验证的-->
<param-name>authorized-users</param-name>
<param-value>tomcat1:1, tomcat2:2</param-value>
</init-param>
</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>
在这种情况下,我们监控整个应用程序并建立默认配置。
我们还可以通过如下修改Hibernate META-INF/ persistence.xml文件 启用了 SQL 查询监控。
<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 name="hibernate.connection.username">myuser</property>
<property name="hibernate.connection.password">mypassword</property>
3. 访问JavaMelody
http:😕/localhost:8080/context/monitoring
注意: context为上下文名称
JavaMelody提供的信息
3.1 统计图表 包含的图表显示了以下指标随时间的演变:
-
http 查询、sql 查询、jsf 或 strut 操作、jsf 页面或业务外观方法产生的执行次数、平均执行时间和错误百分比。
-
java内存
-
中央处理器 Java。
-
用户会话数和 jdbc 连接数。
3.2 指标统计
预定义计数器(http 查询、sql 查询、jsf 或 strut 操作、jsf 页面或业务外观方法)的统计信息包含在以下信息中:
- 执行次数、平均执行时间、CPU 时间和错误百分比的摘要。
- 这些请求超过某个阈值的时间百分比。
- 对于每个 http 请求,它指示响应流的大小、平均 sql 执行次数和平均 sql 时间。
3.3 系统信息
除了上述所有信息之外,还包括详细的系统信息以及关于 http 错误、日志中的警告和错误、数据缓存(如果使用EHCache )以及批处理作业(如果我们使用Quartz )的统计信息。
通过这种方式我们可以知道机器的主机名,它正在使用的操作系统,JDK版本,使用的服务器的版本号等。即使查看详细信息,我们也可以访问 POM 和包含应用程序中使用的 Maven 依赖项的汇总表。
4. 注意点
在访问 JavaMelody 时,默认情况下,我们不会被要求输入用户名和密码。
在生产环境中使用之前,强烈建议限制对该工具的访问
4.1 通过用户名和密码进行身份验证 web.xml文件中用户密码认证配置示例:
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>Monitoring</realm-name>
</login-config>
<security-role>
<role-name>monitoring</role-name>
</security-role>
<security-constraint>
<web-resource-collection>
<web-resource-name>Monitoring</web-resource-name>
<url-pattern>/monitoring</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>monitoring</role-name>
</auth-constraint>
</security-constraint>
4.2 按 IP 范围进行身份验证
Javamelody 允许我们通过将用户的 IP 地址作为参数的正则表达式来限制访问。这是通过allowed-addr-pattern配置参数实现的。例如:“192.168…|10.0.0.1”允许“192.168..*”范围内的 IP 或网关 10.0.0.1 后面的任何机器。
请记住,如果我们使用像 Apache 这样的http 代理服务器,客户端的 IP 地址将是 Apache 的。因此,在这种情况下,您不应使用 allowed-addr-pattern,或者,如果是这种情况,请不要使用 Apache 访问此页面,或 启用 mod_proxy_ajp以便被监控的服务器知道客户端的 IP 地址。
带有 AJP 的 httpd.conf 示例:
<location /webapp>
ProxyPass ajp://localhost:8080/webapp
</location>
4.3 在这种情况下,需要定义领域和具有“监控”类型角色的用户。例如,如果我们使用带有默认领域的 Tomcat,那么修改 tomcat-users.xml 文件就足够了,如下所示:
<tomcat-users>
<role rolename="monitoring"/>
<user username="monitoring" password="monitoring" roles="monitoring"/>
</tomcat-users>
或者,如果您选择基本安全(BASIC 身份验证),通过用户名和密码,但在 web.xml 文件中没有领域和“安全约束”,只需在上面为 JavaMelody 定义的过滤器: 上面代码已写
<filter>
<filter-name>javamelody</filter-name>
<filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
<init-param>
<param-name>authorized-users</param-name>
<param-value>user1:pwd1, user2:pwd2</param-value>
</init-param>
</filter>