我正在部署具有由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
,但我想知道是否存在更聪明/更轻松的解决方案。
有人知道怎么做吗?
谢谢。
答案 0 :(得分:1)
听起来像您需要的是能够使用AND子句聚合警报的功能。如果CPU <10%AND instance_count> 2,则发出警报。不幸的是,CloudWatch不允许您直接组合类似的警报。
当前解决此问题的方法是使用“度量标准数学”来创建一个满足您条件的度量标准,然后对此发出警报。
以下是可用功能的列表:
您将必须计算出数学公式,以查看是否可行。
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'
)