触发 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 创建满足您的条件的指标,然后对此发出警报。
以下是可用函数列表:
你将不得不计算数学,看看这对你是否可行。
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'
)
我正在使用由 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 创建满足您的条件的指标,然后对此发出警报。
以下是可用函数列表:
你将不得不计算数学,看看这对你是否可行。
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'
)