排查 Azure Monitor 自动缩放问题

Azure Monitor 自动缩放可帮助你运行适当数量的资源来处理应用程序的负载。 在负载增加时,可以通过自动缩放添加资源来处理增加的负载;在资源处于空闲状态时,可以通过自动缩放删除资源来节省资金。 可以根据你选择的计划、固定的日期时间或资源指标进行缩放。 有关详细信息,请参阅自动缩放概述

自动缩放服务提供了指标和日志,帮助你了解发生了哪些缩放操作,它还可以评估导致执行这些操作的条件。 你可以找到下面所述的问题的答案:

  • 为何横向扩展或横向缩减了我的服务?
  • 我的服务为何未缩放?
  • 自动缩放操作为何失败?
  • 自动缩放操作为何花费了很长时间?

Flex 虚拟机规模集

为一组特定的虚拟机操作将手动缩放操作应用于 Flex Microsoft.Compute/virtualMachineScaleSets (VMSS) 资源后,自动缩放操作会延迟最多数小时。
例如,Azure VM CLI DeleteAzure VM Rest API Delete,当操作在单个 VM 上执行时。

在这些情况下,自动缩放服务不知道各个 VM 操作。

若要避免这种情况,请使用相同的操作,但在虚拟机规模集级别执行。 例如,Azure VMSS CLI Delete instanceAzure VMSS Rest API Delete Instance。 自动缩放可检测虚拟机规模集中的实例计数更改,并执行相应的缩放操作。

自动缩放指标

自动缩放提供了四个指标,以便你了解其操作:

  • 观察到的指标值:你选择针对其执行缩放操作的指标的值,由自动缩放引擎查看或计算。 由于一个自动缩放设置可以包含多个规则(因而也包含多个指标源),你可以使用“指标源”作为维度进行筛选。
  • 指标阈值:设置的阈值,达到该阈值即会执行缩放操作。 由于一个自动缩放设置可以包含多个规则(因而也包含多个指标源),你可以使用“指标规则”作为维度进行筛选。
  • 观察到的容量:自动缩放引擎显示的目标资源的活动实例数。
  • 启动的缩放操作数:自动缩放引擎启动的横向扩展和横向缩减操作的数目。 可按横向扩展与横向缩减操作进行筛选。

可以使用指标资源管理器在一个位置绘制上述所有指标的图表。 该图表应显示:

  • 实际指标。
  • 自动缩放引擎看到/计算的指标。
  • 缩放操作的阈值。
  • 容量变化。

示例 1:分析自动缩放规则

虚拟机规模集的自动缩放设置:

  • 如果某个规模集的平均 CPU 利用率百分比持续 10 分钟大于 70%,则横向扩展。
  • 如果该规模集的 CPU 利用率百分比持续 10 分钟以上小于 5%,则横向缩减。

让我们查看自动缩放服务提供的指标。

下图显示了虚拟机规模集的“CPU 百分比”指标。

屏幕截图显示了虚拟机规模集 CPU 利用率百分比示例。

下一个图表显示自动缩放设置的“观察到的指标值”指标。

屏幕截图显示了另一个虚拟机规模集 CPU 利用率百分比示例。

最后的图表显示“指标阈值”和“观察到的容量”指标。 横向扩展规则顶部的“指标阈值”指标为 70。 底部“观察到的容量”指标显示活动实例数,当前为 3。

显示“指标阈值”和“观察到的容量”的屏幕截图。

注意

可以按指标触发器规则维度横向扩展(增加)规则筛选“指标阈值”来查看横向扩展阈值,也可以按横向缩减规则(减少)进行筛选。

示例 2:虚拟机规模集的高级自动缩放

可以使用自动缩放设置来使虚拟机规模集资源能够根据其自己的“出站流”指标进行横向扩展。 将选择指标阈值的“将指标除以实例计数”选项。

缩放操作规则是,如果“每个实例的出站流”值大于 10,则应将自动缩放服务横向扩展 1 个实例。

在这种情况下,自动缩放引擎的“观察到的指标值”的计算方式是将实际指标值除以实例数。 如果观察到的指标值小于阈值,则不启动横向扩展操作。

以下屏幕截图显示了两个指标图表。

“平均出站流”图表显示“出站流”指标的值。 实际值为 6。

屏幕截图显示了“平均出站流”页,其中包含虚拟机规模集自动缩放指标图表的示例。

下图显示了几个值:

  • 中间“观察到的指标值”指标为 3,因为有 2 个活动实例,6 除以 2 等于 3。
  • 底部的“观察到的容量”指标显示自动缩放引擎看到的实例计数。
  • 顶部指标阈值指标设置为 10。显示虚拟机规模集自动缩放指标图表示例的屏幕截图。

如果有多个缩放操作规则,则可以使用指标资源管理器图表中的“拆分”或“添加筛选器”选项,按特定的源或规则查看指标。 有关拆分指标图表的详细信息,请参阅指标图表的高级功能 - 拆分

示例 3:了解自动缩放事件

在自动缩放设置屏幕上,转到“运行历史记录”选项卡查看最近的缩放操作。 该选项卡还会显示“观察到的容量”在一段时间内的变化。 若要查找有关所有自动缩放操作(包括更新/删除自动缩放设置等操作)的更多信息,请查看活动日志并按自动缩放操作进行筛选。

显示自动缩放设置运行历史记录的屏幕截图。

自动缩放资源日志

自动缩放服务提供资源日志。 有两种类别的日志:

  • 自动缩放评估:自动缩放引擎每次执行检查时,都会针对每一条件评估记录相应的日志条目。 该条目包含有关所观察到的指标值、评估的规则以及该评估是否导致发生缩放操作的详细信息。
  • “自动缩放”缩放操作:引擎将会记录自动缩放服务发起的缩放操作事件,以及这些缩放操作的结果(成功、失败,以及自动缩放服务看到的缩放量)。

与在 Azure Monitor 支持的任何服务中一样,你可以使用诊断设置将这些日志:

  • 路由到 Log Analytics 工作区进行详细分析。
  • 路由到 Azure 事件中心,然后再到非 Azure 工具。
  • 路由到 Azure 存储帐户进行存档。

显示自动缩放诊断设置的屏幕截图。

前面的屏幕截图显示了 Azure 门户自动缩放“诊断设置”窗格。 在其中可以选择“诊断/资源日志”选项卡,并启用日志收集和路由。 你还可以使用 REST API、Azure CLI、PowerShell 和 Azure 资源管理器模板,通过选择“Microsoft.Insights/AutoscaleSettings”作为资源类型,对诊断设置执行相同的操作。

使用自动缩放日志进行故障排除

为了获得最佳的故障排除体验,建议在创建自动缩放设置时,通过工作区将日志路由到 Azure Monitor 日志 (Log Analytics)。 上一部分的屏幕截图已演示了此过程。 使用 Log Analytics 可以更好地验证评估和缩放操作。

将自动缩放日志配置为发送到 Log Analytics 工作区后,可以执行以下查询来检查日志。

若要开始,请尝试使用此查询来查看最近的自动缩放评估日志:

AutoscaleEvaluationsLog
| limit 50

或者尝试使用以下查询来查看最近的缩放操作日志:

AutoscaleScaleActionsLog
| limit 50

如果遇到任何问题,请参考以下部分。

发生了意料之外的缩放操作

首先对缩放操作执行查询,找到你所关注的缩放操作。 如果它是最新的缩放操作,请使用以下查询:

AutoscaleScaleActionsLog
| take 1

在缩放操作日志中选择 CorrelationId 字段。 使用 CorrelationId 查找正确的评估日志。 执行以下查询会显示已评估并导致该缩放操作的所有规则和条件。

AutoscaleEvaluationsLog
| where CorrelationId = "<correliationId>"

哪个配置文件导致发生了缩放操作?

发生了缩放操作,但你的规则和配置文件重叠,需要追查到哪一个配置文件导致发生了该操作。

查找缩放操作的 CorrelationId,如示例 1 中所述。 然后对评估日志执行查询,了解有关配置文件的详细信息。

AutoscaleEvaluationsLog
| where CorrelationId = "<correliationId_Guid>"
| where ProfileSelected == true
| project ProfileEvaluationTime, Profile, ProfileSelected, EvaluationResult

也可以使用以下查询来更好地了解整个配置文件评估:

AutoscaleEvaluationsLog
| where TimeGenerated > ago(2h)
| where OperationName contains == "profileEvaluation"
| project OperationName, Profile, ProfileEvaluationTime, ProfileSelected, EvaluationResult

未发生缩放操作

你预期会发生某个缩放操作,但它并未发生。 可能没有缩放操作事件或日志。

如果你使用的是基于指标的缩放规则,请查看自动缩放指标。 “观察到的指标值”或“观察到的容量”值可能不符合预期,因此未触发缩放规则。 你仍然可以看到评估,但看不到横向扩展规则。 此外,冷却时间也可能会阻止发生缩放操作。

查看你预期会发生缩放操作的时间段内的自动缩放评估日志。 查看自动缩放服务执行的所有评估,确定它为何决定不触发缩放操作。

AutoscaleEvaluationsLog
| where TimeGenerated > ago(2h)
| where OperationName == "MetricEvaluation" or OperationName == "ScaleRuleEvaluation"
| project OperationName, MetricData, ObservedValue, Threshold, EstimateScaleResult

缩放操作失败

在某些情况下,自动缩放服务会执行缩放操作,但系统决定不进行缩放或者无法完成缩放操作。 使用此查询来查找失败的缩放操作:

AutoscaleScaleActionsLog
| where ResultType == "Failed"
| project ResultDescription

创建警报规则,以便在发生自动缩放操作或者失败时获得通知。 创建警报规则还可以在发生自动缩放事件时获得通知。

自动缩放资源日志的架构

有关详细信息,请参阅自动缩放资源日志

后续步骤

阅读有关自动缩放最佳做法的信息。