AWS CloudWatch Logs不采集Docker /var/logs路径日志问题排查求助
跨区域EC2实例CloudWatch Agent日志采集范围差异排查方案
1. 核对CloudWatch Agent实际运行配置
两台实例部署模板一致不代表运行时配置完全相同,优先导出实际生效配置比对:
- 分别在两台实例执行命令导出配置:
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a get-config - 重点对比
logs.collect_list段的file_path规则:确认法兰克福实例的配置是否仅包含/var/lib/docker/overlay2/**/*.log类窄匹配规则,未添加/、/var路径下的通配采集规则 - 注意路径匹配优先级:如果窄范围规则写在广域规则之前,会优先命中窄规则,导致后续广域路径规则不生效
2. 核对IAM权限配置
权限限制会导致日志即使配置了采集也无法推送:
- 确认两台EC2关联的IAM角色都包含
CloudWatchAgentServerPolicy托管策略,或自定义策略中放开了logs:CreateLogGroup、logs:CreateLogStream、logs:PutLogEvents三个必要权限 - 检查自定义策略是否配置了
aws:RequestedRegion区域限制条件,确认法兰克福区域在允许的访问列表内
3. 核对日志路径访问权限
采集路径权限不足是最常见的采集失败原因:
- 执行命令确认Agent运行身份:
ps aux | grep amazon-cloudwatch-agent - 核对法兰克福实例
/、/var路径下目标日志文件的权限,确认Agent运行身份对日志文件有读权限、对日志父目录有执行权限 - Docker默认的
/var/lib/docker目录权限为700,仅root用户可访问:如果Agent未以root身份运行,只有被单独放开权限的overlay2子路径能被采集,上层/、/var路径会因权限不足无法读取
4. 核对Docker运行时配置
docker-compose配置一致不代表节点级Docker配置完全相同:
- 分别在两台实例执行命令查看默认日志驱动:
docker info | grep LoggingDriver,确认两边配置一致 - 执行命令查看运行中容器的日志存储路径:
docker inspect <容器ID> | grep LogPath,确认美国区实例能采集到的/、/var下的日志,是否为容器挂载到宿主机的共享路径,法兰克福实例的对应容器未做相同挂载配置
5. 查看CloudWatch Agent运行日志
Agent自身日志会直接输出采集失败的具体原因:
- 默认日志存储路径为
/var/log/amazon/cloudwatch-agent/,搜索日志中permission denied、no such file or directory、pattern matches no files类报错,可直接定位根因
6. 核对CloudFormation区域差异化配置
模板静态一致不代表部署时的参数传递一致:
- 检查CloudFormation模板是否配置了区域级别的条件参数,比如不同区域给Agent配置传入了不同的采集路径列表
- 检查EC2实例的UserData脚本是否存在区域判断逻辑,导致不同区域的实例初始化时生成了不同的Agent配置文件
内容的提问来源于stack exchange,提问作者Joe Crane
相关产品推荐
相关产品推荐

