优化 Azure Spring Apps 的应用程序可观测性

备注

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

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

本文介绍如何观察在 Azure Spring Apps 上部署的生产应用程序,并诊断和调查生产问题。 可观测性是通过日志、指标、跟踪和警报收集见解、分析和可操作智能的能力。

若要了解应用程序是否符合预期并发现和预测应用程序的问题,请重点关注以下几个方面:

  • 可用性:检查应用程序是否可用且可供用户访问。
  • 可靠性:检查应用程序是否可靠且可以正常使用。
  • 故障:了解应用程序无法正常工作,需要进一步修复。
  • 性能:了解需要进一步关注应用程序遇到的哪些性能问题并找出问题的根本原因。
  • 警报:了解应用程序的当前状态。 当应用程序无法正常工作时,主动通知他人并采取必要的操作。

本文使用著名的 PetClinic 示例应用作为生产应用程序。 有关如何将 PetClinic 部署到 Azure Spring Apps 并使用 MySQL 作为持久存储的详细信息,请参阅以下文章:

Log Analytics 和 Application Insights 与 Azure Spring Apps 深度集成。 可以使用 Log Analytics 通过各种日志查询诊断应用程序,并使用 Application Insights 调查生产问题。 有关详细信息,请参阅以下文章:

先决条件

  • Azure 订阅。 如果没有 Azure 订阅,可在开始前创建一个试用帐户

监视应用程序

默认情况下,Azure Spring Apps 提供多项指标,包括可用性、性能、HTTP 请求、数据库连接等指标。 这些指标对于阐明目标、查找改进和制定具体的改进措施非常重要。 有关详细信息,请参阅 Azure Spring Apps 的指标

本部分介绍如何对应用程序使用指标,并使用 Azure Spring Apps 和 Application Insights 生成的关键指标图表监视 Azure 仪表板中的指标。

添加监视资源利用率的指标

本部分介绍如何使用 Spring Boot 定义的默认指标和应用程序代码中定义的自定义指标。 这些指标适用于在 Azure Spring Apps 上运行的应用程序。

添加 Spring Boot 定义的指标

Spring Boot 注册有多个指标,例如 JVM、Web 服务器和与日志记录相关的指标。 以下范例步骤演示如何添加 JVM Memory,但若要添加 Spring Boot 定义的其他指标,可以遵循相同的步骤。

  1. 前往 Azure Spring Apps 实例的概览页。

  2. 在导航菜单中,选择 Application Insights 以转到 Application Insights 的概览页。

  3. 在导航菜单上,选择指标,选择图表标题中的编辑图标,然后将图表标题重命名为 JVM 已用内存

  4. 选择“添加指标”。 在指标中,打开相应的选择列表,然后在基于日志的指标命名空间下选择 jvm_memory_used。 对于“聚合”,请选择“平均”。

  5. 选择“应用拆分”。 在数值中,打开相应的选择列表,然后选择云角色名称

Azure 门户的屏幕截图,其中显示了 Application Insights“指标”页以及“JVM 已用内存”图表。

备注

部署并运行应用程序后,指标可用。

添加在应用程序代码中定义的自定义指标

在 PetClinic 源代码中,REST 控制器使用微计 @Timed 注释进行批注。 此批注收集各项指标,例如调用方法的次数或方法的执行时间。

以下列表显示了自定义指标的详细信息:

  • petclinic.ownerpetclinic.petcustomers-service 应用程序中定义。
  • petclinic.visitvisits-service 应用程序中定义。

可以使用自定义指标定义 REST API access 图表,并将每个指标的聚合更新为计数

Azure 门户的屏幕截图,其中显示了 Application Insights“指标”页以及“REST API 访问权限”图表。

监视应用程序的可用性

应用程序的可用性或存活度是通过 Spring Boot 执行器确定的。 若要检查 Azure Spring Apps 上每个应用的存活度,请执行以下步骤:

  1. 前往 Azure Spring Apps 实例的概览页。

  2. 在导航菜单中,选择 Application Insights 以转到 Application Insights 的概览页。

  3. 选择可用性,然后选择添加标准测试

  4. 创建标准测试页面上,提供以下信息:

    • 测试名称:为 API 网关应用程序输入 api-gateway
    • URL:为相应的 URL 输入 https://<你的-Azure-Spring-Apps-实例-名称>-api-gateway.microservices.azure.cn/actuator/health/liveness
    • 成功条件:扩展选项。
    • 内容匹配:选中该复选框。
    • 内容必须包含:输入 UP
  5. 选择保存完成配置。

  6. 使用下表添加具备文中测试名称和 URL 的其他测试。 确保测试名称和应用名称一致。

    测试名称 URL 内容必须包含
    admin-server https://<your-Azure-Spring-Apps-instance-name>-admin-server.microservices.azure.cn/actuator/health/liveness UP
    customers-service https://<your-Azure-Spring-Apps-instance-name>-api-gateway.microservices.azure.cn/api/customer/actuator/health/liveness UP
    vets-service https://<your-Azure-Spring-Apps-instance-name>-api-gateway.microservices.azure.cn/api/vet/actuator/health/liveness UP
    visits-service https://<your-Azure-Spring-Apps-instance-name>-api-gateway.microservices.azure.cn/api/visit/actuator/health/liveness UP

监视仪表板

仪表板是一种认知意识和通信工具,旨在帮助你直观地识别趋势、模式和异常、查看内容的原因以及做出有效的决策。 它可以聚合各种指标图表、快速链接和其他重要信息。

执行以下步骤创建自定义仪表板,并将各种快速入门窗格和指标图表固定到仪表板。 如果选择使用 Azure Spring Apps 创建的 Application Insights 内置仪表板,则可以跳过创建仪表板和自定义仪表板图表的步骤。 有关详细信息,请参阅《Application Insights 概览仪表板》

备注

还可以根据 Application Insights 选择向导以快速创建默认仪表板。

  1. 在 Azure 门户菜单上,选择“仪表板” 。 默认视图可能已设置为“仪表板”。

  2. 选择创建,然后选择自定义以创建自定义仪表板。

  3. 输入仪表板名称,然后选择保存

    此操作会打开磁贴库,你可以在这里选择磁贴,以及可以排列磁贴的空网格。

备注

你可以让其他用户使用共享仪表板查看你的仪表板。 有关详细信息,请参阅《分享 Azure 仪表板》。

基本监视

应用程序(尤其是微服务应用程序)的最基本指标是 CPU 使用率、内存使用情况、存活度检测和网络流量。 这些指标为评估应用程序的可伸缩性提供了重要基础。

执行以下指示将各种图表固定到仪表板。 每个图表的此类步骤都类似。 部分图表有额外的指示。

固定“应用程序 CPU 使用情况”图表

若要固定“应用程序 CPU 使用情况”图表,请执行以下步骤:

  1. 前往 Azure Spring Apps 实例的概览页。

  2. 在导航菜单上,选择指标,选择图表标题中的编辑图标,然后将图表标题重命名为应用程序 CPU 使用情况

  3. 选择“添加指标”。 在指标中,打开相应的选择列表,然后选择应用程序 CPU 使用情况。 对于“聚合”,请选择“平均”。

  4. 选择“应用拆分”。 在数值中,打开相应的选择列表,然后选择应用程序

    Azure 门户的屏幕截图,其中显示了 Azure Spring Apps“指标”页以及“应用 CPU 使用情况”图表。

  5. 选择保存到仪表板,然后打开选择列表,选择固定到仪表板

  6. 固定到仪表板页上,选择创建的仪表板,然后选择 固定,将图表固定到仪表板。

固定“应用程序内存使用情况”图表

若要将应用程序内存使用情况图表固定到仪表板,请执行上一部分中的步骤。

Azure 门户的屏幕截图,其中显示了 Azure Spring Apps“指标”页以及“应用内存使用情况”图表。

固定“应用程序网络”图表

若要固定“应用程序网络”图表,请执行固定“应用程序 CPU 使用情况”图表部分的步骤,并执行以下步骤:

  1. 指标页上,选择添加筛选器

  2. 属性中,打开相应的选择列表,然后选择应用程序

  3. 运算符中,选择 =

  4. 数值中,选择 admin-serverapi-gateway

Azure 门户的屏幕截图,其中显示了 Azure Spring Apps“指标”页以及“应用网络传入”图表。

固定“可用性”图表

若要固定“可用性”图表,请执行以下步骤:

  1. 前往 Azure Spring Apps 实例的概览页。

  2. 在导航菜单中,选择 Application Insights 以转到 Application Insights 的概览页。

  3. 在导航菜单上,选择指标,选择图表标题中的编辑图标,然后将图表标题重命名为可用性

  4. 选择“添加指标”。

  5. 指标中,打开相应的选择列表,并在 Application Insights 标准指标命名空间下选择可用性。 然后在聚合中选择平均

  6. 选择“应用拆分”。 在数值中,打开相应的选择列表,选择测试名称,然后将可用性图表保存到仪表板。

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

监视 HTTP 请求

在为用户提供服务的应用程序过程中记录的关键数据包括 HTTP 请求数、响应时间、异常请求和失败请求。 此数据可帮助你了解应用程序是否正常提供服务,这直接影响应用程序的服务级别。

固定“服务器异常和依赖项调用失败”图表

若要固定“服务器异常和依赖项调用失败”图表,请执行固定“可用性”图表 部分的步骤。 Server 异常依赖项调用失败指标位于 Application Insights 标准指标命名空间下。

Azure 门户的屏幕截图,其中显示了 Application Insights“指标”页以及“服务器异常”和“依赖项调用失败”图表。

固定“失败请求”图表

若要固定“失败请求”图表,请执行固定“可用性”图表部分的步骤。 失败请求指标位于 Application Insights 标准指标命名空间下。

Azure 门户的屏幕截图,其中显示了 Application Insights“指标”页以及“失败请求”图表。

固定“请求计数”图表

若要固定“请求计数”图表,请执行固定“可用性”图表部分的步骤,并执行以下步骤: 服务器请求指标位于 Application Insights 标准指标命名空间下。

  1. 添加筛选器,使用 api-gatewayadmin-server 筛选云角色名称

  2. 对具有云角色名称应用拆分。

Azure 门户的屏幕截图,其中显示了 Application Insights“指标”页以及“请求计数”图表。

固定“响应时间”图表

若要固定“响应时间”图表,请执行固定“可用性”图表部分中的步骤,但添加 api-gateway 筛选器来筛选云角色名称服务器响应时间指标位于 Application Insights 标准指标命名空间下。

Azure 门户的屏幕截图,其中显示了 Application Insights“指标”页以及“响应时间”图表。

监视数据库性能

数据库性能是所有应用程序正常服务的基石。 数据库缓慢或数据库连接池耗尽会导致许多应用程序性能降级。 必须确保数据库级别的性能符合预期,否则会导致一系列的问题。

固定“当前 MySQL 连接”图表

若要固定“当前 MySQL 连接”图表,请执行固定“可用性”图表部分的步骤。 hikaricp_connection_active指标位于基于日志的指标命名空间下。

Azure 门户的屏幕截图,其中显示了 Application Insights“指标”页以及“活动 MySQL 连接”图表。

固定资源页中的内容

将一些常用的链接固定到仪表板中。 通过这些链接,可以快速打开 Azure 或其他资源页上的操作页。

若要将 Azure 门户的常见窗格固定到仪表板,请执行以下步骤:

  1. 前往 Azure Spring Apps 实例的概览页。

  2. 在导航菜单中,选择 Application Insights 以转到 Application Insights 的概览页。

  3. 在导航菜单上,选择应用程序映射,然后在每页的标题选择固定边栏选项卡到仪表板图标。

  4. 固定到仪表板页上,选择创建的仪表板,然后选择 固定,将图表固定到仪表板。

    Azure 门户的屏幕截图,其中显示了“应用程序映射”页并已打开“固定到仪表板”窗格。

  5. 重复上述步骤,根据需要将实时指标失败以及性能窗格固定到仪表板。

查看仪表板

若要查看仪表板,前往专用 PetClinic 仪表板页面,编辑仪表板中的磁贴,以便轻松监视。

Azure 门户的屏幕截图,其中显示了示例应用程序的专用仪表板页面。

管理警报

当指标或日志表示基础结构或应用程序可能出现问题时,警报能检测出问题,并在用户察觉到之前主动通知问题。

本部分介绍如何设置操作组和警报规则来监视生产应用程序。 警报规则将指标模式与目标资源上的操作组绑定。 当指标模式与条件匹配时,警报规则将激活和执行相关的操作集。

设置操作组

若要设置操作组,请执行以下步骤:

  1. 前往 Azure Spring Apps 实例的概览页。

  2. 在导航菜单上,选择警报,选择操作组转到操作组列表页,然后选择创建以创建操作组。

  3. 创建操作组页上,选择需要监视的订阅和资源组。 输入以下信息:

    • 操作组名称:输入 email-notification
    • 短名称:输入电子邮件
    • 区域:选择要使用的区域。
  4. 导航到创建操作组页上的通知选项卡。 在通知类型中,选择电子邮件/短信/推送/语音。 在名称中,输入 email-support

  5. 电子邮件/短信/推送/语音页上,选择电子邮件,输入生产电子邮件地址,然后选择确定完成配置。 如果需要,还可以添加其他通知类型,例如短信、Azure 移动应用通知、语音通知等。

    Azure 门户的屏幕截图,其中显示了“创建操作组”页,并已打开“电子邮件/短信/推送/语音”窗格。

  6. 选择“查看 + 创建”,查看所选内容。 选择创建以创建操作组。

设置警报规则

若要创建警报规则,请执行以下步骤:

  1. 前往 Azure Spring Apps 实例的概览页。

  2. 在导航菜单上,选择警报,选择警报规则,转到警报规则列表页,然后选择创建以创建警报规则。

  3. 创建警报规则页上的信号名称中,打开选择列表,然后选择查看所有信号

  4. 指标区域中,选择应用程序 CPU 使用情况,然后选择应用

  5. 在“警报逻辑”部分,使用以下输入:

    • 在阈值类型中,选择静态
    • 对于“聚合类型”,请选择“平均值”。
    • 对于“运算符”,请选择“大于”。
    • 阈值中,输入 90
  6. 按维度拆分部分中,使用以下输入:

    • 维度名称中,选择应用程序
    • 运算符中,使用默认的 =
    • 维度值中,选择选择所有
    • 评估时机中,请保留默认值。

    Azure 门户的屏幕截图,其中显示了“创建警报规则”页。

  7. 导航到创建警报规则页上的操作选项卡,然后选择选择操作组

  8. 选择操作组页上,搜索电子邮件操作组名称,例如 email-notification。 选择相应的操作组,然后选择选择以完成配置。

  9. 导航到创建警报规则页上的详细信息选项卡。

  10. 警报规则名称中,输入 app-cpu-high-alert

  11. 选择“查看 + 创建”,查看所选内容。 选择“创建”以创建警报规则。

  12. 若要为应用程序内存使用情况指标信号创建警报规则,请使用以下输入:

    • 信号名称应用程序内存使用情况
    • 阈值90
    • 维度名称应用程序
    • 维度值:选择所有
    • 操作组名称email-notification
    • 警报规则名称app-memory-high-alert
  13. 若要为应用程序网络指标信号创建警报规则,请使用以下输入:

    • 信号名称应用网络网络传入
    • 单位GB
    • 阈值1
    • 维度名称应用程序
    • 维度值api-gateway
    • 操作组名称email-notification
    • 警报规则名称network-in-high-alert
  14. 创建所有警报规则后,可以查看警报规则列表。

    Azure 门户的屏幕截图,其中显示了“警报规则”页面。

固定警报到仪表板

若要将快速入门图表固定到仪表板,请执行以下步骤:

  1. 前往 Azure Spring Apps 实例的概览页。

  2. 在导航菜单上,选择警报,然后选择固定边栏选项卡到仪表板图标。

查询日志以诊断应用程序问题

如果遇到生产问题,则需要执行根本原因分析。 查找日志是此分析的一个重要部分,尤其是对于分布式应用程序,其日志分散在多个应用程序中。 Application Insights 收集的跟踪数据可以帮助你查找所有相关链接的日志信息,包括异常堆栈信息。

本部分介绍如何使用 Log Analytics 查询应用程序日志,并使用 Application Insights 调查失败的请求。 有关详细信息,请参阅以下文章:

日志查询

本部分介绍如何从 Azure Spring Apps 托管的 AppPlatformLogsforSpring 表中查询应用程序日志。 可以使用 Kusto 查询语言自定义对应用程序日志的查询。

若要查看内置示例的查询语句或编写自己的查询,请打开 Azure Spring Apps 实例并转到日志菜单。

显示包含“错误”或“异常”术语的应用程序日志

若要查看包含“错误”或“异常”术语的应用程序日志,请在查询页上选择警报,然后对显示包含“错误”或“异常”术语部分选择运行

以下查询显示过去一小时内包含“错误”或“异常”术语的应用程序日志。 可以使用要搜索的任何关键字自定义查询。

AppPlatformLogsforSpring
| where TimeGenerated > ago(1h)
| where Log contains "error" or Log contains "exception"
| project TimeGenerated , ServiceName , AppName , InstanceName , Log , _ResourceId

Azure 门户的屏幕截图,其中显示了“日志”页面以及示例查询和查询结果。

显示每个应用程序的错误和异常数

若要查看应用程序的错误和异常数量,请在查询页上选择警报,然后对显示每个应用程序的错误和异常数部分选择运行

以下查询通过饼图显示过去 24 小时内包含“错误”或“异常”术语的日志数。 若要以表格式查看结果,请选择结果

AppPlatformLogsforSpring
| where TimeGenerated > ago(24h)
| where Log contains "error" or Log contains "exception"
| extend FullAppName = strcat(ServiceName, "/", AppName)
| summarize count_per_app = count() by FullAppName, ServiceName, AppName, _ResourceId
| sort by count_per_app desc
| render piechart

Azure 门户的屏幕截图,其中显示了 Azure Spring Apps 实例的异常日志数。

使用关键字查询客户服务日志

使用以下查询查看 customers-service 应用程序中包含“根本原因”术语的日志列表。 更新查询以使用要查找的关键字。

AppPlatformLogsforSpring
| where AppName == "customers-service"
| where Log contains "root cause"
| project-keep InstanceName, Log

Azure 门户的屏幕截图,其中显示了“日志”页面以及示例查询和根本原因日志。

调查请求失败

执行以下步骤调查应用程序群集中的请求失败,并查看失败的请求列表和失败请求的特定示例:

  1. 前往 Azure Spring Apps 实例的概览页。

  2. 在导航菜单中,选择 Application Insights 以转到 Application Insights 的概览页。 然后选择失败

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

  3. 失败页上,选择最多失败请求计数的 PUT 操作,选择 1 示例进入详细信息,然后选择建议的示例。

    Azure 门户的屏幕截图,其中显示了“选择示例操作”窗格和建议的失败示例。

  4. 转到端到端事务详细信息页,在右侧面板中查看完整的调用堆栈。

    Azure 门户的屏幕截图,其中显示了“端到端事务详细信息”页以及 Application Insights 失败信息。

使用 Application Insights 改善应用程序性能

如果存在性能问题,Application Insights 收集的跟踪数据可帮助查找所有相关链接的日志信息(包括每个链接的执行时间),以帮助查找性能瓶颈的位置。

若要使用 Application Insights 调查性能问题,请执行以下步骤:

  1. 前往 Azure Spring Apps 实例的概览页。

  2. 在导航菜单中,选择 Application Insights 以转到 Application Insights 的概览页。 然后选择性能

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

  3. 性能页上,选择最慢的 GET /api/gateway/owners/{ownerId} 操作,选择 3 示例进入详细信息,然后选择建议的示例。

    Azure 门户的屏幕截图,其中显示了“选择示例操作”窗格和建议的性能示例。

  4. 转到端到端事务详细信息页,在右侧面板中查看完整的调用堆栈。

    Azure 门户的屏幕截图,其中显示了“端到端事务详细信息”页以及 Application Insights 性能问题。

清理资源

可以删除 Azure 资源组,其中包括资源组中的所有资源。 按照以下步骤删除整个资源组(包括新创建的服务器):

  1. 在 Azure 门户中查找资源组。

  2. 在导航菜单上,选择“资源组”。 然后选择资源组的名称 - 例如 myresourcegroup

  3. 在资源组页上,选择“删除”。 在文本框中输入资源组的名称(例如 myresourcegroup)以确认删除。 然后选择“删除”。

后续步骤