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

上次更新时间:2020 年 3 月 26 日

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

解决方法

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

  • Amazon CloudWatch 警报刚刚开始
  • 指标不可用
  • 该指标没有足够的数据来确定警报状态

如果您的警报意外处于 INSUFFICIENT_DATA 状态,请查看下面的故障排除步骤以了解一些最常见的原因。

正常的指标行为

处于 INSUFFICIENT_DATA 状态的警报可能只反映了指标的正常行为。根据指标推送到 CloudWatch 的方式(周期驱动和事件驱动),指标有两种类型。有些服务向其指标发送定期数据点,但指定指标可能拥有不具有数据点的时期。例如,EC2 实例的 CPUUtilization 指标在每个时期都有一个数据点。但是,如果您停止该实例,服务将不会向其中推送任何数据点。另一个示例是 Application Load Balancer 的 HTTPCode_ELB_5XX_Count 指标。该服务在出现错误(或事件)时发送数据点。如果某个期间没有发生错误,则结果为空数据集(而不是零值)。

如果某个警报在设计的给定时间内监测没有数据点的指标,则该警报在这些周期内的状态为 INSUFFICIENT_DATA。要强制使该警报处于 ALARM 或 OK 状态,配置警报在没有数据点的情况处理这些周期的方式

不正确的 CloudWatch 警报设置

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

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

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

  • 拼写错误和大小写字母使用不当(指标区分大小写)
  • 尺寸或单位指定不正确

警报时间段配置不正确

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

延迟交付数据点

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

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

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

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

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

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


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?