如何使用 New Relic Java 代理监视 Spring Boot 应用

注意

基本、标准和企业计划将从 2025 年 3 月中旬开始弃用,停用期为 3 年。 建议转换到 Azure 容器应用。 有关详细信息,请参阅 Azure Spring Apps 停用公告

标准消耗和专用计划将于 2024 年 9 月 30 日开始弃用,并在六个月后完全关闭。 建议转换到 Azure 容器应用。

本文向你展示了如何使用 New Relic Java 代理来监视 Azure Spring Apps 中的 Spring Boot 应用程序。

通过 New Relic Java 代理,可以:

  • 使用 New Relic Java 代理。
  • 使用环境变量配置 New Relic Java 代理。
  • 从 New Relic 仪表板查检查所有监视数据。

先决条件

激活 New Relic Java 进程内代理

使用以下过程访问该代理:

  1. 创建 Azure Spring Apps 的实例。

  2. 创建应用程序。

    az spring app create \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-instance-name> \
        --name <app-name> \
        --is-public true \
    
  3. 使用 New Relic 代理和环境变量创建部署。

    az spring app deploy \
        --resource-group <resource-group-name> \
        --service <Azure-Spring-Apps-instance-name> \
        --name <app-name> \
        --artifact-path app.jar \
        --jvm-options="-javaagent:/opt/agents/newrelic/java/newrelic-agent.jar" \
        --env NEW_RELIC_APP_NAME=appName \
              NEW_RELIC_LICENSE_KEY=newRelicLicenseKey
    

Azure Spring Apps 会将 New Relic Java 代理预安装到 /opt/agents/newrelic/java/newrelic-agent.jar。 客户可激活应用程序的 JVM 选项中的代理,也可使用 New Relic Java 代理环境变量配置代理。

Azure 门户

还可通过以下过程从 Azure 门户激活此代理。

  1. 在 Azure Spring Apps 实例的导航窗格中选择“应用”。

    Azure 门户的屏幕截图,其中显示了 Azure Spring Apps 实例的“应用”页。

  2. 从列表中选择应用程序,然后在导航窗格中选择“配置”。

  3. 使用“常规设置”选项卡更新 JVM 选项之类的值。

    Azure 门户的屏幕截图,显示了应用的“配置”页,其中选择了“常规设置”选项卡。

  4. 选择“环境变量”以添加或更新应用程序使用的变量。

    Azure 门户的屏幕截图,显示了应用的“配置”页,其中选择了“环境变量”选项卡。

  5. 查看 New Relic 仪表板中应用程序 API/网关的“摘要”页面。

    显示 API 网关摘要页面的 New Relic 仪表板的屏幕截图。

  6. 查看 New Relic 仪表板中应用程序客户服务的“摘要”页面。

    显示“客户服务”页面的 New Relic 仪表板的屏幕截图。

  7. 查看 New Relic 仪表板中的“服务映射”页面。

    显示“服务映射”页面的 New Relic 仪表板的屏幕截图。

  8. 查看 New Relic 仪表板中应用程序的 JVM 页面。

    显示“JVM”页面的 New Relic 仪表板的屏幕截图。

  9. 查看 New Relic 仪表板中的应用程序配置文件。

    显示“应用程序配置文件”页面的 New Relic 仪表板的屏幕截图。

自动预配

还可以使用 Terraform、Bicep 或 Azure 资源管理器模板(ARM 模板)运行预配自动化管道。 此管道可以提供完整的无干预体验,用于检测和监视你创建和部署的任何新应用程序。

使用 Terraform 自动预配

若要在 Terraform 模板中配置环境变量,请将以下代码添加到模板中,并将“<...>”占位符替换为自己的值。 有关详细信息,请参阅管理活动的 Azure Spring Apps 部署

resource "azurerm_spring_cloud_java_deployment" "example" {
  ...
  jvm_options = "-javaagent:/opt/agents/newrelic/java/newrelic-agent.jar"
  ...
    environment_variables = {
      "NEW_RELIC_APP_NAME": "<app-name>",
      "NEW_RELIC_LICENSE_KEY": "<new-relic-license-key>"
  }
}

使用 Bicep 文件自动完成预配

若要在 Bicep 文件中配置环境变量,请将以下代码添加到该模板,并将 <...> 占位符替换为你自己的值。 有关详细信息,请参阅 Microsoft.AppPlatform Spring/apps/deployments

deploymentSettings: {
  environmentVariables: {
    NEW_RELIC_APP_NAME : '<app-name>',
    NEW_RELIC_LICENSE_KEY : '<new-relic-license-key>'
  },
  jvmOptions: '-javaagent:/opt/agents/newrelic/java/newrelic-agent.jar',
  ...
}

使用 ARM 模板自动预配

若要在 ARM 模板中配置环境变量,请将以下代码添加到模板中,并将“<...>”占位符替换为自己的值。 有关详细信息,请参阅 Microsoft.AppPlatform Spring/apps/deployments

"deploymentSettings": {
  "environmentVariables": {
    "NEW_RELIC_APP_NAME" : "<app-name>",
    "NEW_RELIC_LICENSE_KEY" : "<new-relic-license-key>"
  },
  "jvmOptions": "-javaagent:/opt/agents/newrelic/java/newrelic-agent.jar",
  ...
}

将应用程序日志转发到 New Relic

New Relic 代理可以直接从应用收集应用程序日志,并将其转发到 New Relic。 有关详细信息,请参阅将日志转发到 New Relic上下文中的 APM 日志

查看 New Relic Java 代理日志

默认情况下,Azure Spring Apps 会将 New Relic Java 代理的日志输出到 STDOUT。 这些日志将与应用程序日志混合。 可以从应用程序日志中找到显式代理版本。

也可从以下位置获取 New Relic 代理的日志:

  • Azure Spring Apps 日志
  • Azure Spring Apps Application Insights
  • Azure Spring Apps LogStream

可以使用 New Relic 提供的某些环境变量来配置新代理的日志记录,例如用于控制日志级别的 NEW_RELIC_LOG_LEVEL。 有关详细信息,请参阅 New Relic 日志记录配置

注意

除非 New Relic 支持要求你使用 finerfinest否则请勿执行此操作。 这些日志记录级别可能会产生过多的开销。 在大多数情况下,请使用 info

注意

强烈建议不要替代由 Azure Spring Apps 为 New Relic 提供的日志记录默认行为。 如果这样做,上述日志记录方案将被阻止,并且日志文件可能会丢失。 例如,不应将以下环境变量传递给应用程序。 在重启或重新部署应用程序后,日志文件可能会丢失。

  • NEW_RELIC_LOG
  • NEW_RELIC_LOG_FILE_PATH

New Relic Java 代理更新/升级

New Relic Java 代理会定期更新/升级 JDK。 代理更新/升级可能会影响以下方案。

  • 在更新/升级之前使用 New Relic Java 代理的现有应用程序将保持不变。
  • 更新/升级前使用 New Relic Java 代理的现有应用程序需要重启或重新部署,才能使用新版本的 New Relic Java 代理 。
  • 在更新/升级后创建的新应用程序将使用新版本的 New Relic Java 代理。

Vnet 注入实例出站流量配置

对于 Azure Spring Apps 的 vnet 注入实例,需要确保为 New Relic Java 代理正确配置出站流量。 有关详细信息,请参阅 New Relic 的网络

后续步骤

在 Azure Spring Apps 中使用 Application Insights Java 进程内代理