AWS Lambda执行正常但CloudWatch日志一段时间后不再生成
问题描述
我有一个由S3文件上传触发的AWS Lambda函数,用于归档文件。该函数运行正常,初期能在CloudWatch中查看新日志,但数日后不再生成新日志,不过S3中仍能看到新的归档文件。查看CloudWatch日志组列表无新日志组,删除旧日志组后也不会生成新组,仅重新部署Lambda(无代码变更)可恢复日志,但这并非合理解决方案。
附带的template.yaml配置
AWSTemplateFormatVersion: '2010-09-09' Transform: AWS::Serverless-2016-10-31 Description: Some service name Parameters: ENVIRONMENT: Type: String AccessRole: Type: String Resources: archiveS3Files: Type: AWS::Serverless::Function Properties: Handler: src/handlers/file/archiveS3Files.lambdaHandler Runtime: nodejs14.x Role: !Ref AccessRole MemorySize: 3000 Timeout: 900 Environment: Variables: ENVIRONMENT: !Ref ENVIRONMENT Events: UploadFileEvent: Type: S3 Properties: Bucket: !Ref Bucket name Events: - 's3:ObjectCreated:*' Filter: S3Key: Rules: - Name: prefix Value: S3Archiver - Name: suffix Value: _startArchiving.json
排查与解决方案
- 检查Lambda执行角色权限:确认
AccessRole包含logs:CreateLogGroup、logs:CreateLogStream、logs:PutLogEvents权限,且权限未被撤销、过期或存在权限边界限制。权限不足会导致Lambda无法写入日志,但不影响业务逻辑执行。 - 验证Lambda日志配置:在Lambda控制台“监控”标签下检查日志设置,确认未被手动禁用日志输出,或日志目标配置错误。
- 排查CloudWatch配额限制:查看账户是否达到CloudWatch日志组/流的数量配额,或日志存储容量上限。配额不足会阻止新日志生成,但不影响Lambda正常运行。
- 检查代码日志输出逻辑:确认函数代码中日志模块未出现异常,比如错误捕获后未输出日志、日志对象被意外销毁,或长期运行导致内存泄漏影响日志输出。
- 处理Lambda容器复用问题:Lambda的容器复用可能导致日志流异常,尤其是容器长期运行时。可尝试调整并发配置,或在函数中添加日志刷新逻辑,确保日志能正常写入CloudWatch。
- 确认S3触发事件传递:通过Lambda监控指标查看调用次数,确认与S3归档文件数量匹配,排除事件丢失或异常触发导致的日志异常。
内容的提问来源于stack exchange,提问作者Danil Suhomlinov
相关产品推荐
相关产品推荐

