AWS SageMaker自定义容器端点日志无法输出至CloudWatch,求解决
解决SageMaker自定义容器日志无法输出到CloudWatch的方法
1. 调整Python logging配置,绑定标准输出流
默认logging模块若未配置输出handler,日志只会留在内存中,不会被SageMaker捕获。修改你的日志代码,强制将日志输出到stdout/stderr:
import logging import sys logger = logging.getLogger() logger.setLevel(logging.DEBUG) # 清除默认handler避免重复输出 if logger.hasHandlers(): logger.handlers.clear() # 配置输出到标准输出的handler stdout_handler = logging.StreamHandler(sys.stdout) stdout_handler.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') stdout_handler.setFormatter(formatter) logger.addHandler(stdout_handler) # 可选:配置错误日志输出到标准错误流 stderr_handler = logging.StreamHandler(sys.stderr) stderr_handler.setLevel(logging.ERROR) stderr_handler.setFormatter(formatter) logger.addHandler(stderr_handler) logger.debug("调试路径信息") logger.error("路径错误提示")
2. 检查容器启动脚本的输出流向
自定义容器的启动脚本(如serve脚本)不能将stdout/stderr重定向到非标准位置。如果用nohup启动服务,要确保输出合并到标准流:
nohup python your_inference_script.py &>> /dev/stdout &
若不需要后台运行,直接正常启动即可,SageMaker会自动捕获容器的标准输出。
3. 确认端点的CloudWatch日志配置
在SageMaker控制台检查端点的日志设置:
- 进入目标端点的「端点配置」页面,查看「日志配置」
- 确保已勾选「启用日志」,且日志级别设置为包含DEBUG(或更低级别)
- 验证端点使用的IAM角色拥有
logs:CreateLogStream、logs:PutLogEvents等CloudWatch日志操作权限
4. 确保容器内日志目录权限正常
SageMaker默认会将容器日志写入/var/log/sagemaker/目录,在Dockerfile中添加权限配置:
RUN mkdir -p /var/log/sagemaker && chmod 777 /var/log/sagemaker
5. 本地验证容器日志输出
先在本地运行自定义容器,执行推理脚本,确认日志能正常输出到终端。如果本地无输出,问题出在代码或容器配置,而非SageMaker平台。
内容的提问来源于stack exchange,提问作者sam.hay
相关产品推荐
相关产品推荐

