如何创建CloudWatch指标监控可用状态的EBS卷?
监控可用状态EBS卷数量的替代方案
需求背景
需要创建指标追踪所有处于可用状态的EBS卷,且支持配置告警(当前通过Lambda+CloudWatch日志+Log Insights的方案无法为图表配置告警),现有方案可行但需更适合告警场景的替代实现方式。
现有实现方案(中文整理)
- 创建Lambda函数查询所有EBS卷信息,将卷状态数据发送至CloudWatch日志组
- 通过Log Insights执行以下查询过滤统计可用状态卷数量:
parse @message "Volume ID: *, Volume State: *" as volumeId, volumeState | filter volumeState == "available" | stats count(*) as availableVolumes by bin(5m)
Lambda发送到日志组的示例内容:
- Volume ID: vol-xxxxxx, Volume State: in-use
- Volume ID: vol-xxxxxa, Volume State: Available
替代方案
方案一:直接上报CloudWatch自定义指标(推荐,原生支持告警)
不用把数据输出到日志,直接在Lambda里统计并上报指标:
- 给Lambda角色添加
cloudwatch:PutMetricData权限 - 在Lambda中调用EC2 API查询所有EBS卷,统计状态为
available的卷数量 - 调用CloudWatch的
PutMetricData接口,指定命名空间(比如EBS/VolumeStates)、指标名AvailableVolumes,把统计值传进去,还可以添加Region等维度 - 之后直接在CloudWatch控制台基于这个自定义指标创建仪表盘组件和告警规则(比如当可用卷数量超过阈值时触发告警)
方案二:用Amazon Config规则生成指标
借助配置合规工具来实现:
- 创建Amazon Config规则,规则逻辑为检测EBS卷状态是否为
available - 配置规则将匹配的资源计数导出为CloudWatch指标
- 基于该指标配置仪表盘和告警,同时还能享受Config的合规审计功能
方案三:EventBridge触发Lambda+自定义指标
和方案一逻辑类似,但触发方式换为EventBridge:
- 在EventBridge中创建定时规则(比如每5分钟触发一次)
- 规则触发Lambda函数,Lambda执行EBS卷查询、统计可用数量
- 直接上报CloudWatch自定义指标,后续配置仪表盘和告警
现有方案的核心问题
Log Insights的查询结果属于日志分析结果,不是标准的时间序列指标,因此无法直接基于它配置阈值告警,这也是需要替换方案的核心原因。
内容的提问来源于stack exchange,提问作者Noodles12
相关产品推荐
相关产品推荐

