JavaMelody 简介

banq

在本文中,我们介绍了监控库 JavaMelody,并讨论了其安装和设置。我们还介绍了一些性能和安全注意事项,并指出了一些使用场景。更多屏幕截图和文档可在JavaMelody 的 GitHub 主页上找到。还提供现场演示。

作为应用程序开发人员,我们通常会尽可能高效地构建复杂的业务逻辑。但是,一旦这些应用程序投入生产,我们还希望收集应用程序性能的运行时统计信息,以帮助进一步改进和故障排除。

应用程序日志记录可能是一种选择,但这仍然无法全面反映应用程序的性能。为此,我们需要使用一些工具来收集运行时统计信息和监控。

在本文中,我们将快速了解一个这样的库 - JavaMelody。我们将探索它的优势,并了解它如何成为监控 Java 应用程序的有效解决方案。我们还将介绍安装和一些基本操作。

主要特点
JavaMelody是一个可嵌入的开源库,为 Java 应用程序提供监控功能。它轻量且易于集成。

该库的主要目标是提供一种方法来测量和计算 QA 和生产环境中实时操作的统计数据。它专注于收集和可视化统计数据,以帮助做出明智的决策并提高应用程序性能。

其主要特点包括:

  • 全面监控:JavaMelody 跟踪各种数据点,例如 HTTP 请求、SQL 查询、CPU 使用率、已用内存等,以进行性能分析。
  • 性能洞察:它提供有关几个有用指标的数据,例如平均响应时间、执行次数和错误百分比,从而有助于识别性能瓶颈和延迟的根本原因。
  • 趋势图:发展图显示可自定义时间范围内的执行次数、响应时间、内存使用率、CPU 负载和用户会话等指标。这允许系统管理员回顾过去,并在出现问题时帮助分析根本原因。
  • 错误和警告跟踪:监控 HTTP 错误、日志警告和 SQL 错误。
  • 可选收集服务器:JavaMelody 可以设置为集中来自多个应用程序或同一应用程序的多个实例的数据。这在集群环境中尤其有用,因为它允许将存储和报告生成卸载到单独的服务器。

安装和设置
对于大多数情况来说,JavaMelody 的安装和设置都非常简单。JavaMelody 还提供了多个插件选项,可用于 Jenkins、Spring Boot 和 Atlassian 的 Jira 等工具。在这里,我们考虑 Java Web 应用程序存档 (.war) 的典型设置。

添加依赖项
首先,我们需要 在pom.xml中向我们的 Maven 项目添加javamelody-core JAR 依赖项:

<dependency>
    <groupId>net.bull.javamelody</groupId>
    <artifactId>javamelody-core</artifactId>
    <version>2.2.0</version>
</dependency>

对于不使用 Maven 等依赖管理工具的项目,我们也可以通过简单地将javamelody.jar和jrobin-1.5.9.jar添加到WEB-INF/lib目录中来实现此目的。

某些选项(例如 PDF 报告生成)可能需要其他依赖项。我们可以在 JavaMelody用户指南中找到与这些依赖项相关的信息。

配置web.xml
对于大多数现代 Java Web 应用程序,此步骤是不必要的。所谓现代,是指在web.xml中使用 Servlet 3.0 或更高版本以及兼容的应用服务器(例如 Tomcat 7.0 及更高版本)的应用程序。

如果我们使用的是旧版 servlet 或者web.xml 中没有提到version=”3.0″,那么我们需要将 JavaMelody 过滤器添加到我们的web.xml中:

<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>

请注意,需要trueASYNC来支持使用 Servlet API 3.0 的异步请求。

访问监控仪表板
现在,我们已经使用 JAR 文件依赖项和web.xml 配置部署了应用程序。我们可以在以下 URL 立即找到监控仪表板:

http://<host>:<port>/<context>/monitoring

当然,我们需要用适合我们应用程序的值替换  。

其他配置和高级主题
到目前为止,我们仅介绍了 JavaMelody 的基本设置。它提供了其他几种配置方式,例如 Spring Boot、Jira、Jenkins、Bamboo、Sonar 和 Liferay 的插件,如文档中所述。

还有其他几个配置选项,例如 JDBC 监控、PDF 报告生成、电子邮件报告、批处理作业监控(Quartz)等等。这些配置选项的具体内容超出了本文的范围。但是,根据我们特定的应用程序要求,我们可能需要探索这些选项。

安全
到目前为止,我们还没有讨论有关监控 URL 安全性的任何内容。JavaMelody 监控页面不包含任何密码。即便如此,我们看到 JavaMelody监控 URL 暴露了大量有关应用程序 API 的使用信息,因此,在生产环境中必须保护该 URL。

对于许多环境,例如 Jenkins、JIRA、Confluence、Bamboo 或 Liferay 插件,我们可以使用内置应用程序角色来实现这一点。

应用程序中现有的基于角色的安全性通常可以扩展以保护 JavaMelody 监控页面。我们希望只有具有特定角色的用户才能访问此 URL。为了实现这一点,我们设置了一个监控角色并保护 URI /monitoring。有很多方法可以做到这一点。我们可以选择最适合我们应用程序的方式。

在此示例中,我们考虑使用 Tomcat 进行基本身份验证。首先,我们需要在 web.xml 中为/monitoring URL设置基本身份验证:

<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,我们可以修改conf/tomcat-users.xml文件的内容:

<tomcat-users> 
    <role rolename="monitoring"/>
    <user username="monitoring" password="monitoring" roles="monitoring"/>
</tomcat-users>

库包的用户指南中提供了更多安全信息。

性能开销
值得注意的是,JavaMelody 的性能开销极小。这使得它适合在生产环境中持续使用。

与其他监控工具不同,它仅监控统计数据而不是分析。这样可以避免其他监控工具常见的繁重仪表和数据库日志记录。这种低接触监控方法可降低 CPU、内存和 I/O 使用率。JavaMelody 收集许多统计数据,包括 HTTP、JDBC 和可选的 Spring/EJB3。

此外,JavaMelody 可以集中用于较大的应用程序,从而进一步减少本地内存和存储需求。我们可以回顾一下这个讨论,以了解有关 JavaMelody 性能开销的一些要点。但是,在我们的应用程序中使用它时,在将配置推广到生产之前,检查预生产环境中的性能统计数据非常重要。

特点:

  • 各种图表让应用监控人员可以立即了解过去一周内应用的性能表现。
  • 另一个重要的统计视图是HTTP统计信息视图,这有助于我们从应用程序性能角度识别最需要关注的 API 调用,并有助于推动我们产品的非功能性需求路线图。
  • 还有许多其他视图,详细描述这些视图超出了本文的范围。所有上述图像都是 JavaMelody wiki 页面的一部分。