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

时间:2019-08-16 13:53:27

标签: amazon-web-services amazon-cloudwatch cloudwatch-alarms

我正在部署具有由CloudWatch Alarm (CPU > 70%, CPU < 10%)触发的AutoScalingPolicies(ScaleUp和ScaleDown)的AutoScalingGroup。

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,但我想知道是否存在更聪明/更轻松的解决方案。

有人知道怎么做吗?

谢谢。

2 个答案:

答案 0 :(得分:1)

听起来像您需要的是能够使用AND子句聚合警报的功能。如果CPU <10%AND instance_count> 2,则发出警报。不幸的是,CloudWatch不允许您直接组合类似的警报。

当前解决此问题的方法是使用“度量标准数学”来创建一个满足您条件的度量标准,然后对此发出警报。

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>))

答案 1 :(得分:0)

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