Terraform配置AWS Canary告警无邮件通知问题求助
解决AWS Canary失败时CloudWatch告警不触发的问题
你的核心问题出在CloudWatch告警的指标命名空间配置错误,另外还有指标选择、周期匹配的细节需要调整,以下是具体修正方案:
1. 核心错误:错误的CloudWatch指标命名空间
你当前配置的namespace = "AWS/Lambda"是错误的,Synthetics Canary的监控指标属于AWS/Synthetics命名空间,这直接导致告警无法找到对应指标,自然不会触发。
2. 修正后的CloudWatch告警配置
结合Canary的调度频率(5分钟一次),调整指标名称、周期等参数,确保告警逻辑匹配实际场景:
resource "aws_cloudwatch_metric_alarm" "my-alarm" { alarm_name = "my-canary-alarm" comparison_operator = "GreaterThanOrEqualToThreshold" evaluation_periods = 1 # 连续1次失败即触发告警,可按需调整 metric_name = "Failed" # 使用Canary原生的Failed指标,统计失败次数 namespace = "AWS/Synthetics" # 修正为正确的命名空间 period = 300 # 和Canary的5分钟调度周期保持一致 statistic = "Sum" threshold = 1 alarm_description = "This alarm fires if the canary fails" insufficient_data_actions = [] alarm_actions = [aws_sns_topic.my-topic.arn] dimensions = { CanaryName = aws_synthetics_canary.my-api-canary.name # 引用资源属性,避免硬编码 } }
3. 补充必要的SNS主题权限
需要确保CloudWatch有权限向你的SNS主题发送告警消息,添加以下SNS主题策略:
resource "aws_sns_topic_policy" "my-topic-policy" { arn = aws_sns_topic.my-topic.arn policy = jsonencode({ Version = "2012-10-17" Id = "AllowCloudWatchAlarmsPublish" Statement = [ { Effect = "Allow" Principal = { Service = "cloudwatch.amazonaws.com" } Action = "sns:Publish" Resource = aws_sns_topic.my-topic.arn } ] }) }
4. 额外验证步骤
- 登录CloudWatch控制台,进入
AWS/Synthetics命名空间,查看你的Canary的Failed指标是否在失败时产生数值; - 确认Canary执行角色包含
cloudwatch:PutMetricData权限(确保指标能正常上报); - 测试告警:手动触发Canary失败,观察CloudWatch告警状态是否切换为
ALARM,同时检查SNS主题的消息记录。
内容的提问来源于stack exchange,提问作者Jaco Van Niekerk
相关产品推荐
相关产品推荐

