【问题标题】:AWS CloudWatch auto-reset (OK) alarm on triggerAWS CloudWatch 触发时自动重置 (OK) 警报
【发布时间】:2023-03-12 12:20:01
【问题描述】:

我正在部署一个 AutoScalingGroup,其中包含由 CloudWatch 警报 (CPU > 70%, CPU < 10%) 触发的 AutoScalingPolicies(ScaleUp 和 ScaleDown)。

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,但我想知道是否存在更智能/更简单的解决方案。

有人知道怎么做吗?

谢谢。

【问题讨论】:

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


    【解决方案1】:

    听起来您需要的是使用 AND 子句聚合警报的能力。 CPU 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>))

    【讨论】:

    • 谢谢!我也会添加 MinInstanceCount 参数。
    【解决方案2】:

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

    【讨论】:

    • documentation 表示 set_alarm_state 方法仅用于测试目的,警报将返回到之前的状态。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-12
    • 1970-01-01
    • 2020-06-10
    • 1970-01-01
    • 2021-10-30
    • 2015-09-28
    相关资源
    最近更新 更多