1 设置SNS消息通知
设置主题
在创建Cloudwatch警报之前,需要先设置好SNS,在控制台中输入SNS服务
SNS服务主要用于发送消息通知用,可以发送邮件,及发送到其他AWS服务中
在进入到SNS服务控制台之后,可以看到我们已经为国民创建了一个主题:
自己创建主题也很简单,直接点击创建主题,然后输入主题的名称,其他默认创建即可。
设置订阅
点击订阅,并创建订阅:
在创建订阅窗口中,主要输入以下三项:
1) 输入刚才的主题名称
2) 选择协议为电子邮件
3) 选择电子邮件之后,终端节点则需要输入自己的邮箱名称
全部输入完之后,创建订阅,则AWS会发送一份确认邮件,到刚才填写的邮箱中。
注:AWS发送的确认邮件,可能会放在垃圾邮件中,或者被拦截
在AWS发送的邮件中点击确认订阅之后,就可以在控制台中,看到订阅成功:
2 手动创建CloudWatch告警
创建CloudWatch告警的前提
主要有两个:
- 安装好CloudWatch Agent代理,用于在EC2上监控内存、磁盘指标
- 已经设置好SNS的主题和订阅,便于CloudWatch将告警信息发送到邮箱
那么前面工作都做好之后,就可以在AWS CloudWatch的控制台中来创建警报:
1)进入到CloudWatch控制台,创建警报
2)点击选择指标
3)选择要监控的指标
还是以CPU利用率为例子,在弹出的指标中,我们选择EC2:
选择每个实例的指标
选择某个要监控实例的CPUUtilization,CPU利用率指标
进入到下一步中,需要设置告警的阀值,如下图所示,主要有4个选项要设置:
选择静态:就是指定告警阀值
警报条件:有大于、大于等于、小于等于、小于
定义阀值:因为CPU利用率为% 百分比显示,指定85,就是85%
要报警的数据点:cloudwatch默认是5分钟监控一次,选择2个,那么就是监控10分钟
综合起来,就是在10分钟内,如果CPU利用率一直都是大于85%的话,就告警:
然后在警报中,选择刚才创建的SNS主题:
最后,输入警报的名称和描述,点击下一步确定之后,即可创建好一个警报
3 命令行创建CloudWatch告警
在第二章节中,主要是手动来创建一个CloudWatch的警报,一个实例可能需要监控CPU、内存、磁盘、网络等,那么就要手动创建cloudwath很多次。如果要对几十上百的实例来手动创建CloudWatch的警报,会非常耗时。
那么这时我们就可以通过脚本来创建CloudWatch的警报,可以通过shell脚本,python脚本等其他编程语言来编写脚本实现,而shell脚本里主要就是使用的aws cli命令
3.1 安装AWS CLI
要使用shell脚本来批量创建cloudwatch警报,需要使用到aws cli命令行工具,因此需要在EC2实例上安装好aws cli
执行如下3条命令,即可安装好aws cli命令行工具:
curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip" unzip awscliv2.zip sudo ./aws/install
安装完成后,即可使用aws --version命令来查看aws cli的版本
3.2 设置创建警报的权限
使用aws cloudwatch put-metric-alarm的命令来创建警报,需要拥有cloudwatch:PutMetricAlarm的权限。
因此我们需要创建一个IAM策略,并附加到角色中去:
1)创建IAM策略
进入到IAM服务控制台,选择创建策略:
2)复制JSON策略
将以下json信息,复制到json窗口中:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "cloudwatch:PutMetricAlarm",
"Resource": "*"
}
]
}
3)设置策略名称
在策略名称中输入名称,例如:CloudWatchPutMetricAlarm
4)将策略附加到角色
在角色中找到我们之前创建的CloudWatchAgentServerRole角色:
点击此角色,进入到此角色信息摘要里,并点击附加策略:
在策略中搜索刚才创建的CloudWatchPutMetricAlarm策略名称,并附加策略:
附加完成后,就可以看到此角色下有两个策略
3.3 通过AWS cli创建警报
由于之前已经将CloudWatchAgentServerRole角色附加到了EC2实例上,并且在EC2实例上已经安装了AWS CLI命令行工具,那么就可以把此EC2当作一台控制机器,在其上用如下的命令来创建一个警报:
| aws cloudwatch put-metric-alarm --alarm-name dev_ec2_192.168.1.1-CPU>=88% --metric-name CPUUtilization --namespace AWS/EC2 --statistic Average --period 300 --threshold 88 --comparison-operator GreaterThanThreshold --dimensions Name=InstanceId,Value=i-0897f3c1e32576431 --evaluation-periods 2 --alarm-actions arn:aws-cn:sns:cn-northwest-1:297669174308:lijun-demo --unit Percent --region cn-northwest-1 |
|---|
在以上命令中,标红的部分的参数,需要修改成自己帐号下的信息:
dev_ec2_192.168.1.1-CPU>=88% 是指创建的告警名称 CPUUtilization 是指监控CPU利用率指标 AWS/EC2 是指EC2名称空间 Average 是指监控的平均值 300 是指监控间隔,默认都是300秒,即5分钟 88 是设置的监控阀值 GreaterThanThreshold 是指警报条件为大于等于 i-0897f3c1e32576431 是为具体的实例ID创建告警信息 2 指的是数据点,而每个数据点--period 300指定的是300秒,即2个数据点,为10分钟 arn:aws-cn:sns:cn-northwest-1:297669174308:lijun-demo 是SNS的主题 Percent 为指标的单位,为百分比 cn-northwest-1 指的是区域,即宁夏区 |
其中SNS的主题ARN,可以在SNS的控制台中的主题部分找到:
aws cloudwatch put-metric-alarm 每个参数的含义,也可以查看官方文档:
https://docs.aws.amazon.com/cli/latest/reference/cloudwatch/put-metric-alarm.html
执行完此命令之后,就可以在CloudWatch的控制台中,看到创建的告警信息:
以上命令只是创建一个警报,如果要批量创建警报,就可以编写shell脚本,将其中的每个参数替换为变量,来循环创建。






















