1. 概述

本教程将探索如何使用 New Relic 监控 Java 应用程序。New Relic 是一个强大的可观测性平台,能提供应用性能的实时洞察,包括响应时间、吞吐量、错误率等关键指标。

为了展示 New Relic 的能力,我们将构建并监控一个简单的 Spring Boot 应用。

2. 项目搭建

首先创建一个 Spring Boot 应用 并添加几个 REST 接口。

2.1. REST 控制器

创建一个 REST 控制器 并暴露两个接口:

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Hello, New Relic!";
    }

    @GetMapping("/error")
    public String error() {
        throw new RuntimeException("An error occurred");
    }
}

这个控制器暴露了两个接口:

  • /hello:返回简单消息
  • /error:抛出异常

我们将用这些接口演示 New Relic 如何监控应用性能和错误。

3. 安装 New Relic

要使用 New Relic 监控 Java 应用,需要先 注册账号 并配置 Java Agent。注册免费,后续可根据需求选择付费方案。

注册完成后,可以开始本地设置 Agent

3.1. Maven 依赖

首先添加 newrelic-java Maven 依赖(zip 格式):

<dependency>
    <groupId>com.newrelic.agent.java</groupId>
    <artifactId>newrelic-java</artifactId>
    <version>8.18.0</version>
    <scope>provided</scope>
    <type>zip</type>
</dependency>

这个 zip 包含了 Agent JAR 和运行所需文件。provided 作用域确保 Agent 在运行时可用,但不会打包到应用 JAR 中。

3.2. 添加 unpack-dependencies 目标到 Maven 依赖插件

必须配置 Maven 依赖插件在打包时解压 ZIP 文件

添加 unpack-dependencies 目标解压 New Relic Java Agent:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>3.1.1</version>
    <executions>
        <execution>
            <id>unpack-newrelic</id>
            <phase>package</phase>
            <goals>
                <goal>unpack-dependencies</goal>
            </goals>
            <configuration>
                <includeGroupIds>com.newrelic.agent.java</includeGroupIds>
                <includeArtifactIds>newrelic-java</includeArtifactIds>
                <!-- 可选排除文件 -->
                <excludes>**/newrelic.yml</excludes>
                <overWriteReleases>false</overWriteReleases>
                <overWriteSnapshots>false</overWriteSnapshots>
                <overWriteIfNewer>true</overWriteIfNewer>
                <outputDirectory>${project.build.directory}</outputDirectory>
            </configuration>
        </execution>
    </executions>
</plugin>

构建项目时,Maven 会下载 New Relic Java Agent。打包应用时,Agent 会被解压到 /target 目录,使其在运行时可用。

3.3. 配置 Agent

下载 newrelic.yml 模板文件并编辑以自定义配置。最重要的两个配置项是:

  • app_name:在 New Relic 仪表板中显示的应用名称
  • license_key:从 New Relic API Keys 获取的密钥

最小配置示例:

common: &default_settings
  license_key: 'YOUR_LICENSE_KEY'
  app_name: 'NewRelicApplication'

New Relic 还提供了引导式安装向导完成上述步骤。

4. 运行应用

现在依赖已就绪,我们将 Agent 添加到类路径以监控应用。然后发送几个 API 请求并查看仪表板。

4.1. 启动 Agent

使用 -javaagent JVM 选项运行应用:

如果 JAR 和配置文件不在同一目录,必须用 -Dnewrelic.config.file 指定配置文件路径

启动应用并注入 New Relic 监控:

java -javaagent:path/to/newrelic.jar -Dnewrelic.config.file=path/to/newrelic.yml -jar target/my-app.jar

4.2. 发送请求

使用浏览器或客户端调用 /hello/error 接口生成监控数据。

例如用 curl 发送请求:

curl http://localhost:8080/hello
curl http://localhost:8080/error

多次访问这些接口以产生流量。Agent 会捕获这些请求,包括服务器处理时间和接收时间。

5. 监控仪表板

应用运行并产生流量后,访问 New Relic 仪表板 查看捕获的指标和洞察。仪表板在个人资料的已连接应用列表中可用

下面看几个 New Relic 提供的指标示例。

5.1. 应用概览

选择 APM & Services > Summary 标签查看应用性能概览,包括响应时间、吞吐量、错误率等:

这里可以看到:

  • Web 事务时间
  • 吞吐量
  • 错误率

5.2. 深入 API 性能

可以深入查看特定请求的详细指标。

向下滚动可以看到事务列表:

点击任意事务可查看更详细的指标:

这有助于识别应用瓶颈并按路由优化性能。

5.3. JVM 指标

监控 JVM 指标同样重要。JVM 标签下可查看 CPU 利用率、内存使用、堆内存、非堆内存和垃圾回收时间等指标

还可以查看 JVM 线程使用情况:

这些指标帮助理解应用如何利用系统资源并识别潜在问题。

6. 总结

本教程介绍了如何使用 New Relic 开始监控 Java 应用。我们搭建了简单的 Spring Boot 应用,配置了 New Relic Java Agent,并在 New Relic 仪表板上查看了指标。

New Relic 为监控和优化 Java 应用性能提供了强大平台。通过利用这些洞察,我们可以识别瓶颈、优化性能并确保应用可靠性。


原始标题:Monitor a Java Application With New Relic | Baeldung