ECS Fargate CPU目标追踪自动扩缩容:低CPU利用率告警持续触发问题
问题
我运行着启用CPU目标追踪自动扩缩容的ECS Fargate服务,发现低CPU利用率的CloudWatch告警始终处于“告警中”状态。是否因为目标值设为70%,自动扩缩容告警会同时触发低于和高于70%的情况?我不希望该低CPU告警持续处于告警状态。
附CloudFormation配置代码:
#Policy type: Target Tracking scaling #Disable scale-in: No ### ECS Service Target Tracking Auto Scaling Configuration ECSScalableTarget: Type: AWS::ApplicationAutoScaling::ScalableTarget Condition: SetTargetTrackingAutoScaling Properties: MaxCapacity: 1 MinCapacity: 1 ResourceId: "serviceName" RoleARN: !Sub 'arn:aws:iam::${AWS::AccountId}:role/aws-service-role/ecs.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ECSService' ScalableDimension: 'ecs:service:DesiredCount' ## 1 The initial desired count to start with before Service Auto Scaling begins adjustment. ServiceNamespace: ecs ServiceScalingPolicyCPU: Type: AWS::ApplicationAutoScaling::ScalingPolicy Condition: SetTargetTrackingAutoScalingCPU Properties: PolicyName: target-tracking-cpu PolicyType: TargetTrackingScaling ScalingTargetId: !Ref ECSScalableTarget TargetTrackingScalingPolicyConfiguration: PredefinedMetricSpecification: PredefinedMetricType: ECSServiceAverageCPUUtilization TargetValue: 70 ScaleInCooldown: 180 ScaleOutCooldown: 60
原因分析
你的判断正确:目标追踪扩缩容策略会自动生成两个CloudWatch告警——一个监控CPU利用率高于70%(触发扩容),另一个监控CPU利用率低于70%(触发缩容)。但你的ECS服务配置了MinCapacity: 1和MaxCapacity: 1,实例数被固定为1,无法执行缩容操作。当CPU利用率低于70%时,缩容告警触发,但因已达最小实例数无法执行对应操作,导致告警持续处于“告警中”状态。
解决方案
有两种可行处理方式:
- 调整扩缩容范围:若业务允许,将
MinCapacity设为小于当前实例数的值(比如0),这样CPU利用率低于目标值时,服务可缩容到最小实例数,告警会自动恢复。修改ECSScalableTarget配置:
ECSScalableTarget: Type: AWS::ApplicationAutoScaling::ScalableTarget Condition: SetTargetTrackingAutoScaling Properties: MaxCapacity: 1 # 可根据业务需求调整 MinCapacity: 0 # 修改为允许缩容到0 ResourceId: "serviceName" RoleARN: !Sub 'arn:aws:iam::${AWS::AccountId}:role/aws-service-role/ecs.application-autoscaling.amazonaws.com/AWSServiceRoleForApplicationAutoScaling_ECSService' ScalableDimension: 'ecs:service:DesiredCount' ServiceNamespace: ecs
- 禁用缩容逻辑:若业务需要保持实例数至少为1,不想开启缩容,可在目标追踪策略中添加
DisableScaleIn: true,这样自动扩缩容只会创建扩容告警,不会生成低CPU的缩容告警。修改ServiceScalingPolicyCPU配置:
ServiceScalingPolicyCPU: Type: AWS::ApplicationAutoScaling::ScalingPolicy Condition: SetTargetTrackingAutoScalingCPU Properties: PolicyName: target-tracking-cpu PolicyType: TargetTrackingScaling ScalingTargetId: !Ref ECSScalableTarget TargetTrackingScalingPolicyConfiguration: PredefinedMetricSpecification: PredefinedMetricType: ECSServiceAverageCPUUtilization TargetValue: 70 ScaleInCooldown: 180 ScaleOutCooldown: 60 DisableScaleIn: true # 添加该参数禁用缩容
内容的提问来源于stack exchange,提问作者Sanjesh M
相关产品推荐
相关产品推荐

