You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS CloudWatch日志过滤失效:无法触发Lambda发送Python异常告警邮件

问题排查:CloudWatch日志过滤器无法触发Lambda告警

1. 过滤器语法用错了

你写的?Exception ?Error ?Traceback是CloudWatch Insights的查询语法,但用来触发Lambda的日志过滤器得用CloudWatch Filter Pattern语法,这俩完全不是一回事。正确的写法应该是:

"Exception" || "Error" || "Traceback"

或者用空格表示逻辑OR(效果一致):

"Exception" "Error" "Traceback"

如果日志是结构化格式(比如JSON),还得对应字段名配置,比如日志是{"level": "ERROR"},过滤器要写成{$.level = "ERROR"}。

2. 日志内容和关键词不匹配

  • 先手动去CloudWatch日志组里搜,确认Python脚本输出的异常日志里是不是真的有精确的Exception、Error、Traceback字符串。比如有些自定义日志可能用全大写(EXCEPTION)、缩写或非英文表述,过滤器自然匹配不到。
  • 要是Python的Traceback是多行输出的,默认过滤器只按单行匹配,大概率会漏过。这种情况要在日志订阅过滤器里开启多行模式,设置起始匹配规则,比如Traceback (most recent call last):,让CloudWatch把整个异常栈当成一个事件处理。

3. 订阅/告警配置没到位

  • 检查Lambda的触发器是否真的绑定了目标日志组,且过滤器模式是填在触发器配置里的,不是只在Insights里查询了就算数。
  • 确认Lambda的权限:触发器配置时AWS会自动生成接收日志事件的权限,但如果手动修改过角色,可能导致权限丢失;另外Lambda自身也需要写日志的权限,不然执行失败了你都看不到报错信息。
  • 要是用CloudWatch告警触发Lambda,得确认告警规则的触发条件:比如是否设为“匹配到至少1条日志事件”,评估周期是否合理——比如设成5分钟,但异常日志只出现了1分钟,就可能错过触发。

4. 日志根本没传到CloudWatch

先确认ECS任务的日志驱动是不是awslogs,日志组名称、区域是否和你配置过滤器的一致。去日志组里搜搜有没有任务的正常日志,如果连正常日志都没有,得先排查ECS日志驱动配置:比如任务定义里的logConfiguration是否正确,IAM角色有没有logs:CreateLogStream、logs:PutLogEvents权限。

5. Lambda本身出问题了

去Lambda的CloudWatch日志组里查看,有没有调用失败的记录:比如权限不足、处理日志事件的代码报错,导致触发器触发了但Lambda执行失败,你误以为没触发。另外也检查下Lambda的并发是否被打满,新请求无法进入。


内容的提问来源于stack exchange,提问作者Joseph Quinn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 04:27:11