如何基于统一标签为多台EC2实例创建CloudWatch CPU利用率告警
基于EC2标签创建CloudWatch CPU利用率告警的三种实现方法
方法一:使用CloudWatch告警数学表达式(控制台操作)
这是最适合新手的可视化操作方式,自动适配标签实例的增减或更换:
- 打开CloudWatch控制台,进入「告警」页面,点击「创建告警」
- 在「选择指标」环节,切换到「数学表达式」标签页,点击「添加指标」
- 在指标选择器中,依次选择「EC2 > 按标签分组的指标」,筛选标签
Name=IT_EC2,勾选「CPUUtilization」指标后点击「添加到表达式」 - 此时会自动生成表达式:
SEARCH('{AWS/EC2,Name} IT_EC2', 'Average', 300),该表达式会实时匹配所有带指定标签的EC2实例CPU利用率 - 配置告警条件:选择「静态阈值」,设置阈值(比如70%)、评估周期(比如5分钟),触发规则设为「平均值大于阈值」
- 配置告警动作:选择已有的SNS主题(无则创建),设置接收告警的邮箱/终端
- 填写告警名称(如
IT_EC2_CPU_High)和描述,完成创建
方法二:使用AWS CLI命令(自动化场景)
适合需要批量部署或集成到CI/CD流程的场景,前提是已配置好AWS CLI权限:
- 创建SNS告警通知主题(若已有可跳过):
aws sns create-topic --name IT-EC2-CPU-Alerts
记录返回的TopicArn值。
- 创建基于标签的CloudWatch告警:
aws cloudwatch put-metric-alarm \ --alarm-name IT_EC2_CPU_High \ --alarm-description "告警:IT_EC2实例CPU利用率超过70%" \ --metric-name CPUUtilization \ --namespace AWS/EC2 \ --statistic Average \ --period 300 \ --evaluation-periods 1 \ --threshold 70 \ --comparison-operator GreaterThanThreshold \ --dimensions Name=Name,Value=IT_EC2 \ --alarm-actions <替换为你的SNS TopicArn> \ --treat-missing-data missing
若需用数学表达式方式(更灵活的实例匹配),可改用以下命令:
aws cloudwatch put-metric-alarm \ --alarm-name IT_EC2_CPU_High \ --alarm-description "告警:任意IT_EC2实例CPU利用率超过70%" \ --metrics '[{"Id": "m1", "Expression": "SEARCH(\"{AWS/EC2,Name} IT_EC2\", \"Average\", 300)", "Label": "IT_EC2_CPU_Average"}]' \ --evaluation-periods 1 \ --threshold 70 \ --comparison-operator GreaterThanThreshold \ --alarm-actions <替换为你的SNS TopicArn>
方法三:使用Lambda函数(复杂自定义场景)
适合需要额外逻辑处理(如过滤特定实例、自定义告警内容)的场景:
- 创建Lambda函数(推荐Python运行时),配置包含CloudWatch指标读取、EC2标签查询、SNS发送权限的IAM角色
- 编写核心逻辑:
- 调用
ec2.describe_instances()获取所有Name=IT_EC2的实例ID列表 - 调用
cloudwatch.get_metric_statistics()查询这些实例的CPU利用率数据 - 判断是否有实例CPU超过阈值,若有则调用
sns.publish()发送告警
- 调用
- 设置CloudWatch事件规则,定时触发Lambda(如每5分钟执行一次)
内容的提问来源于stack exchange,提问作者Pramod S
相关产品推荐
相关产品推荐

