我创建了一个警报,用于在实例闲置时间过长时停止实例并向我发送电子邮件(平均 CPU 利用率 < 2%,持续 3 小时)。然而,在我的测试中,我注意到实例在 1 小时后停止了。附件是来自电子邮件的报告:
Alarm Details:
Name: Stop
Description: Created from EC2 Console
State Change: INSUFFICIENT_DATA -> ALARM
Reason for State Change: Threshold Crossed: 2 datapoints were less than the threshold (2.0).
The most recent datapoints: http:// 0.0425, 0.038363636363636364.
Timestamp: Thursday 14 March, 2013 22:20:11 UTC
AWS Account: xxxxxxxxxxxx
Threshold:
The alarm is in the ALARM state when the metric is LessThanThreshold 2.0 for 3600 seconds.
Monitored Metric:
MetricNamespace: AWS/EC2
MetricName: CPUUtilization
Dimensions: InstanceId = i-xxxxxxx
Period: 3600 seconds
Statistic: Average
Unit: not specified
State Change Actions:
OK:
ALARM: arn:aws:sns:us-east-1:xxxxxxxxxxxx:NotifyMe
INSUFFICIENT_DATA:
我很困惑,为什么我将其设置为 3 小时(10800 秒)后,它仅在 1 小时(3600 秒)后就进入 ALARM 状态。在我的测试中,实例已经停止了一整天。创建警报后,我启动了它,但没有对实例执行任何操作。它在计算 3 小时内的平均 CPU 利用率时会考虑所有这些停止的时间吗?
我希望警报让实例在停止实例之前保持 3 小时的阈值。有没有更好的方法可以做到这一点?
答案1
您的电子邮件中明确指出您的警报设置为 3600 秒后触发。
阈值:当指标在 3600 秒内小于阈值 2.0 时,警报处于 ALARM 状态。
应该有一个选项可以设置“EvaluationPeriods”。它的作用是告诉警报评估您希望检查的特定指标的次数。因此,在您的情况下,您可以将其设置为 3,警报将每小时检查一次以查看指标是否小于阈值 2.0。如果连续 3 小时内 3 个点的平均值小于阈值 2.0,则将触发警报。
另外需要注意的是,您的警报状态从 INSUFFICIENT_DATA 变为 ALARM。我在处理一些警报时注意到了这种活动。
就我而言:
- 我有一个警报,当 CPUUtilization 的 LessThanThreshold 5.0 持续 1 小时时,它会停止一个实例,共有 6 个评估期,每 10 分钟一个。
- 当警报在 INSUFFICIENT_DATA 之后获取新数据时,它似乎会触发我的警报进入 ALARM 状态,因为我认为它将 INSUFFICIENT_DATA 视为 0.0(不要引用我的话,这只是我根据正在进行的一些测试得出的假设)。
- 尽管第一个点可能为 25.6%,但最后 5 个点是 INSUFFICIENT_DATA(可能是 0.0?),所以平均值约为 4.2,即 LessThanThreshold 5.0。
- 然后我的警报就被触发了,尽管从技术上讲只有 10 分钟的“真实”数据。
为了缓解这种情况,我设置了一个脚本,以便每当启动一个实例时都会创建警报,并且每当触发警报时它会在停止分配给它的实例后自行删除。
答案2
看来您以错误的方式配置了警报,根据上述邮件,您将其配置为在 LessThanThreshold 2.0 持续 3600 秒时触发。
要解决此问题,请执行以下操作:-
在 CloudWatch 管理控制台中,只需选择警报,您就会看到以下阈值说明,如下图所示:阈值:CPUUtilization >= 70 持续 5 分钟
右键单击警报并根据需要进行修改
- 您可以使用 as-describe-alarm api 来确保您的警报信息,如以下链接所示 API 描述