为什么我的 CloudWatch 警报会在没有任何数据点超出阈值时触发?

上次更新时间:2021 年 3 月 23 日

我的 Amazon CloudWatch 警报变为了 ALARM(警报)状态。在检查警报指标时,我没有看到任何数据点超出阈值。但该警报的事件历史记录显示有数据点超出阈值。为什么我的 CloudWatch 警报会在没有任何数据点超出阈值时触发?

简短描述

CloudWatch 警报根据特定时刻的可用数据点来评估指标。由于新数据点在持续流入 CloudWatch 指标,每次后续评估警报时,可能会使用不同的聚合数据点。如果触发警报的数据尚未流入指标,则您可能无法看到该超出阈值的数据点。而在您以后查看事件历史记录时,您可能会看到已经流入指标的完整数据点集。

解决方法

查找超出阈值的数据点

要在 CloudWatch 警报指标图中找到超出阈值的数据点,请将 Statistic(统计数据)参数更改为 Maximum/Minimum(最大值/最小值)。

示例警报配置:

  • 标准精度警报(每分钟评估一次指标)
  • Metric(指标)设置为 CPUUtilization(CPU 利用率)
  • Threshold(阈值)设置为 65%
  • Statistic(统计数据)设置为 Average(平均值)
  • Period(周期)设置为 60 seconds(60 秒)
  • Evaluation Period(评估期)设置为 1
  • 对于所监控的 Amazon Elastic Compute Cloud (Amazon EC2) 实例,将 Detailed Monitoring(详细监控)设置为 enabled(启用)

当示例警报评估期 12:00:00-12:01:00 UTC 开始时,指标收到以下值:

Sample-1: 12:00:07 UTC, numeric value: 89.76470588235294
Sample-2: 12:00:11 UTC, numeric value: 27.926666666666664
Sample-3: 12:00:19 UTC, numeric value: 54.57142857142857
Sample-4: 12:00:35 UTC, numeric value: 95.473333333333336

这些数据点的平均值为 66.934,超出了 65% 的阈值。这将触发将警报状态更改为 ALARM(警报)。该警报的事件历史记录会将聚合值超出阈值列为状态更改的原因。

以后再次评估警报时,12:00:00 – 12:01:00 UTC 这一分钟将会有额外的值流入。例如:

Sample-1: 12:00:07 UTC, numeric value: 89.76470588235294
Sample-2: 12:00:11 UTC, numeric value: 27.926666666666664
Sample-3: 12:00:19 UTC, numeric value: 54.57142857142857
Sample-4: 12:00:35 UTC, numeric value: 95.473333333333336
Sample-5: 12:00:37 UTC, numeric value: 15.18181818181819
Sample-6: 12:00:41 UTC, numeric value: 10.26490

包括新值在内的平均值为 48.864,这没有超出 65% 的阈值。这时警报状态将变为 OK(正常)。该警报的事件历史记录会将聚合值低于阈值列为状态更改的原因。

现在您可能不会在 CloudWatch 的指标图中看到超出阈值的指标,尽管触发了警报。如果您查看 CPUUtilization(CPU 利用率)指标图,显示的 Average(平均值)将为 48.864(而不是 66.934)。所有相关评估样本现已流入该指标。

如果您将 CloudWatch 指标图的 Statistic(统计数据)参数更改为 Maximum(最大值),则可以看到 12:00:00 UTC 时有一个数据点超出阈值,为 95.473。

注意:如果您将警报配置为在数据低于阈值时触发,则应将 CloudWatch 指标图的 Statistic(统计数据)参数更改为 Minimum(最小值)。

配置“N 个中的 M 个”警报

为防止警报的状态变为 ALARM(警报),请配置一条“N 个中的 M 个”警报,其中 Evaluation Period(评估期)和 Datapoints to Alarm(触发警报的数据点数)设为不同的值。此配置将让警报评估更多的聚合数据点,仅在给定的数据点集 (N) 中至少有一定数量 (M) 的数据点超出阈值时更改警报的状态。有关更多信息,请参阅根据静态阈值创建 CloudWatch 警报配置 CloudWatch 警报处理缺失数据的方式

示例警报配置:

  • 标准精度警报(每分钟评估一次指标)
  • Metric(指标)设置为 CPUUtilization(CPU 利用率)
  • Threshold(阈值)设置为 65%
  • Statistic(统计数据)设置为 Average(平均值)
  • Period(周期)设置为 120 seconds(120 秒)
  • Evaluation Period(评估期)设置为 2 out of 3(3 个中的 2 个)
  • 对于所监控的 Amazon EC2 实例,将 Detailed Monitoring(详细监控)设置为 enabled(启用)

请注意,示例警报配置与上一示例类似。但在评估期内会对 3 个可用数据点中的 2 个进行检查后才会触发警报。评估期加长会导致周期减少。

当警报周期从 UTC 12:00:00 开始时,该指标会收到以下值:

Sample-1: 12:00:07 UTC, numeric value: 89.76470588235294
Sample-2: 12:00:11 UTC, numeric value: 27.926666666666664
Sample-3: 12:00:19 UTC, numeric value: 54.57142857142857
Sample-4: 12:00:35 UTC, numeric value: 95.473333333333336

由于评估期加长,CloudWatch 会查找早于 12:00:00 UTC 的数据点:

11:58:00 UTC, Average=41.874304539920
11:59:00 UTC, Average=5.230773650991253
12:00:00 UTC, Average=66.93403361344538

在 12:00:00 UTC 的聚合数据点超出了阈值。但警报的状态依然为 OK(正常),不会更改为 ALARM(警报)。这是因为在三个数据点中只有一个超出阈值,而触发警报需要三个中的两个超出阈值。


这篇文章对您有帮助吗?


您是否需要账单或技术支持?