CloudWatch 自定义 EC2 内存指标和带有 AutoScaling 策略的警报
CloudWatch custom EC2 memory metric and alarm with AutoScaling policy
我的目标是根据我的 EC2 实例上使用的内存测试 AutoScaling。
为了监控我的 EC2 实例内存,我在我的 EC2 实例上安装了 CloudWatch 代理,并创建并配置了我的 CloudWatch 代理配置文件,如下所述:
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file.html
{
"metrics": {
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"metrics_collected": {
"cpu": {
"measurement": [
"cpu_usage_idle",
"cpu_usage_iowait",
"cpu_usage_user",
"cpu_usage_system"
],
"metrics_collection_interval": 60,
"totalcpu": false
},
"disk": {
"measurement": [
"used_percent",
"inodes_free"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"diskio": {
"measurement": [
"io_time"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
},
"swap": {
"measurement": [
"swap_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
在 EC2 实例上启动 CloudWatch 代理后,自定义指标工作正常,我可以在 CloudWatch 上看到它们。
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm:configuration-parameter-store-name -s
我用这个 EC2 实例创建了一个 AMI,并用这个 AMI 创建了一个 AutoScaling 组。
然后,我根据自定义指标 "mem_used_percent"(当 >=50 时)设置警报,并将其用作 AutoScaling 组策略(添加 1 个实例)。附上图片。
我连接到 EC2 实例并使用 "Stress" 增加使用的内存。发出警报,触发 AutoScaling 策略并创建新的 EC2 实例。
我看到的问题是我在特定的 EC2 实例上创建警报,而不是在整个 AutoScaling 组上,并且一旦初始 EC2 实例终止,警报就不再有意义了。
除了 AutoScaling Group,我如何配置相同的想法?
谢谢。
来自 AWS 文档,
对于 CloudWatch 代理,您可以使用 aggregation_dimensions
聚合自定义指标
"metrics": {
"cpu":{...}
"disk":{...}
"aggregation_dimensions" : [["AutoScalingGroupName"], ["InstanceId", "InstanceType"]]
}
对于仍在使用旧的 perl 脚本的用户,请检查选项:
--aggregated
--auto-scaling
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mon-scripts.html
我采用了相同的方法,但没有成功。
{
"metrics": {
"metrics_collected": {
"LogicalDisk": {
"measurement": [
"% Free Space"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"Memory": {
"measurement": [
"% Committed Bytes In Use"
],
"metrics_collection_interval": 60
},
"Paging File": {
"measurement": [
"% Usage"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"PhysicalDisk": {
"measurement": [
"% Disk Time"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"Processor": {
"measurement": [
"% User Time",
"% Idle Time",
"% Interrupt Time"
],
"metrics_collection_interval": 60,
"resources": [
"_Total"
]
}
},
"append_dimensions": {
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}",
"AutoScalingGroupName": "${aws:AutoScalingGroupName}"
},
"aggregation_dimensions" : [["AutoScalingGroupName"]]
}
}
当我查看 cloudwatch 管理控制台中的输出时,我没有看到 All>CWAgent
下 AutoScalingGroupName 的聚合
我的目标是根据我的 EC2 实例上使用的内存测试 AutoScaling。
为了监控我的 EC2 实例内存,我在我的 EC2 实例上安装了 CloudWatch 代理,并创建并配置了我的 CloudWatch 代理配置文件,如下所述: https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Install-CloudWatch-Agent.html https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/create-cloudwatch-agent-configuration-file.html
{
"metrics": {
"append_dimensions": {
"AutoScalingGroupName": "${aws:AutoScalingGroupName}",
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}"
},
"metrics_collected": {
"cpu": {
"measurement": [
"cpu_usage_idle",
"cpu_usage_iowait",
"cpu_usage_user",
"cpu_usage_system"
],
"metrics_collection_interval": 60,
"totalcpu": false
},
"disk": {
"measurement": [
"used_percent",
"inodes_free"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"diskio": {
"measurement": [
"io_time"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"mem": {
"measurement": [
"mem_used_percent"
],
"metrics_collection_interval": 60
},
"swap": {
"measurement": [
"swap_used_percent"
],
"metrics_collection_interval": 60
}
}
}
}
在 EC2 实例上启动 CloudWatch 代理后,自定义指标工作正常,我可以在 CloudWatch 上看到它们。
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm:configuration-parameter-store-name -s
我用这个 EC2 实例创建了一个 AMI,并用这个 AMI 创建了一个 AutoScaling 组。 然后,我根据自定义指标 "mem_used_percent"(当 >=50 时)设置警报,并将其用作 AutoScaling 组策略(添加 1 个实例)。附上图片。
我连接到 EC2 实例并使用 "Stress" 增加使用的内存。发出警报,触发 AutoScaling 策略并创建新的 EC2 实例。
我看到的问题是我在特定的 EC2 实例上创建警报,而不是在整个 AutoScaling 组上,并且一旦初始 EC2 实例终止,警报就不再有意义了。 除了 AutoScaling Group,我如何配置相同的想法?
谢谢。
来自 AWS 文档,
对于 CloudWatch 代理,您可以使用 aggregation_dimensions
"metrics": {
"cpu":{...}
"disk":{...}
"aggregation_dimensions" : [["AutoScalingGroupName"], ["InstanceId", "InstanceType"]]
}
对于仍在使用旧的 perl 脚本的用户,请检查选项:
--aggregated
--auto-scaling
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mon-scripts.html
我采用了相同的方法,但没有成功。
{
"metrics": {
"metrics_collected": {
"LogicalDisk": {
"measurement": [
"% Free Space"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"Memory": {
"measurement": [
"% Committed Bytes In Use"
],
"metrics_collection_interval": 60
},
"Paging File": {
"measurement": [
"% Usage"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"PhysicalDisk": {
"measurement": [
"% Disk Time"
],
"metrics_collection_interval": 60,
"resources": [
"*"
]
},
"Processor": {
"measurement": [
"% User Time",
"% Idle Time",
"% Interrupt Time"
],
"metrics_collection_interval": 60,
"resources": [
"_Total"
]
}
},
"append_dimensions": {
"ImageId": "${aws:ImageId}",
"InstanceId": "${aws:InstanceId}",
"InstanceType": "${aws:InstanceType}",
"AutoScalingGroupName": "${aws:AutoScalingGroupName}"
},
"aggregation_dimensions" : [["AutoScalingGroupName"]]
}
}
当我查看 cloudwatch 管理控制台中的输出时,我没有看到 All>CWAgent
下 AutoScalingGroupName 的聚合