能否通过Terraform为Auto Scaling组的同一CloudWatch告警设置多条件?
能否通过Terraform为Auto Scaling组的同一CloudWatch告警设置多个触发条件?
你需要为Auto Scaling组的GroupMinSize指标设置两个触发条件:大于阈值1、小于阈值1,但CloudWatch单条指标告警不支持直接配置互斥的多条件触发。不过可以通过以下两种方式实现需求:
方式一:创建两条独立的指标告警
通过Terraform的count批量生成两条告警,分别对应两个条件:
resource "aws_cloudwatch_metric_alarm" "GroupMinSize" { count = 2 alarm_name = "Autoscaling_Group_Min_Size_${count.index == 0 ? "Above" : "Below"}_Threshold" comparison_operator = count.index == 0 ? "GreaterThanThreshold" : "LessThanThreshold" evaluation_periods = "2" metric_name = "GroupMinSize" namespace = "AWS/AutoScaling" statistic = "Minimum" period = "120" threshold = 1 dimensions = { AutoScalingGroupName = aws_autoscaling_group.asg[count.index].name } alarm_description = count.index == 0 ? "Auto Scaling组最小容量超过阈值1" : "Auto Scaling组最小容量低于阈值1" }
这种方式会生成两条独立告警,当GroupMinSize大于1或小于1时,对应告警会分别触发。
方式二:使用复合告警合并条件
先创建两个单条件的基础告警,再通过CloudWatch复合告警将它们合并,任意一个基础告警触发时,复合告警就会触发:
# 基础告警1:最小容量大于1 resource "aws_cloudwatch_metric_alarm" "GroupMinSize_Above" { alarm_name = "Autoscaling_Group_Min_Size_Above_Threshold" comparison_operator = "GreaterThanThreshold" evaluation_periods = "2" metric_name = "GroupMinSize" namespace = "AWS/AutoScaling" statistic = "Minimum" period = "120" threshold = 1 dimensions = { AutoScalingGroupName = aws_autoscaling_group.asg[0].name } alarm_description = "Auto Scaling组最小容量超过阈值1" } # 基础告警2:最小容量小于1 resource "aws_cloudwatch_metric_alarm" "GroupMinSize_Below" { alarm_name = "Autoscaling_Group_Min_Size_Below_Threshold" comparison_operator = "LessThanThreshold" evaluation_periods = "2" metric_name = "GroupMinSize" namespace = "AWS/AutoScaling" statistic = "Minimum" period = "120" threshold = 1 dimensions = { AutoScalingGroupName = aws_autoscaling_group.asg[0].name } alarm_description = "Auto Scaling组最小容量低于阈值1" } # 复合告警:任意一个基础告警触发时触发 resource "aws_cloudwatch_composite_alarm" "GroupMinSize_Deviation" { alarm_name = "Autoscaling_Group_Min_Size_Deviation" alarm_description = "Auto Scaling组最小容量偏离阈值1" alarm_rule = "ALARM(${aws_cloudwatch_metric_alarm.GroupMinSize_Above.alarm_name}) OR ALARM(${aws_cloudwatch_metric_alarm.GroupMinSize_Below.alarm_name})" }
复合告警适合需要统一接收告警通知的场景,只需配置一次通知规则即可覆盖两个触发条件。
内容的提问来源于stack exchange,提问作者Silvia Rotari
相关产品推荐
相关产品推荐

