求助:运行中Sagemaker实例的Cloudwatch日志为何停止更新?
我之前也碰到过类似的CloudWatch日志突然断更的问题,结合你的描述(实例正常运行、代码没动、现有日志流175MB),大概率是触发了CloudWatch的某些配额限制或者日志推送环节出了小问题,给你整理几个排查方向和解决办法:
1. 优先排查CloudWatch日志流的写入配额
CloudWatch对单日志流有两个容易触发的写入限制,虽然175MB远没到存储上限,但可能是速率超限导致日志被静默丢弃:
- 默认单日志流每秒最多接受1000条日志事件或1MB日志数据(两者取更严格的那个)
- 如果你的实例运行中(比如处理的数据量突然变大)产生的日志超出了这个阈值,CloudWatch会直接丢弃超额部分,甚至可能临时停止接收该流的日志
怎么查?
- 打开CloudWatch控制台,进入你的日志组,切换到「指标」标签,查看
IncomingLogEvents(接收的日志事件数)和ThrottledLogEvents(被限流的事件数)指标:- 如果
ThrottledLogEvents有非零值,那就是触发限流了
- 如果
解决办法:
- 手动在该日志组下创建一个新的日志流,然后重启Sagemaker实例(重启后实例会自动把日志推送到新流)
- 后续可以考虑调整日志级别减少日志量,或者拆分大的日志事件,避免再次触发限流
2. 检查CloudWatch Agent是否正常运行
Sagemaker是靠CloudWatch Agent把实例内的日志推送到CloudWatch的,如果Agent意外挂了,自然就没新日志了:
怎么查?
- 通过SSH或者Sagemaker Studio的终端连接到实例,执行命令看Agent状态:
sudo systemctl status amazon-cloudwatch-agent - 如果Agent没在运行,看看日志找原因:
sudo tail -f /var/log/amazon/cloudwatch-agent/amazon-cloudwatch-agent.log
解决办法:
- 先试着重启Agent:
sudo systemctl restart amazon-cloudwatch-agent - 如果重启失败,重新拉取配置再启动:
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c ssm:AmazonCloudWatch-linux -s
3. 验证IAM角色的日志写入权限
虽然你说没改权限,但难保不会有意外(比如团队里有人调整了策略),如果实例的IAM角色没了CloudWatch日志写入权限,也会导致日志断更:
怎么查?
- 进IAM控制台,找到你的Sagemaker实例用的角色,检查是否有
CloudWatchLogsFullAccess权限,或者至少包含logs:CreateLogStream、logs:PutLogEvents、logs:DescribeLogStreams这几个核心权限
解决办法:
- 如果权限缺失,给角色添加上对应的CloudWatch日志写入策略就行
4. 确认日志文件路径是否匹配
有时候虽然代码没动,但依赖库更新或者实例内的配置变化,可能导致日志输出路径变了,CloudWatch Agent找不到新的日志文件:
怎么查?
- 先看CloudWatch Agent的配置文件,确认监控的日志路径:
cat /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.json - 再检查实例内的实际日志文件是否还在生成内容:
(把路径换成配置里写的那个)tail -f /path/to/your/log/file
解决办法:
- 如果路径不匹配,修改Agent配置文件里的
log_file路径,然后重启Agent
内容的提问来源于stack exchange,提问作者Martin Thoma
相关产品推荐
相关产品推荐

