AWS EventBridge与CloudWatch指标过滤器无法触发告警求助
排查CloudWatch自定义指标无数据的核心步骤
既然你已经排查过指标单位不一致的问题,以下是针对当前场景的核心排查点:
1. 验证指标过滤器的匹配模式是否适配EventBridge事件结构
EventBridge流入CloudWatch的事件是嵌套JSON结构,核心是要匹配detail.eventName字段的精确值(CreateRouteTable或DeleteRouteTable)。常见错误是过滤器模式未正确指向嵌套的detail节点,比如错误使用$.eventName而非$.detail.eventName。
正确的过滤器模式示例:
{ $.detail.eventName = "CreateRouteTable" || $.detail.eventName = "DeleteRouteTable" }
2. 检查CLI配置的指标过滤器参数准确性
确认你执行的put-metric-filter命令参数无错误:
log-group-name必须是EventBridge规则目标指向的精确日志组名称(大小写敏感)- CLI中过滤器模式的双引号需正确转义(比如
\"CreateRouteTable\") metricNamespace和metricName要与告警规则中使用的完全一致(大小写、拼写均需匹配)metricValue设为1(每次匹配事件累加1),可选配置defaultValue=0确保无匹配时也有数据点
示例正确CLI命令:
aws logs put-metric-filter \ --log-group-name "/aws/events/RouteTable-Action-Rule" \ --filter-name "RouteTableChangeFilter" \ --filter-pattern "{ $.detail.eventName = \"CreateRouteTable\" || $.detail.eventName = \"DeleteRouteTable\" }" \ --metric-transformations metricName=RouteTableChangeCount,metricNamespace=Custom/EC2_Admin_Actions,metricValue=1,defaultValue=0
3. 验证CloudWatch日志组中的事件格式
进入CloudWatch日志组查看具体事件Payload,确认:
- 事件为有效未压缩JSON格式(EventBridge默认发送未压缩JSON,若启用压缩需调整过滤器配置)
detail.eventName字段值与过滤器模式中的字符串完全匹配(无大小写错误、拼写错误)
示例EventBridge事件核心结构:
{
"detail-type": "AWS API Call via CloudTrail",
"source": "aws.ec2",
"detail": {
"eventName": "CreateRouteTable",
"eventSource": "ec2.amazonaws.com"
}
}
4. 检查权限配置
- 确认EventBridge规则的执行角色拥有
logs:PutLogEvents权限,可写入目标日志组 - 确认CloudWatch日志组的资源策略允许EventBridge服务主体(
events.amazonaws.com)写入日志 - 确认查看指标的IAM用户拥有
cloudwatch:GetMetricStatistics权限
5. 等待指标生成延迟
CloudWatch指标过滤器通常需要5-15分钟才能开始生成指标数据,请勿刚完成配置就立即检查,建议等待至少10分钟后查看指标图表。
6. 测试过滤器匹配有效性
在CloudWatch日志组的「过滤器模式测试」功能中,输入你的过滤器模式并选择一条已有的事件,验证是否能成功匹配。若匹配失败,需调整过滤器模式的语法或字段指向。
7. 核对告警规则配置
- 确认告警规则的指标命名空间、指标名、统计类型(如
Sum或Count)与过滤器配置完全一致 - 确认告警阈值、评估周期、数据点数量设置合理(例如:若阈值设为3,但仅触发1次操作,告警不会触发)
内容的提问来源于stack exchange,提问作者BPS
相关产品推荐
相关产品推荐

