如何在Terraform中正确配置ASG的CloudWatch内存利用率告警维度?
解决Terraform创建ASG内存利用率CloudWatch告警的问题
问题核心原因
CWAgent上报的mem_used_percent指标每个实例都带有InstanceId、ImageId等唯一维度,直接通过metric块仅指定AutoScalingGroupName维度时,CloudWatch无法自动聚合所有实例的指标;而空维度值又不符合AWS的参数验证规则。
正确的Terraform代码
替换原告警资源代码,使用CloudWatch Metric Math的SEARCH表达式匹配目标ASG下所有实例的指标并完成聚合:
resource "aws_cloudwatch_metric_alarm" "memory_utilization_high" { alarm_name = "HighMemoryUtilizationAcrossASG" comparison_operator = "GreaterThanOrEqualToThreshold" evaluation_periods = 3 threshold = 80 alarm_actions = [aws_sns_topic.asg_alerts.arn] treat_missing_data = "breaching" metric_query { id = "avg_memory" expression = "AVG(SEARCH('{CWAgent,AutoScalingGroupName} AutoScalingGroupName=\"${var.asg_name}\" mem_used_percent', 'Average', 300))" label = "Average Memory Utilisation across ASG" return_data = true } }
代码说明
SEARCH表达式负责筛选目标指标:{CWAgent,AutoScalingGroupName}指定搜索的命名空间为CWAgent,并基于AutoScalingGroupName维度过滤AutoScalingGroupName="${var.asg_name}"精准匹配你的目标ASGmem_used_percent指定要搜索的指标名称
AVG()函数对所有匹配到的实例指标计算平均值,逻辑与你使用CloudWatch Insights SQL查询完全一致- 无需拆分多个
metric_query块,单个表达式即可完成搜索与聚合
验证前提
确保你的CWAgent配置中已将AutoScalingGroupName作为维度上报(从你的Insights查询能正常返回数据来看,该条件已满足)。
内容的提问来源于stack exchange,提问作者Rene
相关产品推荐
相关产品推荐

