2

我正在部署一个 AutoScalingGroup,其中 AutoScalingPolicies (ScaleUp & ScaleDown) 由 CloudWatch Alarm 触发(CPU > 70%, CPU < 10%)

AutoScaling 运行良好,但是...一旦 AutoScalingGroup 达到最小实例数 (2),CPU < 10%警报会持续ALARM STATE数小时...天...而不会重置为OK STATE.

因为 CPU 利用率保持在 10% 以下,所以我知道警报永远不会回到OK STATE.

我知道它的存在AlarmActions类似于:

arn:aws:automate:${AWS::Region}:ec2:recover(对于 EC2)

我搜索了类似的 Cloudwatch 操作,没有找到任何东西。

我有一个自定义解决方案:使用 Lambda 更改Alarm State to OK但我想知道是否存在更智能/更简单的解决方案。

有人知道该怎么做吗?

谢谢。

4

2 回答 2

2

听起来您需要的是使用 AND 子句聚合警报的能力。CPU < 10% AND instance_count > 2 时发出警报。不幸的是,CloudWatch 不允许您直接组合这样的警报。

此问题的当前解决方案是使用 Metric Math 创建一个符合您的标准的指标,然后对此发出警报。

https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/Create-alarm-on-metric-math-expression.html

以下是可用功能的列表:

https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/using-metric-math.html#metric-math-syntax

您将不得不计算数学,看看这对您来说是否可行。

CPU+10+(-10*CEIL((instance_count-2)/<MAX_ALLOWED_INSTANCE_COUNT>))

于 2019-08-16T15:17:22.870 回答
-1

您还可以将 Lambda 函数订阅到重置警报的 SNS 主题:

import boto3

# Create CloudWatch client
cloudwatch = boto3.client('cloudwatch')

# Reset the testalarm to OK
def resetAlarmState(event,context):
    response = cloudwatch.set_alarm_state(
        AlarmName='testalarm',
        StateValue='OK',
        StateReason='Resetting to OK'
    )
于 2020-04-16T20:20:41.353 回答