4. 指标资源管理器与指标警报

Azure Monitor 的指标数据是生产诊断中最“便宜”也最“快”的一类信号:它以固定时间间隔采集、保留期长、查询延迟低,并且天然支持聚合与切片。指标资源管理器(Metrics Explorer)就是消费这些指标的入口,而指标警报则把“人去看图”变成“系统主动通知”。本节围绕这两件事展开:先用 Metrics Explorer 把平台指标和自定义指标画出来、切出来、算出来,再把同一套指标查询固化成静态或动态警报,并挂上操作组完成通知与自动化。

一、Metrics Explorer 的查询模型:命名空间—指标—聚合—筛选—拆分

Metrics Explorer 的每一次绘图,本质上都是一次指标查询。它由五个要素构成,理解这五个要素,比记住界面按钮更重要:

  • 命名空间(Namespace):指标所属的资源提供程序或自定义命名空间,例如 Microsoft.Compute/virtualMachines、Microsoft.Web/sites,自定义指标常用 customMetrics 或应用自定义命名空间。
  • 指标(Metric):具体的时间序列名称,如 Percentage CPU、Available Memory Bytes、Http5xx、Requests。
  • 聚合(Aggregation):把采样点压缩成一个数值,常见有 Avg、Min、Max、Sum、Count。选择错误会直接导致误判,例如用 Avg 看 CPU 会掩盖短时尖峰,用 Max 看请求数会失去总量含义。
  • 筛选(Filter):按维度值缩小范围,例如只保留 StatusCode = 500 或 Instance = vm-01。
  • 拆分(Split):按某个维度把一条线拆成多条线,例如按 Instance 拆分查看每台实例的 CPU,或按 ApiName 拆分查看各接口延迟。

时间范围与时间粒度同样关键。粒度(Time grain)决定每个数据点覆盖多长时间,通常应满足“粒度 × 数据点数 ≤ 时间范围”,并尽量让粒度与指标原始采样间隔对齐。若原始间隔是 1 分钟,却把粒度设为 5 分钟,聚合会把 5 个点合并,短时抖动会被平滑掉。

Metrics Explorer 查询模型 → 指标警报 → 操作组 指标来源 平台指标(VM / App / SQL) 自定义指标(SDK / API) 活动日志指标 / 日志指标 查询五要素 命名空间 指标 聚合 筛选 拆分 时间粒度 Avg / Min / Max / Sum / Count 决定语义 指标警报 静态阈值(固定值) 动态阈值(机器学习) 评估频率 / 回看窗口 操作组(Action Group) 邮件 / 短信 通知值班人 Webhook / ITSM 创建工单 Automation Runbook 自愈 同一操作组可被多条警报复用,避免通知碎片化 结果判读要点 • 粒度对齐原始采样间隔 • 聚合语义与业务一致 • 拆分维度避免平均掩盖 • 警报窗口 > 抖动周期 • 先看指标再定阈值

二、平台指标与自定义指标的实际探索

平台指标由 Azure 资源提供程序自动发出,无需埋点。以一台 Linux 虚拟机为例,常见可用指标包括 Percentage CPU、Available Memory Bytes、Disk Read Operations/Sec、Network In Total。在 Metrics Explorer 中,选择该 VM 资源,命名空间选 Microsoft.Compute/virtualMachines,指标选 Percentage CPU,聚合选 Avg,时间范围选“最近 1 小时”,粒度 1 分钟,即可得到一条 CPU 曲线。若把聚合改为 Max,同一时间范围内曲线会整体抬高,因为每个粒度窗口取的是峰值——这正是“聚合改变语义”的直接体现。

自定义指标需要应用侧主动上报。常见方式有两种:一是通过 Application Insights SDK 的 TrackMetric 或 GetMetric 上报;二是通过 Azure Monitor 指标 REST API 向资源的 customMetrics 命名空间写入。例如一个订单服务可以上报 OrderProcessingLatencyMs,并携带维度 Region 和 PaymentMethod。上报后,在 Metrics Explorer 中把命名空间切到该资源的自定义命名空间,就能像平台指标一样筛选、拆分和聚合。自定义指标的价值在于把业务语义带进监控,例如“支付成功率”比“HTTP 5xx 数量”更贴近业务结果。

自定义指标有配额与维度基数限制。维度值过多(例如把用户 ID 作为维度)会导致指标爆炸,查询变慢甚至被限流。维度应选择有限枚举,如区域、状态码、接口名。

三、静态指标警报:固定阈值与评估窗口

静态警报使用固定阈值。创建时需明确五个参数:目标资源与指标、聚合类型、阈值与比较符、评估频率、回看窗口。以 VM CPU 为例,一个合理的示例配置是:指标 Percentage CPU,聚合 Avg,比较符“大于”,阈值 80,评估频率 1 分钟,回看窗口 5 分钟。这意味着每 1 分钟评估一次,检查过去 5 分钟内所有 1 分钟数据点的平均值是否超过 80;若超过则触发。回看窗口大于评估频率,可以避免单点抖动造成误报。

静态警报的优点是行为可预测、易于解释;缺点是阈值需要人工设定,且难以适应业务周期性。对于有明显昼夜波动的指标(如白天请求量高、夜间低),固定阈值要么白天频繁误报,要么夜间漏报。

四、动态指标警报:让基线随数据自适应

动态警报使用机器学习自动学习指标的历史模式,包括趋势、周期性和波动范围,然后根据当前值与预测基线的偏离程度判断异常。创建时不再填固定阈值,而是设置敏感度(Low / Medium / High)和违反次数(即连续多少个评估窗口异常才触发)。敏感度越高,越容易触发,误报也越多;违反次数越多,越能过滤瞬时抖动,但响应会变慢。

动态警报适合具有周期性、但难以手工设定阈值的指标,例如每日请求量、夜间批处理耗时、缓存命中率。它不适合数据量极少或模式不稳定的指标,因为模型无法建立可靠基线。实践中建议先用 Metrics Explorer 观察至少一周的曲线,确认存在可学习的周期后再启用动态警报。

五、关联操作组:从“知道”到“行动”

警报本身只产生状态变化,真正让值班人收到通知、让系统自动响应的是操作组。操作组是一组可复用的通知与动作集合,常见成员包括:邮件、短信、语音、移动推送、Webhook、Logic Apps、Automation Runbook、Azure Function、ITSM 连接器。创建警报规则时,在“操作”页签选择已有操作组,或新建一个。建议按“通知对象”和“响应动作”拆分操作组,例如 ag-oncall-dba 负责通知数据库值班人,ag-auto-restart 负责调用 Runbook 重启服务,避免把所有动作塞进一个操作组导致职责混乱。

操作组中的 Webhook 和 Runbook 会真实执行。上线前应先在测试资源上验证动作,并设置操作组的“启用/禁用”开关,避免调试期间触发生产变更。

六、一个可复用的配置示例

下面给出一个静态警报的 ARM 模板片段,用于对 VM 平均 CPU 超过 80% 持续 5 分钟时触发,并关联一个已存在的操作组。示例中的资源 ID 和操作组 ID 为占位符,实际使用时替换为真实值。

{
  "type": "Microsoft.Insights/metricAlerts",
  "apiVersion": "2018-03-01",
  "name": "alert-vm-cpu-high",
  "location": "global",
  "properties": {
    "description": "VM 平均 CPU 连续 5 分钟超过 80%",
    "severity": 2,
    "enabled": true,
    "scopes": [
      "/subscriptions/<sub-id>/resourceGroups/rg-prod/providers/Microsoft.Compute/virtualMachines/vm-01"
    ],
    "evaluationFrequency": "PT1M",
    "windowSize": "PT5M",
    "criteria": {
      "odata.type": "Microsoft.Azure.Monitor.SingleResourceMultipleMetricCriteria",
      "allOf": [
        {
          "name": "cpu-high",
          "metricNamespace": "Microsoft.Compute/virtualMachines",
          "metricName": "Percentage CPU",
          "operator": "GreaterThan",
          "threshold": 80,
          "timeAggregation": "Average",
          "criterionType": "StaticThresholdCriterion"
        }
      ]
    },
    "actions": [
      {
        "actionGroupId": "/subscriptions/<sub-id>/resourceGroups/rg-ops/providers/Microsoft.Insights/actionGroups/ag-oncall"
      }
    ]
  }
}

部署后,可在 Azure Monitor 的“警报”页面查看规则状态、触发历史与已解决实例。判断警报是否合理,重点看三个信号:触发频率是否与真实故障相关、是否存在大量“已解决”但无人处理的噪声、以及从触发到通知的延迟是否满足响应要求。若噪声过多,优先调整回看窗口、违反次数或改用动态警报,而不是简单调高阈值掩盖问题。

把 Metrics Explorer 的查询与警报规则对齐,是这套机制的关键:图上看到的曲线形态、聚合方式和拆分维度,应当与警报使用的指标、聚合和窗口一致。否则会出现“图上正常、警报却响”或“图上已经异常、警报没反应”的割裂。建议在创建警报前,先在 Metrics Explorer 中固定好查询并保存到仪表板,再以同一查询为蓝本创建警报,形成从探索到告警的一致闭环。