CloudWatch介绍
CloudWatch是AWS提供的可以用来实时监控AWS资源以及运行在AWS上的应用的一个服务,通过收集和跟踪指标数据来评估相关资源和应用程序,通过CloudWatch,用户可以全面直观地了解资源的使用情况已经应用程序的运行性能。通过下图可以看出,CloudWatch在AWS的安全体系中扮演着检测以及自动响应的角色。CloudWatch用来监控的功能是Alarms,创建一个Alarm意味着对某个资源或程序进行监控,如果监控的对象的指标数据处于异常状态,就会触发该Alarm,从而进行相应的行为。常见的触发告警后的行为包括通过SNS(Simple Notification Service)发送告警消息,以及自动响应告警(例如服务器扩容、停止、重启以及记录事件等动作)。
如下图所示为CloudWatch的工作原理图,可以看出,CloudWatch的核心功能在于收集和管理各类指标数据,然后对于指标数据的用途有两种,一种是提供可观测的能力,一种是基于指标数据创建告警。指标数据的来源一般分为两种:
- 自动为AWS资源创建指标数据。例如用户购买了EC2服务,那么在Metrics中就可以直接添加EC2的各种指标(如CPU使用率、磁盘使用率等)。
- 用户手动生成指标数据。例如在CloudWatch中添加了某些日志,对于这些日志可以添加一个指标过滤器(如过滤事件类型为登录的操作),那么就可以对这些日志就可以得到对应的指标数据。
CloudWatch的基本告警类型有两种,分别是静态阈值告警和异常检测告警。静态阈值告警就是将指标数据与用户设定的阈值进行比较,超过该阈值就会触发告警;异常检测告警会根据历史指标数据使用机器学习的训练模型计算出指标数据的正常区间,如果指标数据超过了这个正常区间就会触发告警。创建一些常见的告警请参考AWS官方文档Using alarms。
CloudWatch-Alarms使用
CloudWatch的Alarms的本质上是对指标数据的监控,因此对于某些资源和应用程序没有自动生成指标数据的话,就需要用户手动地创建出Metric,才能对其监控。下面将使用监控EC2的CPU使用率作为示例来演示如何使用CloudWatch的Alarms功能。
创建一个Alarm的步骤如下:
- 选择指标数据
如下图所示为选择了某个EC2的的CPU使用率指标数据后的图表。
选定了指标数据以后,就可以配置指标数据和触发条件了。指标数据的配置主要包括两点,一点是Statistic(统计方式),一点是Period(计算周期)。默认的统计方式是平均值,意味周期结束的指标值为一个计算周期内指标数据的平均值。下图所示是触发条件和高级设置。
可以阈值类型分为静态和异常检测两种。在高级配置中有个Datapoints to alarm,如果用户配置的是2 out of 3,那么意味着如果在3个计算周期内,有大于等于2个计算周的指标值是超过阈值的才会触发告警。
- 配置行动
行动包括四种,分别是:
- Notification,指的是通过SNS发送告警通知,SNS支持邮件、短信、HTTP协议以及SQS(AWS的消息队列服务)。
- Auto Scaling action,指的是在触发告警时可以自动扩容。
- EC2 action,指的是触发告警时EC2的相关行为,如停止、重启。
- Systems Manager action,指的是在系统管理中创建一个操作项或者事件。
- 添加描述
最后为该Alarm添加一个名称以及描述就可以成功创建该Alarm。
CloudWatch接入开放告警
CloudWatch在告警方面的优势在于自动响应告警,缺点在于对于通知管理的功能尤为薄弱,例如用户无法配置告警通知的内容,对于国内的通知渠道不完善(通知渠道不包含钉钉、企业微信等),以及不支持轮岗代班场景和动态发送告警通知等,因此,将Cloud Watch的告警消息接入SLS的开放告警,可以极大地增强其告警的能力。将CloudWatch告警接入开放告警的步骤如下:
- 创建一个SNS主题,然后为这个主题创建一个订阅,协议需要选择HTTP,Endpoint选择创建开放告警应用后生成的接口信息,并且勾选中Enable raw message delivery。创建好了订阅以后,SNS会为这个Endpoint发送一个携带确认链接的HTTP请求,(如果协议选择的是邮件,那么SNS会为配置的邮箱发送一个确认邮件,用户需要点击确认邮件中的链接才能完成订阅),SLS会自定访问HTTP请求中的确认订阅链接,完成订阅后,订阅会处于Confirm状态,如下图所示。
- 进入目标Alarm的编辑界面,在配置行动的步骤为,添加两个Notification,其中一个通知的Alarm state trigger配置为In alarm或Insufficient data,表示告警处于对应的状态时,系统发送告警通知。另一个通知的Alarm state trigger配置为OK,表示告警恢复时,系统发送一条恢复通知。
- 完成Alarm的更新,在SLS中查看CloudWatch的告警消息。
总结
CloudWatch作为AWS上用于监控的一个服务,其检测异常以及自动响应的功能很强大,但是对于告警的通知管理功能比较薄弱,本质上是因为ClouWatch自身并不具备通知的功能,只能通过SNS服务来达到通知的目标。因此,将CloudWatch的告警消息接入到SLS中,就可以极大地增强其告警通知的功能,从而保证了用户能够稳定快速地解决问题。