触发 AWS CloudWatch 自动重置 (OK) 警报

AWS CloudWatch auto-reset (OK) alarm on trigger

我正在使用由 CloudWatch 警报触发的 AutoScalingPolicies(ScaleUp 和 ScaleDown)部署 AutoScalingGroup (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 但我想知道是否存在 smarter/easier 解决方案。

有人知道怎么做吗?

谢谢。

听起来您需要的是使用 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>))

您还可以将 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'
    )