CloudWatch日志组订阅过滤器匹配域名无日志问题求助
验证匹配模式语法
CloudWatch订阅过滤器用的是专属的CloudWatch Logs Filter Pattern语法,不是普通字符串匹配。比如你的目标域名是example.com:如果日志是键值对格式(如domain: example.com),匹配模式要写[domain="example.com"];如果是自由文本包含域名,要用"example.com"(带引号)。先在源日志组的日志查询里测试该模式,确认能搜到目标日志,排除模式本身的问题。检查Lambda权限配置
Lambda执行角色必须拥有logs:CreateLogStream和logs:PutLogEvents权限,可直接附加AWSLambdaBasicExecutionRole策略,或自定义包含对应权限的策略。同时确认CloudWatch日志组的订阅过滤器中,目标Lambda的ARN完全正确,没有拼写错误。确认源日志是否生成
先去订阅的源日志组里手动搜索指定域名的日志,确认上游服务确实输出了对应日志。如果源日志组里都没有记录,订阅过滤器自然抓不到,得先排查上游服务的日志输出逻辑。查看Lambda执行状态
进入Lambda的监控页面,查看调用次数、错误指标:如果有调用记录但目标日志组无输出,可能是Lambda的日志转发逻辑有问题;如果没有调用记录,说明订阅过滤器未触发,回到匹配模式或权限的排查。核对订阅过滤器关联的日志组
确认订阅过滤器是关联到产生目标日志的源日志组,别选错了日志组(比如要抓API Gateway的日志,结果订阅了Lambda自身的日志组)。考虑日志延迟因素
CloudWatch日志和订阅过滤器可能存在3-10分钟的延迟,不要刚触发请求就立刻查询,等待一段时间后再确认目标日志组的内容。
内容的提问来源于stack exchange,提问作者Siddharth Khamithkar

