你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

如何使用 Elastic APM Java 代理监视 Spring Boot 应用

注意

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

标准消耗和专用计划将于 2024 年 9 月 30 日开始弃用,并在六个月后完全关闭。 建议转换到 Azure 容器应用。 有关详细信息,请参阅将 Azure Spring Apps 标准消耗和专用计划迁移到 Azure 容器应用

本文适用于:✅ 基本计划/标准计划 ❎ 企业计划

本文将介绍如何使用 Elastic APM 代理监视在 Azure Spring Apps 中运行的 Spring Boot 应用程序。

使用 Elastic Observability 解决方案,可以实现统一的可观测性,从而实现以下目的:

  • 使用 Elastic APM Java 代理并将持久性存储与 Azure Spring Apps 配合使用来监视应用。
  • 使用诊断设置将 Azure Spring Apps 日志发送到 Elastic。 有关详细信息,请参阅使用诊断设置通过 Elastic (ELK) 分析日志

以下视频介绍如何使用 Elastic 为 Spring Boot 应用程序实现统一的可观测性。


先决条件

部署 Spring Petclinic 应用程序

本文使用 Spring Petclinic 示例来演练所需的步骤。 使用以下步骤部署示例应用程序:

  1. 按照使用 Azure Spring Apps 和 MySQL 部署 Spring Boot 应用中的步骤操作,直到到达部署 Spring Boot 应用程序并设置环境变量部分。

  2. 通过以下命令使用用于 Azure CLI 的 Azure Spring Apps 扩展,以创建要在 Azure Spring Apps 中运行的应用程序:

    az spring app create \
       --resource-group <your-resource-group-name> \
       --service <your-Azure-Spring-Apps-instance-name> \
       --name <your-app-name> \
       --is-public true
    

为 Azure Spring Apps 启用自定义持久性存储

使用以下步骤启用自定义持久性存储:

  1. 按照如何在 Azure Spring Apps 中启用自己的持久性存储中的步骤操作。

  2. 使用以下 Azure CLI 命令为 Azure Spring Apps 应用添加持久性存储。

    az spring app append-persistent-storage \
       --resource-group <your-resource-group-name> \
       --service <your-Azure-Spring-Apps-instance-name> \
       --name <your-app-name> \
       --persistent-storage-type AzureFileVolume \
       --share-name <your-Azure-file-share-name> \
       --mount-path <unique-mount-path> \
       --storage-name <your-mounted-storage-name>
    

激活 Elastic APM Java 代理

在继续操作之前,需要准备好 Elastic APM 服务器连接信息(已假设你在 Azure 上部署了 Elastic)。 有关详细信息,请参阅如何部署和管理 Microsoft Azure 上的 Elastic。 若要获取此信息,请执行以下步骤:

  1. 在Azure 门户中,转到 Elastic 部署的“概述”页,然后选择“管理 Elastic Cloud 部署”。

    Azure 门户“Elasticsearch (Elastic Cloud)”页面的屏幕截图。

  2. 在 Elastic Cloud 控制台上的你的部署下,选择“APM & Fleet”部分,以获取 Elastic APM 服务器终结点和机密令牌

    Elastic 的“APM & Fleet”页面的屏幕截图,其中突出显示了“复制终结点”和“APM 服务器机密令牌”。

  3. Maven Central 下载 Elastic APM Java 代理。

    Maven Central 屏幕截图,其中突出显示了 jar 下载。

  4. 将 Elastic APM 代理上传到之前启用的自定义持久性存储。 转到“Azure 文件共享”并选择“上传”以添加代理 JAR 文件。

    Azure 门户的屏幕截图,其中显示了“文件共享”页面的“上传文件”窗格。

  5. 获得 Elastic APM 终结点和机密令牌后,请在部署应用程序时使用以下命令激活 Elastic APM Java 代理。 占位符 <agent-location> 表示 Elastic APM Java 代理的装载存储位置。

    az spring app deploy \
        --name <your-app-name> \
        --artifact-path <unique-path-to-your-app-jar-on-custom-storage> \
        --jvm-options='-javaagent:<elastic-agent-location>' \
        --env ELASTIC_APM_SERVICE_NAME=<your-app-name> \
              ELASTIC_APM_APPLICATION_PACKAGES='<your-app-package-name>' \
              ELASTIC_APM_SERVER_URL='<your-Elastic-APM-server-URL>' \
              ELASTIC_APM_SECRET_TOKEN='<your-Elastic-APM-secret-token>'
    

自动预配

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

使用 Terraform 自动预配

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

resource "azurerm_spring_cloud_java_deployment" "example" {
  ...
  jvm_options = "-javaagent:<elastic-agent-location>"
  ...
    environment_variables = {
      "ELASTIC_APM_SERVICE_NAME"="<your-app-name>",
      "ELASTIC_APM_APPLICATION_PACKAGES"="<your-app-package>",
      "ELASTIC_APM_SERVER_URL"="<your-Elastic-APM-server-URL>",
      "ELASTIC_APM_SECRET_TOKEN"="<your-Elastic-APM-secret-token>"
  }
}

使用 Bicep 文件自动完成预配

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

deploymentSettings: {
  environmentVariables: {
    ELASTIC_APM_SERVICE_NAME='<your-app-name>',
    ELASTIC_APM_APPLICATION_PACKAGES='<your-app-package>',
    ELASTIC_APM_SERVER_URL='<your-Elastic-APM-server-URL>',
    ELASTIC_APM_SECRET_TOKEN='<your-Elastic-APM-secret-token>'
  },
  jvmOptions: '-javaagent:<elastic-agent-location>',
  ...
}

使用 ARM 模板自动预配

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

"deploymentSettings": {
  "environmentVariables": {
    "ELASTIC_APM_SERVICE_NAME"="<your-app-name>",
    "ELASTIC_APM_APPLICATION_PACKAGES"="<your-app-package>",
    "ELASTIC_APM_SERVER_URL"="<your-Elastic-APM-server-URL>",
    "ELASTIC_APM_SECRET_TOKEN"="<your-Elastic-APM-secret-token>"
  },
  "jvmOptions": "-javaagent:<elastic-agent-location>",
  ...
}

升级 Elastic APM Java 代理

若要规划升级,请参阅升级版本(适用于 Azure 上的 Elastic Cloud)以及重大更改(适用于 APM)。 升级 APM 服务器后,将 Elastic APM Java 代理 JAR 文件上传到自定义永久性存储中。 然后,使用更新后的 JVM 选项重启应用,该选项指向升级后的 Elastic APM Java 代理 JAR。

使用 Elastic APM 监视应用程序和指标

执行以下步骤监视应用程序和指标:

  1. 在Azure 门户中,转到 Elastic 部署的“概述”页,然后选择 Kibana 链接。

    Azure 门户的屏幕截图,其中显示了 Elasticsearch 页,并突出显示了“部署 URL”Kibana 链接。

  2. Kibana 打开后,在搜索栏中搜索“APM”,然后选择“APM”。

    Elastic/Kibana 的屏幕截图,其中显示了 APM 搜索结果。

Kibana APM 是特选的应用程序,用于支持应用程序监视工作流。 可在此处查看服务中对持续时间影响最大的请求/响应时间、吞吐量、事务等综合详细信息。

Elastic/Kibana 的屏幕截图,其中显示了“APM 服务概述”页面。

可以在特定事务中向下钻取,以了解特定于事务的详细信息,例如分布式跟踪。

Elastic/Kibana 的屏幕截图,其中显示了“APM 服务事务”页面。

Elastic APM Java 代理还会从 Kibana 应用提供的 Azure Spring Apps 应用中捕获 JVM 指标,供用户进行故障排除。

Elastic/Kibana 的屏幕截图,其中显示了“APM 服务 JVM”页面。

使用 Elastic 解决方案中的内置 AI 引擎,还可以在 Azure Spring Apps 服务上启用“异常情况检测”并选择适当的操作,例如 Teams 通知、JIRA 问题的创建、基于 Webhook 的 API 调用等。

Elastic/Kibana 屏幕截图,其中显示了包含“创建规则”窗格的“APM 服务”页面,并突出显示了“操作”。

后续步骤