在使用AWS过程中,一般会基于CPU使用率、每个目标的请求数等来进行AutoScaling。不过有时会根据自定义指标来进行缩放AutoScaling组大小,本文以AutoScaling组平均内存使用率作为具体的自定义指标来进行扩展。实际生产过程中,不推荐使用内存使用率来进行缩放AutoScaling组。
自定义指标首先需要安装CloudWatch Agent,或自己发送指标到CloudWatch。
查看内存安装CloudWatch Agent即可,安装CloudWatch Agent参见https://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/download-cloudwatch-agent-commandline.html。
然后创建Role,使用此角色的服务为EC2,策略选中CloudWatchAgentServerPolicy,角色名称设置为CloudWatchAgentServerRole。然后再在EC2上附加这个角色。
接下来即可使用
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -s
启动Agent。然后在CloudWatch控制台上,指标->全部指标->自定义命名空间CWAgent->AutoScalingGroupName,ImageId,InstanceId,InstanceType即可看到Agent发过来的信息。
这个时候我们可以创建警报,创建警报时,我们期望的是只要指标名称和AutoScalingGroupName,但是对InstanceId和ImageId等,发现删除不了。
对于这个情况,需要修改Agent的配置文件。运行
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard
,按自己需求进行选择,最后文件生成到/opt/aws/amazon-cloudwatch-agent/bin/config.json。注意,需要手动修改config.json,删除metrics_collected下的collectd这节,否则会报E! Error parsing /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml, open /usr/share/collectd/types.db: no such file or directory。在metrics下添加:"aggregation_dimensions" : [["InstanceId"], ["AutoScalingGroupName"]],
参考配置文件如下:
{
"agent": {
"metrics_collection_interval": 60,
"run_as_user": "root"
},
"metrics": {
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"aggregation_dimensions" : [["InstanceId"], ["AutoScalingGroupName"]],
"metrics_collected": {
"disk": {
"measurement": [
"used_percent"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
接着停止Agent,
sudo amazon-cloudwatch-agent-ctl -a stop
,然后带配置文件参数运行Agent,
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s
。
后续就可以在CloudWatch中看到期望的结果了。
查看Agent运行状态,
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -m ec2 -a status