什么是 JavaMelody
JavaMelody是一个方便的Java或JavaEE Web 应用程序监控工具。它允许自动存储由 Web 应用程序的实际操作产生的统计数据和错误,以供以后评估。JavaMelody 很容易集成到应用程序本身中,因此无需安装或修改 Web 服务器配置。
需要注意的是,JavaMelody 工具并不是用来产生数据的,它的功能是对应用程序的实际运行进行测量和统计。它主要基于用户自己使用应用程序的请求统计和演化图的管理。如您所见,它主要用于质量或生产环境。
JavaMelody 在开源许可下分发,可以安全地在生产环境中的应用程序中使用。JavaMelody 很容易集成到大多数应用程序中(不需要配置文件或数据库)并且相当轻量级。JavaMelody 可以安全地激活,因为它在工具和我们的应用程序之间创建了一个几乎透明的层。它不会在性能方面产生任何类型的下降。
在本文中,我们将简要分析JavaMelody的安装、配置和使用。
JavaMelody 为我们提供了哪些信息?
正如我们在介绍中所讨论的,JavaMelody 是一种工具,用于根据用户的使用情况测量和计算有关应用程序实际性能的统计信息。
它允许优化应用程序,有助于:
- 获取有关平均响应时间和执行次数的数据。
- 在趋势不好时做出决定,避免出现重大问题。
- 找出响应时间最有限的原因。
- 验证优化产生的实际改进。
统计图表
包含的图表显示了以下指标随时间的演变:
- http 查询、sql 查询、jsf 或 strut 操作、jsf 页面或业务外观方法产生的执行次数、平均执行时间和错误百分比。
- java内存
- 中央处理器 Java。
- 用户会话数和 jdbc 连接数。
指标统计
预定义计数器(http 查询、sql 查询、jsf 或 strut 操作、jsf 页面或业务外观方法)的统计信息包含在以下信息中:
- 执行次数、平均执行时间、CPU 时间和错误百分比的摘要。
- 这些请求超过某个阈值的时间百分比。
- 对于每个 http 请求,它指示响应流的大小、平均 sql 执行次数和平均 sql 时间。
JavaMelody:临时统计表
系统信息
除了上述所有信息之外,还包括详细的系统信息以及关于 http 错误、日志中的警告和错误、数据缓存(如果使用EHCache )以及批处理作业(如果我们使用Quartz )的统计信息。
JavaMelody:系统信息
通过这种方式我们可以知道机器的主机名,它正在使用的操作系统,JDK版本,使用的服务器的版本号等。即使查看详细信息,我们也可以访问 POM 和包含应用程序中使用的 Maven 依赖项的汇总表。
您可以在项目的官方网站上看到在线演示。
JavaMelody的安装和配置
JavaMelody 的优点之一是它的安装非常简单。对于基本的安装和配置,我们只需遵循以下步骤:
将 JavaMelody 添加到我们的项目中
我们建议通过在我们的项目中定义 Maven 依赖项来下载 JavaMelody。如果我们的项目不是 Mavenized,则需要从项目网站下载文件,解压缩文件并将 javamelody-xxxjar 和 jrobin.xxxjar 文件复制到 WEB-INF/lib 目录。
<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 工具。
配置 JavaMelody
下载 JavaMelody 后,需要修改 WEB-INF/ web.xml文件以建立以下过滤器,其中包含要监控的配置和资源。
<filter>
<filter-name>monitoring</filter-name>
<filter-class>net.bull.javamelody.MonitoringFilter</filter-class>
<async-supported>true</async-supported>
</filter>
<filter-mapping>
<filter-name>monitoring</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>
如果你想知道如何监控各种资源,如何添加安全或如何添加其他监控插件,可以参考官方JavaMelody指南。
如何访问 JavaMelody
我们可以通过以下方式访问该工具:
http:://host:port/context/monitoring
- host:port – 应用程序所在的名称或 IP,例如localhost:8080。
- context – 它是我们的 Web 应用程序的上下文的名称。
在访问 JavaMelody 时,默认情况下,我们不会被要求输入用户名和密码。在生产环境中使用之前,强烈建议限制对该工具的访问。
如何限制对 JavaMelody 的访问
可以通过定义允许的 IP 地址范围或使用用户角色来设置安全性。
按 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>
通过用户名和密码进行身份验证
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>
<!-- if SSL enabled (SSL and certificate must then be configured in the server)
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
-->
</security-constraint>
在这种情况下,需要定义领域和具有“监控”类型角色的用户。例如,如果我们使用带有默认领域的 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>