只要评估间隔持续,AWS CloudWatch 警报就会一直发送邮件

Posted

技术标签:

【中文标题】只要评估间隔持续,AWS CloudWatch 警报就会一直发送邮件【英文标题】:AWS CloudWatch alarm keeps sending mails for as long as evaluation interval lasts 【发布时间】:2019-11-19 12:48:25 【问题描述】:

我已经使用以下参数设置了 AWS CloudWatch 警报:

ActionsEnabled: true
AlarmActions: "some SNS topic"
AlarmDescription: "Too many HTTP 5xx errors"
ComparisonOperator: GreaterThanOrEqualToThreshold
DatapointsToAlarm: 1
Dimensions:
  - Name: ApiName
    Value: "some API"
EvaluationPeriods: 20
MetricName: 5XXError
Namespace: AWS/ApiGateway
Period: 300
Statistic: Average
Threshold: 0.1
TreatMissingData: ignore

这个想法是在有太多 HTTP 500 错误时接收邮件。我相信上面给了我一个评估 5 分钟(300 秒)时间段的警报。如果 20 个数据点中有 1 个超过限制(10% 的请求),我应该会收到一封电子邮件。

这行得通。我收到电子邮件。但即使错误数量再次降至阈值以下,我似乎仍会继续收到电子邮件。评估间隔的整个持续时间(1h40min = 20 x 5 分钟)似乎或多或少。此外,我每 5 分钟收到一次这些邮件,这让我认为肯定与我的配置有关。

This question 暗示这不应该发生,这对我来说似乎是合乎逻辑的。事实上,我预计至少 1 小时 40 分钟(20 x 5 分钟)内不会收到电子邮件,即使再次超出阈值。

这是我的指标/警报的图表:

更正:我实际上收到了 22 封邮件。

我的配置是否出错?

更新 我可以看到在从 OK 设置为 Alarm 3 分钟后,状态从 Alarm 设置为 OK:

【问题讨论】:

【参考方案1】:

这是我们发现的以及我们如何修复它的。

因此,我们正在评估 5 分钟的块并取错误数量的平均值。但 AWS 的评估间隔比 5 分钟更快。你的错误分布可以是这样的,在给定的时间点,一个 5 分钟的块平均有 12%。但稍后,这个块可能会被分成两部分,给你两个具有不同平均值的块,可能低于阈值。

这就是我们相信正在发生的事情。

我们已通过将 Period 更改为 60s 并更改 DatapointsToAlarm 和 EvaluationPeriods 设置来修复它。

【讨论】:

以上是关于只要评估间隔持续,AWS CloudWatch 警报就会一直发送邮件的主要内容,如果未能解决你的问题,请参考以下文章

是否可以确定在 cloudwatch aws 上发送警报的时间?

配置 cloudwatch “空闲”警报

aws CloudWatch agent 配置

地形导入 aws_cloudwatch_log_stream

Terraform AWS Cloudwatch 警报

AWS Grafana/CloudWatch - 如何按 accountId 显示账单