问题
需要给EC2添加cpu,内存,磁盘等利用率的监控和告警。这里的指标监控,我直接用AWS CW Agent默认最新监控即可,告警创建,我们可以通过EB代码方式来创建。
前提
- 已经存在EB环境
- 已经存在SNS主题
步骤
SNS_TOPIC_ARN:EB环境变量设置
先要在EB环境中配置环境变量:SNS_TOPIC_ARN。如下图:

02cloudwatch.config:启用CW Agent
yaml
container_commands:
start_cloudwatch_agent:
command: /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -s -a fetch-config
这里让CW Agent拉取最新的配置,最新的配置会收集内存和磁盘等指标。拉取成功后,重启CW Agent即可。没必要画蛇添足自己再写自定义指标采集配置代码。
07cw-alarms.config:创建cpu,内存,磁盘告警
yaml
Resources:
CPUAlarmHigh:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmDescription: "CPU > 80% Alarm"
MetricName: CPUUtilization
Namespace: AWS/EC2
Statistic: Average
Period: 300
EvaluationPeriods: 1
Threshold: 80
ComparisonOperator: GreaterThanThreshold
Dimensions:
- Name: AutoScalingGroupName
Value: { "Ref" : "AWSEBAutoScalingGroup" }
AlarmActions:
- "Fn::GetOptionSetting":
Namespace: aws:elasticbeanstalk:application:environment
OptionName: SNS_TOPIC_ARN
MemoryAlarmHigh:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmDescription: "Memory > 80% Alarm"
MetricName: mem_used_percent
Namespace: CWAgent
Statistic: Average
Period: 300
EvaluationPeriods: 1
Threshold: 80
ComparisonOperator: GreaterThanThreshold
Dimensions:
- Name: AutoScalingGroupName
Value: { "Ref" : "AWSEBAutoScalingGroup" }
AlarmActions:
- "Fn::GetOptionSetting":
Namespace: aws:elasticbeanstalk:application:environment
OptionName: SNS_TOPIC_ARN
DiskAlarmHigh:
Type: AWS::CloudWatch::Alarm
Properties:
AlarmDescription: "Disk > 80% Alarm"
MetricName: disk_used_percent
Namespace: CWAgent
Statistic: Average
Period: 300
EvaluationPeriods: 1
Threshold: 80
ComparisonOperator: GreaterThanThreshold
Dimensions:
- Name: AutoScalingGroupName
Value: { "Ref" : "AWSEBAutoScalingGroup" }
AlarmActions:
- "Fn::GetOptionSetting":
Namespace: aws:elasticbeanstalk:application:environment
OptionName: SNS_TOPIC_ARN
上面就是3个告警的创建,以及从eb环境变量中取SNS主题ARN。
总结
这里对于我来说最不熟悉的就是从eb配置代码中取eb环境变量方式,即Fn::GetOptionSetting函数的使用。其它CW告警,已经比较熟悉了。