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

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

注意

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

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

使用 Spring Boot 本机映像应用程序时,请在 Spring Boot 本机映像 Java 应用程序中使用 Azure Monitor OpenTelemetry Distro/ Application Insights 项目,而不是 Application Insights Java 代理。

本文适用于:✔️ 标准消耗和专用计划(预览版)✔️ 基本/标准计划 ✔️ 企业计划

本文介绍如何在 Azure Spring Apps 中使用 Application Insights Java 代理来监视应用程序。

使用此功能,你可以:

  • 通过不同的筛选器搜索跟踪数据。
  • 查看 Spring 应用程序的依赖关系映射。
  • 检查请求性能。
  • 监视实时指标。
  • 检查请求失败。
  • 检查应用程序指标。
  • 检查应用程序日志。

Application Insights 提供许多可观察的视角,包括:

  • 应用程序映射
  • 性能
  • 失败
  • 指标
  • 实时指标
  • 可用性
  • 日志

使用 Application Insights 功能

启用 Application Insights 功能后,你可以:

  • 在导航窗格中,选择“Application Insights”以查看 Application Insights 的“概述”页。 “概述”页显示所有正在运行的应用程序的概述。

  • 选择“应用程序映射”以查看在应用程序之间进行的调用的状态。

    Azure 门户 Application Insights 的屏幕截图,其中显示了“应用程序映射”页。

  • 选择客户服务与 petclinic 之间的链接以查看更多详细信息,例如 SQL 查询。

  • 选择一个终结点,以查看所有对该终结点发出请求的应用程序。

  • 在导航窗格中,选择“性能”以查看所有应用程序的操作的性能数据、依赖项和角色。

    Azure 门户 Application Insights 的屏幕截图,其中显示了“性能”页。

  • 在导航窗格中,选择“失败”以查看应用程序发生的任何意外失败或异常。

    Azure 门户 Application Insights 的屏幕截图,其中显示了“失败”页。

  • 在导航窗格中,选择“指标”并选择命名空间,以查看 Spring Boot 指标和自定义指标(如果有)。

    Azure 门户 Application Insights 的屏幕截图,其中显示了“指标”页。

  • 在导航窗格中,选择“实时指标”以查看不同维度的实时指标。

    Azure 门户 Application Insights 的屏幕截图,其中显示了“实时性能”页。

  • 在导航窗格中,选择“可用性”以通过创建 Application Insights 中的可用性测试来监视 Web 应用的可用性和响应能力。

    Azure 门户 Application Insights 的屏幕截图,其中显示了“可用性”页。

  • 在导航窗格中,选择“日志”以查看所有应用程序的日志,或按 cloud_RoleName 筛选某一个应用程序的日志。

    Azure 门户 Application Insights 的屏幕截图,其中显示了“日志”页。

使用 Azure 门户管理 Application Insights

使用以下过程启用 Java 进程内代理。

  1. 转到服务实例的“服务 | 概述”页,然后在“监视”部分选择“Application Insights”

  2. 选择“启用 Application Insights”以在 Azure Spring Apps 中启用 Application Insights。

  3. 选择 Application Insights 的一个现有实例,或者创建一个新实例。

  4. 启用“Application Insights”后,可以配置一个可选采样率(默认值为 10.0%)。

    Azure 门户的屏幕截图,其中显示了 Azure Spring Apps 的 Application Insights 页并突出显示了“启用 Application Insights”复选框。

  5. 选择“保存”以保存更改。

备注

请不要在不同的 Azure Spring Apps 实例中使用同一个 Application Insights 实例,否则会看到混合的数据。

可以使用门户来检查或更新 Application Insights 中的当前设置。

使用 Azure 门户启用 Application Insights

  1. 选择“Application Insights”

  2. 通过选择“编辑绑定”或“已取消绑定”超链接来启用 Application Insights

    Azure 门户的屏幕截图,其中显示了 Azure Spring Apps 实例,以及 Application Insights 页和“编辑绑定”选项。

  3. 编辑“Application Insights”或“采样率”,然后选择“保存”

禁用 Application Insights

  1. 选择“Application Insights”

  2. 选择“取消绑定”以禁用 Application Insights

    Azure 门户的屏幕截图,其中显示了 Azure Spring Apps 实例,以及 Application Insights 页和“取消绑定”选项。

更改 Application Insights 设置

选择“Application Insights”列下的名称打开“Application Insights”部分

Azure 门户的屏幕截图,其中显示了 Azure Spring Apps 实例,以及 Application Insights 页。

在“生成服务”中编辑 Application Insights 生成包绑定

若要在“生成服务”中检查和更新 Application Insights 生成包绑定的当前设置,请执行以下步骤:

  1. 选择“生成服务”。
  2. 选择你的生成器。
  3. 在“绑定”列下选择“编辑”

在“绑定类型”列下面列出的“ApplicationInsights”项中可以找到 Application Insights 设置

  1. 选择“已绑定”超链接或选择省略号图标下的“编辑绑定”,以打开并编辑 Application Insights 生成包绑定

    Azure 门户的屏幕截图,其中显示了默认生成器窗格的“编辑绑定”。

  2. 编辑绑定设置,然后选择“保存”

    Azure 门户的屏幕截图,其中显示了“编辑绑定”窗格。

使用 Azure CLI 管理 Application Insights

可以使用 Azure CLI 命令管理 Application Insights。 在以下命令中,请务必将 <placeholder> 文本替换为所述的值。 <service-instance-name> 占位符表示 Azure Spring Apps 实例的名称。

启用 Application Insights

若要在创建 Azure Spring Apps 实例时配置 Application Insights,请使用以下命令。 对于 app-insights 参数,可以指定 Application Insights 名称或资源 ID。

az spring create \
    --resource-group <resource-group-name> \
    --name "service-instance-name" \
    --app-insights <name-or-resource-ID> \
    --sampling-rate <sampling-rate>
az spring create \
    --resource-group <resource-group-name> \
    --name "service-instance-name" \
    --app-insights <name-or-resource-ID> \
    --sampling-rate <sampling-rate> \
    --sku Enterprise

还可以使用 Application Insights 连接字符串(首选)或检测密钥,如以下示例中所示。

az spring create \
    --resource-group <resource-group-name> \
    --name <service-instance-name> \
    --app-insights-key <connection-string-or-instrumentation-key> \
    --sampling-rate <sampling-rate>
az spring create \
    --resource-group <resource-group-name> \
    --name <service-instance-name> \
    --app-insights-key <connection-string-or-instrumentation-key> \
    --sampling-rate <sampling-rate> \
    --sku Enterprise

禁用 Application Insights

若要在创建 Azure Spring Apps 实例时禁用 Application Insights,请使用以下命令:

az spring create \
    --resource-group <resource-group-name> \
    --name <service-instance-name> \
    --disable-app-insights
az spring create \
    --resource-group <resource-group-name> \
    --name <service-instance-name> \
    --disable-app-insights \
    --sku Enterprise

检查 Application Insights 设置

若要检查现有 Azure Spring Apps 实例的 Application Insights 设置,请使用以下命令:

az spring app-insights show \
    --resource-group <resource-group-name> \
    --name <service-instance-name>

更新 Application Insights

若要将 Application Insights 更新为使用连接字符串(首选)或检测密钥,请使用以下命令:

az spring app-insights update \
    --resource-group <resource-group-name> \
    --name <service-instance-name> \
    --app-insights-key <connection-string-or-instrumentation-key> \
    --sampling-rate <sampling-rate>

若要将 Application Insights 更新为使用资源名称或 ID,请使用以下命令:

az spring app-insights update \
    --resource-group <resource-group-name> \
    --name <service-instance-name> \
    --app-insights <name-or-resource-ID> \
    --sampling-rate <sampling-rate>

使用 update 命令禁用 Application Insights

若要在现有 Azure Spring Apps 实例上禁用 Application Insights,请使用以下命令:

az spring app-insights update \
    --resource-group <resource-group-name> \
    --name <service-instance-name> \
    --disable

管理 Application Insights 生成包绑定

本部分仅适用于企业计划,并提供为上一部分做出补充的说明。

Azure Spring Apps 企业计划使用生成包绑定将 Azure Application Insights 与类型 ApplicationInsights 相集成。 有关详细信息,请参阅如何配置 APM 集成和 CA 证书

若要创建 Application Insights 生成包绑定,请使用以下命令:

az spring build-service builder buildpack-binding create \
    --resource-group <your-resource-group-name> \
    --service <your-service-instance-name> \
    --name <your-binding-name> \
    --builder-name <your-builder-name> \
    --type ApplicationInsights \
    --properties sampling-percentage=<your-sampling-percentage> \
                 connection-string=<your-connection-string>

若要列出所有生成包绑定并查找类型为 ApplicationInsights 的 Application Insights 绑定,请使用以下命令:

az spring build-service builder buildpack-binding list \
    --resource-group <your-resource-group-name> \
    --service <your-service-resource-name> \
    --builder-name <your-builder-name>

若要替换 Application Insights 生成包绑定,请使用以下命令:

az spring build-service builder buildpack-binding set \
    --resource-group <your-resource-group-name> \
    --service <your-service-instance-name> \
    --name <your-binding-name> \
    --builder-name <your-builder-name> \
    --type ApplicationInsights \
    --properties sampling-percentage=<your-sampling-percentage> \
                 connection-string=<your-connection-string>

若要获取 Application Insights 生成包绑定,请使用以下命令:

az spring build-service builder buildpack-binding show \
    --resource-group <your-resource-group-name> \
    --service <your-service-instance-name> \
    --name <your-binding-name> \
    --builder-name <your-builder-name>

若要删除 Application Insights 生成包绑定,请使用以下命令:

az spring build-service builder buildpack-binding delete \
    --resource-group <your-resource-group-name> \
    --service <your-service-instance-name> \
    --name <your-binding-name> \
    --builder-name <your-builder-name>

自动化

以下部分介绍如何使用 Bicep、Azure 资源管理器模板(ARM 模板)或 Terraform 自动完成部署。

Bicep

若要使用 Bicep 文件进行部署,请将以下内容复制到 main.bicep 文件中。 有关详细信息,请参阅 Microsoft.AppPlatform Spring/monitoringSettings

param springName string
param location string = resourceGroup().location

resource spring 'Microsoft.AppPlatform/Spring@2020-07-01' = {
  name: springName
  location: location
  properties: {}
}

resource monitorSetting 'Microsoft.AppPlatform/Spring/monitoringSettings@2020-11-01-preview' = {
  parent: spring
  name: 'default'
  properties: {
    appInsightsInstrumentationKey: '00000000-0000-0000-0000-000000000000'
    appInsightsSamplingRate: 88
  }
}

ARM 模板

若要使用 ARM 模板进行部署,请将以下内容复制到 azuredeploy.json 文件中。 有关详细信息,请参阅 Microsoft.AppPlatform Spring/monitoringSettings

{
  "$schema": "https://schema.management.azure.com/schemas/2019-04-01/deploymentTemplate.json#",
  "contentVersion": "1.0.0.0",
  "parameters": {
    "springName": {
      "type": "string"
    },
    "location": {
      "type": "string",
      "defaultValue": "[resourceGroup().location]"
    }
  },
  "resources": [
    {
      "type": "Microsoft.AppPlatform/Spring",
      "apiVersion": "2020-07-01",
      "name": "[parameters('springName')]",
      "location": "[parameters('location')]",
      "properties": {}
    },
    {
      "type": "Microsoft.AppPlatform/Spring/monitoringSettings",
      "apiVersion": "2020-11-01-preview",
      "name": "[format('{0}/{1}', parameters('springName'), 'default')]",
      "properties": {
        "appInsightsInstrumentationKey": "00000000-0000-0000-0000-000000000000",
        "appInsightsSamplingRate": 88
      },
      "dependsOn": [
        "[resourceId('Microsoft.AppPlatform/Spring', parameters('springName'))]"
      ]
    }
  ]
}

Terraform

对于 Terraform 部署,请使用以下模板。 有关详细信息,请参阅 azurerm_spring_cloud_service

provider "azurerm" {
  features {}
}

resource "azurerm_resource_group" "example" {
  name     = "example-resources"
  location = "West Europe"
}

resource "azurerm_application_insights" "example" {
  name                = "tf-test-appinsights"
  location            = azurerm_resource_group.example.location
  resource_group_name = azurerm_resource_group.example.name
  application_type    = "web"
}

resource "azurerm_spring_cloud_service" "example" {
  name                = "example-springcloud"
  resource_group_name = azurerm_resource_group.example.name
  location            = azurerm_resource_group.example.location
  sku_name            = "S0"

  config_server_git_setting {
    uri          = "https://github.com/Azure-Samples/piggymetrics"
    label        = "config"
    search_paths = ["dir1", "dir2"]
  }

  trace {
    connection_string = azurerm_application_insights.example.connection_string
    sample_rate       = 10.0
  }

  tags = {
    Env = "staging"
  }
}

对企业计划中的自动化功能的支持有待推出。 推出后很快会发布相关文档。

Java 代理更新/升级

Java 代理会随 JDK 一起定期更新/升级,这可能会影响以下方案。

注意

JDK 版本每年每季度更新/升级一次。

  • 更新/升级之前使用 Java 代理的现有应用程序不会受到影响。
  • 更新/升级后创建的应用程序使用新版 Java 代理。
  • 以前未使用 Java 代理的现有应用程序需要重启或重新部署,然后才能使用新版 Java 代理。

更新生成包时将更新/升级 Java 代理。

Java 代理配置热加载

Azure Spring Apps 采用一种热加载机制来调整代理配置的设置,而无需重启应用程序。

注意

热加载机制有几分钟延迟时间。

  • 如果已启用了 Java 代理,则更改 Application Insights 实例或 SamplingRate 值不要求重启应用程序。

  • 如果启用 Java 代理,则必须重启应用程序。

  • 禁用 Java 代理后,应用程序会在几分钟的延迟后停止发送所有监视数据。 你可以重启应用程序以从 Java 运行时环境中删除代理。

Azure Spring Apps 和 Application Insights 之间的概念匹配

Azure Spring Apps Application Insights
App * 应用程序映射/角色
* 实时指标/角色
* 故障/角色/云角色
* 性能/角色/云角色
App Instance * 应用程序映射/角色实例
* 实时指标/服务名称
* 故障/角色/云实例
* 性能/角色/云实例

Azure Spring Apps 中的名称 App Instance 会在以下情况下更改或生成:

  • 创建新的应用程序。
  • 将 JAR 文件或源代码部署到现有应用程序。
  • 启动蓝/绿部署。
  • 重启应用程序。
  • 停止部署应用程序,然后重新启动应用程序。

如果数据存储在 Application Insights 中,它将包含自启用 Java 代理后创建或部署的 Azure Spring Apps 应用实例的历史记录。 例如,在 Application Insights 门户中,可以看到昨天创建的应用程序数据,但这些数据会在特定时间范围内删除,例如最近的 24 小时。 以下场景展示了此过程:

  • 今天上午 8:00 左右,你在启用 Java 代理的情况下在 Azure Spring Apps 中创建了一个应用程序,然后在今天上午 8:10 左右将 JAR 文件部署至该应用程序。 在进行一些测试后,你更改了代码,并在今天上午 8:30 将新的 JAR 文件部署至该应用程序。 然后你休息了一会儿,并在上午 11:00 回来检查 Application Insights 中的部分数据。 可看到:
    • 应用程序映射中的三个实例(时间范围为过去 24 小时)以及“失败”、“性能”和“指标”。
    • 应用程序映射中的一个实例(时间范围为过去 1 小时)以及“失败”、“性能”和“指标”。
    • 实时指标中的一个实例。
  • 今天上午 8:00 左右,你在启用 Java 代理的情况下在 Azure Spring Apps 中创建了一个应用程序,然后在今天上午 8:10 左右将 JAR 文件部署至该应用程序。 在今天上午 8:30 左右,你使用另一个 JAR 文件尝试了一次蓝/绿部署。 目前,此应用程序有两个部署。 休息到上午 11:00 后,你想要查看 Application Insights 中的某些数据。 可看到:
    • 应用程序映射中的三个实例(时间范围为过去 24 小时)以及“失败”、“性能”和“指标”。
    • 应用程序映射中的两个实例(时间范围为过去 1 小时)以及“失败”、“性能”和“指标”。
    • 实时指标中的两个实例。

后续步骤