关于删除Cloudwatch中Dynamodb自动扩缩容INSUFFICIENT_DATA告警的咨询
关于删除INSUFFICIENT_DATA状态的DynamoDB扩缩容CloudWatch告警的解答
绝对可以删除这类处于INSUFFICIENT_DATA状态的CloudWatch告警!这类告警之所以会进入这个状态,通常是因为它们关联的DynamoDB表已经被删除,或者告警规则依赖的扩缩容相关指标(比如ProvisionedReadCapacityUtilization、ProvisionedWriteCapacityUtilization)再也无法被CloudWatch采集到了。留着它们只会白白消耗CloudWatch的告警存储成本,完全没有实际监控价值,所以放心删就好。
下面分享几种实现删除的方式,包括手动批量删除和自动清理方案:
方法1:用AWS CLI批量快速清理
如果你想一次性处理掉现有这类告警,可以用AWS CLI结合jq工具筛选并删除:
- 先列出所有符合条件的告警(这里假设告警名称包含DynamoDB扩缩容相关关键词,比如
DynamoDB-Scaling-,你可以根据实际情况调整筛选逻辑):
aws cloudwatch describe-alarms --state-value INSUFFICIENT_DATA --query 'MetricAlarms[?contains(AlarmName, `DynamoDB-Scaling-`)].AlarmName' | jq -r '.[]' > dynamodb-alarms-to-delete.txt
- 再批量删除这些告警:
while read alarm; do aws cloudwatch delete-alarms --alarm-names "$alarm" done < dynamodb-alarms-to-delete.txt
如果你的告警没有统一前缀,也可以去掉contains筛选条件,直接删除所有INSUFFICIENT_DATA状态的告警,但记得确认这些都是你不需要的哦。
方法2:用Lambda+EventBridge实现自动清理
要是想一劳永逸,以后自动清理这类无效告警,可以搭建一个自动化流程:
- 创建一个Lambda函数,用Python编写的示例代码如下:
import boto3 def lambda_handler(event, context): cloudwatch_client = boto3.client('cloudwatch') # 分页获取所有处于INSUFFICIENT_DATA状态的告警 paginator = cloudwatch_client.get_paginator('describe_alarms') for page in paginator.paginate(StateValue='INSUFFICIENT_DATA'): metric_alarms = page.get('MetricAlarms', []) # 筛选和DynamoDB扩缩容相关的告警,可根据实际告警名称/指标调整判断条件 target_alarms = [ alarm['AlarmName'] for alarm in metric_alarms if 'DynamoDB' in alarm['AlarmName'] or 'Scaling' in alarm['AlarmName'] ] if target_alarms: cloudwatch_client.delete_alarms(AlarmNames=target_alarms) print(f"成功删除 {len(target_alarms)} 个处于INSUFFICIENT_DATA状态的DynamoDB扩缩容告警")
- 给这个Lambda函数配置IAM权限,允许执行
cloudwatch:DescribeAlarms和cloudwatch:DeleteAlarms操作。 - 在EventBridge创建一个定时规则(比如每天凌晨运行一次),触发这个Lambda函数,就能自动定期清理无效告警了。
方法3:通过基础设施即代码工具清理
如果你是用Terraform或CloudFormation来管理这些告警资源,直接从配置文件中移除对应的告警定义,然后执行部署命令(terraform apply或aws cloudformation update-stack),就能自动同步删除这些不再需要的告警了。
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

