我的 CloudWatch 告警为什么处于 INSUFFICIENT_DATA 状态?

1 分钟阅读
0

我的 Amazon CloudWatch 告警处于 INSUFFICIENT_DATA 状态。如何找出导致此问题的原因?

简短描述

INSUFFICIENT_DATA 状态可能表示以下任一情况:

  • Amazon CloudWatch 告警刚刚启动。
  • 指标不可用。
  • 指标参数(如命名空间、指标名称或维度)配置错误。
  • 该指标没有足够的数据来确定告警状态。

如果您的告警意外处于 INSUFFICIENT_DATA 状态,请查看下面的问题排查步骤以了解一些常见的原因。

解决方法

正常的指标行为

创建 CloudWatch 告警时,默认情况下其第一个状态为 INSUFFICIENT_DATA。它会一直处于此状态,直到完成对所监控指标的首次评估。通常,告警会在创建后的几分钟内从 INSUFFICIENT_DATA 转出。

处于 INSUFFICIENT_DATA 状态的告警可能反映指标的正常行为。根据指标推送到 CloudWatch 的方式(周期驱动和事件驱动),指标有两种类型。某些服务会定期向其指标发送数据点。其他服务在某些事件触发时会推送指标数据,并且可能有没有数据点的时间段。

周期驱动指标的一个示例是 Amazon Elastic Compute Cloud(Amazon EC2)实例的默认 CPUUtilization 指标。该指标每五分钟就有一个数据点。然而,如果您停止该实例,服务将不会向其中推送任何数据点。事件驱动指标的一个示例是应用程序负载均衡器的 HTTPCode_ELB_5XX_Count 指标。Elastic Load Balancing (ELB) 服务在有来自 ELB 的 5XX 响应时向该指标发送数据点。如果某个期间没有发生 5XX 错误,则结果为空期间(而不是零值)。

如果告警监控的指标在给定的时间段内没有数据点,并且丢失的数据被视为缺失,则告警在这些时间段内的状态为 INSUFFICIENT_DATA。要强制使该告警处于 ALARM 或 OK 状态,请配置告警在没有数据点的情况下如何处理这些周期

CloudWatch 告警设置错误

每个指标用一个命名空间、指标名称和最多十个维度来定义。检索数据点时,您必须指定一个时间戳(或者,可选择指定一个单位)。如果您为其中一个参数提供了错误的值,则 CloudWatch 会尝试检索不存在的指标。结果为空数据集。

**注意:**数据点通常会推送到具有单个单位的指标,但您不需要在创建告警时指定单位。如果您不指定单位,则不会遇到与单位配置错误相关的问题。然而,如果您的指标中的数据点具有多个单位,则最佳实践是使用正确的单位。

使用 DescribeAlarms API 获取您的监测指标的完整参数列表。您可以将此列表与 ListMetrics 输出相比较。检查以下各项的参数:

  • 拼写错误和大小写字母使用不当。命名空间、指标名称和维度密钥/值区分大小写。
  • 维度指定不正确或缺失。

告警时间段配置不正确

您可以将告警配置为以您需要的频率检索数据点。但是,如果告警使用比服务(或来源)更短的周期来将数据点发送到指标中,您可能会收到预期之外的状态。为避免不必要的 INSUFFICIENT_DATA 状态,最佳实践是将告警的周期配置为与推送指标数据点的周期相等。您还可以为告警使用 M out of N 设置。

延迟交付数据点

根据发送至 CloudWatch 的数据点不同,您可能会发现监控指标的告警处于意外的 INSUFFICIENT_DATA 状态。

例如,您有一个自定义应用程序将数据点从部署在 EC2 实例中的软件发送至自定义指标。为避免丢失数据,您可以将应用程序配置为重试失败的 API 调用。由于外部因素(例如,VPC 设置被修改),实例失去了与 CloudWatch 的连接。在这种情况下,您的环境仍会生成数据。但是,在外部问题解决之前,发送的数据点将失败。

如果您已设置标准告警,告警每分钟会评估一次指标。在评估期间,告警从配置的指标中检索最新数据点。在没有连接期间,告警仍会评估指标。由于数据点未成功传送到 CloudWatch,因此告警无法检索这些评估期内的任何数据点。这会触发 INSUFFICIENT_DATA 状态。

恢复连接后,应用程序发送数据点的代办事项,每一个都带有自己的时间戳。由于数据点是在此延迟之后发送的,因此告警现在可以根据其中指定的周期和评估周期检索最近的数据点。此时,由于数据点存储在 CloudWatch 中,您将不再看到指标中的空白区。但是,由于告警已评估该时间范围,告警历史记录仍会显示类似于以下内容的消息:

[...] 
   "stateValue": "INSUFFICIENT_DATA",
   "stateReason": "Insufficient Data: 2 datapoints were unknown.",
   [...]

如果您不希望告警处于 INSUFFICIENT_DATA 状态,可以更改告警处理缺失数据的方式


相关视频

AWS 官方
AWS 官方已更新 2 年前