我想在特定时间段内自动打开/关闭警报,这样它们就不会在维护窗口期间触发。我怀疑是否存在简单或直接的方法,因为我在文档中找不到这样的东西。有谁知道在仍然使用 CloudWatch 警报的同时实现这一目标的不同方法,还是我错过了一个明显的解决方案?
6 回答
我来到这里是在寻找可以帮助我禁用我的机器警报的东西,该机器在每周六 11:00 到 11:30 之间执行备份。我发现的唯一解决方案是创建 cronjob 来禁用/启用特定警报并在特定时间运行它们:
59 10 * * 6 ec2-user aws cloudwatch disable-alarm-actions --alarm-names "Alarm-1" "Alarm-2"
31 11 * * 6 ec2-user aws cloudwatch disable-alarm-actions --alarm-names "Alarm-1" "Alarm-2"
显然,您的节点需要能够访问 CloudWatch。我给了它 CloudWatchFullAccess。
另一个想法是使用数学表达式。在最简单的情况下,IF
和的组合HOUR
可能会有所帮助。这可以直接在 cloudwatch 中完成,无需 lambda 函数。
一个例子来说明这个想法:假设一个指标m
只接受自然数作为值,并且如果 触发警报m=0
。然后你可以使用表达式
IF(HOUR(m) > 8 && HOUR(m) < 18, m, m+0.01)
而不是m
在警报中。请注意,HOUR
它以 UTC 格式返回小时,因此请将其调整为您的时区。0.01
仅当小时在区间 [8, 18] 之外时才添加。万一m
实际上0
是额外的0.01
确保0
不触发警报检查。0.01
是一个任意值,必须足够小以不改变指标的含义。并非所有指标都可以找到这样的数字。我想你应该已经明白了。
要通过 Cloudwatch UI 将数学表达式添加到警报定义,请按以下顺序单击按钮:
- 在警报创建期间: 选择指标->查看图表指标->添加数学表达式
- 或在编辑警报期间: 编辑(在第一步中指定指标和条件)->添加数学表达式
(这个问题是最热门的谷歌搜索结果之一,所以我想添加一个对我有帮助的解决方法。)
这不是自动的,但可以做到:
http://docs.aws.amazon.com/AmazonCloudWatch/latest/APIReference/API_EnableAlarmActions.html
您要做的是:在维护窗口开始之前,您禁用警报操作。当窗口结束时,您启用警报操作。
扩展mrteutone 的答案,首先为类似的指标创建一个单独的指标警报
IF(8 <= HOUR(TIME_SERIES(1)) && HOUR(TIME_SERIES(1)) < 18, 1, 0)
并在值 > 0 时将其设置为警报:这会为您提供始终处于ALARM
8-18 UTC 之间的状态的警报。
然后,您可以将其与您的原始指标警报组合成一个复合警报,该警报仅在两个指标警报触发时才会响起。
同意。对“下班时间”的“数据存在”警报感到痛苦。我希望利用 AWS Lambda 的预定 CloudWatch 触发器,这是我们新的首选调度程序,用于以低于 1/分钟的速率调用操作。
https://docs.aws.amazon.com/lambda/latest/dg/with-scheduled-events.html https://boto3.amazonaws.com/v1/documentation/api/latest/reference/services/cloudwatch.html #CloudWatch.Client.disable_alarm_actions
是的,就像上面一样,您可以使用 CLI 来完成。此外,您可以停止从自定义指标的脚本 INCASE 发送数据,以便自动停止警报。
另一种方法是您可以编写一个脚本,您可以在其中使用 put-alarm (CloudWatch CLI) 定义警报。可能有一个创建警报的功能和一个删除警报的功能。需要时给他们打电话。