亚马逊AWS官方博客

监控告警一点通:在CloudWatch上为 EC2批量添加告警

背景介绍

Amazon CloudWatch 为AWS各项资源提供监控、展示、告警等功能,帮助您了解资源运行的数据和见解。您可以基于这些数据添加告警,以便在发生异常状况,如CPU利用率过高,进出流量异常时得到通知或触发处置操作。由于CloudWatch控制台不支持批量添加告警的功能,在EC2实例数量多时,通过控制台使用CloudWatch为EC2实例添加告警会很不便。为了解决这个问题,我们为您提供此解决方案,让您可视化点选需要添加监控的实例,设置相应规则,并批量添加告警。

架构与工作原理

解决方案的工作原理如下图:

您使用此方案提供的CloudFormation会创建一个监控VPC,以及其中的一个公有子网。在公有子网中会启动一台很小的EC2实例,部署监控服务器软件,供您通过浏览器访问。

之后您访问监控管理页面,选择需要添加监控的服务器(位于您自己的生产VPC中),设置相应的规则,批量生成CloudWatch告警。在CloudWatch告警的触发行为中,您可以设置发送到已有的SNS,从而通过邮件或其他方式及时通知到您;也可以设置EC2实例的行为,例如自动重启,从而尝试修复问题。

完成告警的批量添加后,您就可以在AWS管理控制台中查看到您添加的CloudWatch告警。这样原本您需要逐个手动添加的告警,可以完全自动化地完成,免去枯燥的添加过程。

安全方面,在创建CloudFormation时,您可以设置允许访问监控管理页面的IP范围,避免未经授权的访问。

快速部署流程
1. 登录AWS控制台(目前只支持AWS全球区域,不支持中国区域),选择CloudFormation服务,进入到CloudFormation页面。

2. 在CloudFormation页面中,点击【创建堆栈】,选择【使用新资源(标准)】。如果您是第一次使用CloudFormation,看到的页面会有所不同,同样是选择画面中央的【创建堆栈】,进入堆栈的创建流程。

3. 在指定模版选项中,选择Amazon S3 URL,输入 https://aws-gcr-solutions.s3.cn-north-1.amazonaws.com.cn/cloudwatch-alert-automations/v0.1.11/BatchMonitor.template.json ,从S3上获取模板。然后点击下一步。

4. 为您的堆栈命名,例如BatchMonitor,然后填写下面的选项。Instancetype选项设置的是监控服务器的实例类型,如果实例数量不是特别多,使用t2.micro就可以;keyname选项设置的是监控服务器的密钥名称,您可以填写一个现有的密钥;visitip选项设置的是可以访问添加监控页面的IP地址,您可以填写您本机公有IP地址,或办公室的公有IP网段。设置完成后连续点击下一步到审核页面。

5. 由于涉及到服务之间的调用,这个CloudFormation需要创建IAM资源。在下方的确认选项上打勾,然后点击右下方的创建堆栈,等待堆栈创建完成。这一般只需要几分钟的时间。

6. 等堆栈的状态变为绿色后,监控服务器就可用了。选中刚刚创建的CloudFormation堆栈,点击【输出】选项卡,可以看到下方的提供了访问的URL,将此URL复制到浏览器中即可访问。

使用流程

1. 使用之前创建的CloudFormation堆栈提供的URL,访问批量管理告警的网页。

2. 在网页中配置相应的指标,具体解释如下:

指标名称:要设置的指标名称,如CPU利用率、磁盘写入字节等。

区域:要添加CloudWatch告警的EC2实例所在的区域。

分组类型和名称:需要配置的EC2实例的范围。

·       如果您希望为所有此区域的实例添加告警,分组类型选择All,分组名称也输入All。

·       如果您只希望为某一个AutoScaling组中的实例添加告警,分组类型选择AutoScaling Group 名称,分组名称输入这个AutoScaling Group的名称(可以从EC2控制台的AutoScaling Group中获取到)。

·       如果您使用了资源组来标识和管理EC2实例,并且只希望为某一个资源组内的EC2实例添加告警,分组类型选择Resource Group 名称,分组名称填写这个Resource Group的名称。

·       如果您只希望为使用了特定AMI的EC2实例创建告警,分组类型选择AMI ID,分组名称输入这个AMI的ID。

·       如果您只希望为特定标签的实例添加告警,分组类型选择Tag,分组名称按照Tagname:Tagvalue的格式输入,例如这些实例都打了Name为production的标签,这里输入的就是Name:production。

统计数据:指标的统计规则,如平均值、最大值、最小值等。

间隔:指标数据的统计周期,如设置5分钟就是取5分钟内的指标做统计,决定是否触发告警。

条件:设置具体的警报触发条件,如CPU利用率这个指标大于70时触发,以及满足触发条件需要的数据点,例如设为1就是说只要收到1次指标大于70的情况,就会触发告警。缺失数据处理项指的是对缺失数据的处理办法,可以标记为超出阈值、不超出阈值或直接忽略,如果希望不放过可疑情况,确保接收到通知的话,建议选择默认的【作为超出阈值处理】。

通知:可用功能,非必填。根据警报状态触发SNS,从而及时通知到运维人员。一般使用【警报中】作为触发器,然后输入您的SNS ARN(需要另外在SNS中创建,并设置通知到的邮件),就可以添加信息通知。

EC2操作:根据警报状态触发EC2操作,例如恢复实例、停止实例等,可以根据您的实际业务场景进行配置。

名称和描述:最终创建的警报的名称,可以设置前缀以及描述,来帮助您在管理时了解这些警报的作用。

3. 完成各项指标配置后,点击最下方的【提交】按钮,开始批量添加告警。等待过程中会显示Processing,根据您实例数量的不同,等待时长会有不同。完成后会在下方显示已完成。

4. 登录AWS控制台,访问CloudWatch服务,在警报中就可以看到添加的所有告警了。

5. 之后可以根据您的其他规则批量创建新的告警,以及通过控制台管理这些告警。

小结

综上所述,使用本方案可以帮助您方便地查看、管理您的EC2告警,并批量添加告警,从而简化您使用CloudWatch监控资源的流程,提高管理效率。

参考资料

  1. Amazon CloudWatch:https://aws.amazon.com/cn/cloudwatch/
  2. AWS CloudFormation:https://docs.aws.amazon.com/zh_cn/AWSCloudFormation/latest/UserGuide/Welcome.html
  3. Amazon SNS:https://docs.aws.amazon.com/zh_cn/sns/latest/dg/welcome.html

本篇作者

汤哲

AWS解决方案架构师,负责基于 AWS 的云计算方案的咨询与架构设计,同时致力于 AWS 云服务知识体系的传播与普及。在软件开发、安全防护等领域有实践经验,目前关注电商、直播领域。