我希望我的目标跟踪策略基于 ASG 的 CPU 利用率。我知道 EC2 提供基本监控,包括
CPUUtilization
指标,但仅限 5 分钟一次。我还知道我可以对所有实例启用详细监控,以便以 1 分钟的间隔启用指标,但据我了解,这是一种“全有或全无”类型的事情,我必须为所有 EC2 指标(网络等)作为自定义指标(对于我的实例类型,有 16 个指标,这意味着 16 * $0.3 = $4.8 的额外成本/月/实例。如果我的假设错误,请纠正我)。
因此,我使用在 ASG 实例上运行的 CloudWatch 代理,并具有以下
amazon-cloudwatch-agent.json
配置:
...
"metrics": {
"namespace": "AWS/EC2",
"append_dimensions": {
"AutoScalingGroupName": "$${aws:AutoScalingGroupName}",
"InstanceId": "$${aws:InstanceId}"
},
"aggregation_dimensions": [
["AutoScalingGroupName"]
],
"metrics_collected": {
...
"cpu": {
"measurement": [
{
"name": "cpu_usage_user",
"rename": "CPUUtilizationUser"
},
{
"name": "cpu_usage_system",
"rename": "CPUUtilizationSystem"
}
],
"metrics_collection_interval": 60,
"resources": ["*"],
"totalcpu": true
}
}
}
CPUUtilizationUser
和CPUUtilizationSystem
的总和与实际CPU利用率非常匹配,我只为每个实例支付2个额外的自定义指标,而不是16个(再次,如果假设错误,请纠正我)。
问题是如何将这两个自定义指标的总和用于我的 ASG 的目标跟踪策略?我知道您可以对 CloudWatch 警报使用数学表达式,但我没有看到它可用于扩展策略。
请注意,我使用 Terraform 来预置所有 AWS 资源,包括扩展策略。目前看起来是这样的:
resource "aws_autoscaling_policy" "target_tracking" {
...
policy_type = "TargetTrackingScaling"
target_tracking_configuration {
customized_metric_specification {
metric_name = // here I want CPUUtilizationUser + CPUUtilizationSystem basically
namespace = "AWS/EC2"
statistic = "Average"
metric_dimension {
name = "AutoScalingGroupName"
value = aws_autoscaling_group.application.name
}
}
}
}
关于如何做到这一点有什么想法吗? 非常感谢!