CloudWatch 自定义 EC2 内存指标和带有 AutoScaling 策略的警报
Posted
技术标签:
【中文标题】CloudWatch 自定义 EC2 内存指标和带有 AutoScaling 策略的警报【英文标题】:CloudWatch custom EC2 memory metric and alarm with AutoScaling policy 【发布时间】:2018-08-05 18:36:21 【问题描述】:我的目标是根据我的 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 实例并使用“压力”增加使用的内存。发出警报,触发 AutoScaling 策略并创建新的 EC2 实例。
我看到的问题是我在特定 EC2 实例上创建警报,而不是在整个 AutoScaling 组上创建警报,并且一旦初始 EC2 实例终止,警报就不再有意义。 除了 AutoScaling 组,我如何配置相同的想法?
谢谢。
【问题讨论】:
Auto Scaling Group 的聚合统计信息是您要查找的内容? docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/… 是的,但是对于使用 CloudWatch 代理的自定义指标。 我认为您可以查看 [Aggregating or Rolling Up Metrics Collected by the CloudWatch Agent] 部分docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/… 如果您使用 Pearl 脚本,请查看 --aggregate / --autoscaling 选项@987654326 @ 感谢 qkhanhpro。我会对其进行测试,并让您知道它是否有效。 "aggregation_dimensions" : [["AutoScalingGroupName"], ["InstanceId", "InstanceType"]]。这就像一个魅力。 @qkhanhpro - 你想把它作为答案吗? 【参考方案1】:来自 AWS 文档,
对于 CloudWatch 代理,您可以使用 aggregation_dimensions
聚合自定义指标
"metrics":
"cpu":...
"disk":...
"aggregation_dimensions" : [["AutoScalingGroupName"], ["InstanceId", "InstanceType"]]
https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Agent-common-scenarios.html
对于那些仍在使用旧 perl 脚本的人,请检查选项:
--aggregated
--auto-scaling
https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/mon-scripts.html
【讨论】:
嗨 @qkhanhpro 和 @Luis,我尝试在我的 cloudwatch 代理的配置中添加"aggregation_dimensions" : [["AutoScalingGroupName"], ["InstanceId", "InstanceType"]]
,但我仍然无法在任何地方看到聚合指标【参考方案2】:
我采取了同样的方法,但没有成功。
"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 的聚合
【讨论】:
你检查日志了吗?也许 json 可能无法正常工作。/opt/aws/amazon-cloudwatch-agent/logs
以上是关于CloudWatch 自定义 EC2 内存指标和带有 AutoScaling 策略的警报的主要内容,如果未能解决你的问题,请参考以下文章
如何让 CodeDeploy Blue/Green 为自定义指标创建 CloudWatch 警报?
AWS Cloudwatch get-metric-statistics 命令返回的是指标名称,而不是自定义 cloudwatch 指标的值
如何为自定义 cloudwatch 指标使用多个单独的维度?
AWS cloudwatch 自定义指标作为弹性 beantalk 自动缩放触发器