【以下的问题经过翻译处理】 场景:
我有一个触发 SNS 主题的 cloudwatch 报警操作。报警指标被配置为过滤 Lambda 日志组中的重要事件。Lambda(每 15 分钟调用一次)检查处于 "错误 "状态的 CloudFormation 堆栈,并记录处于错误状态的每个堆栈的关键事件。
Logs::MetricFilter
FilterPattern: '{$.level="CRITICAL"}'
MetricValue: 1
CloudWatch::Alarm
AlarmActions: Send to SNS Topic
Period: 600
TreatMissingData: notBreaching
ComparisonOperator: GreaterThanOrEqualToThreshold
Threshold: 1
EvaluationPeriods: 1
Statistic: Maximum
当1个堆栈处于错误状态时,Cloudwatch警报可以按预期工作:
- 选择CRITICAL事件
- 警报状态更改为“In Alarm”
- 触发SNS主题
挑战:
如果任何其他堆栈进入错误状态(例如15分钟后),并且初始堆栈仍处于错误状态,则警报不会对其进行操作,即不会触发SNS主题。根据研究,我了解到这是正常行为,因为“如果您的指标值仍然违反阈值,则警报将保持ALARM状态,直到它不再违反该阈值为止。”
我也进行了测试并确认了这一点-我使用boto3将set_alarm_state设置回OK,手动调用Lambda,警报状态被改回“In Alarm”,并且SNS主题被触发。
问题:
是否有任何其他适当的配置或逻辑,我可以使用来为处于错误状态的每个堆栈触发SNS主题?