使用AWS CloudFormation部署Docker容器失败,如何获取CloudFormation日志?
排查CoreOS Fleet中Open-OCR服务失败及获取CloudFormation日志的方法
先别急着找CloudFormation日志,咱们可以先从Fleet服务本身的日志入手,先定位服务启动失败的具体原因,再去查CloudFormation的部署日志:
第一步:查看单个Fleet服务的启动日志
针对每个失败的服务,你可以用fleetctl直接查看它的运行日志,这是最快定位服务层面问题的方式:
- 执行命令:
fleetctl journal <失败的服务名>,比如查看rabbitmq的日志:
这个命令会输出该服务从启动到失败的所有日志,通常能找到启动失败的直接原因(比如配置错误、依赖缺失、端口占用等)。fleetctl journal rabbitmq.service - 也可以用
fleetctl status <服务名>查看服务的状态详情,比如:
它会显示服务的当前状态、最近的启动尝试、依赖关系等信息。fleetctl status rabbitmq.service
第二步:获取CloudFormation相关日志
如果你的集群是通过CloudFormation部署的,日志主要有两个获取途径:
1. 实例本地的Cloud初始化日志
CoreOS实例在通过CloudFormation启动时,会执行初始化脚本,相关日志保存在实例本地:
- 查看
cloud-init日志:cat /var/log/cloud-init.log - 查看
cloud-init的输出日志(包含脚本执行的具体输出):
这些日志会记录CloudFormation在实例上配置的参数、执行的脚本是否成功,比如是否正确安装了依赖、是否设置了正确的环境变量等。cat /var/log/cloud-init-output.log
2. AWS CloudWatch日志(如果配置了的话)
通常用CloudFormation部署CoreOS集群时,会将实例的系统日志和服务日志推送到CloudWatch:
- 登录AWS控制台,进入CloudWatch服务;
- 在左侧菜单选择日志组,找到和你的CloudFormation栈名称相关的日志组(比如包含栈名前缀的日志组);
- 日志组里会按实例或服务分类保存日志,你可以在这里找到集群部署过程中所有的日志信息,包括Fleet服务的部署日志。
额外排查建议
除了日志,你还可以检查这些点:
- 核对每个服务的unit文件是否符合open-ocr的要求,比如rabbitmq的端口配置、worker服务的rabbitmq连接地址是否正确;
- 检查CoreOS实例的资源使用情况(CPU、内存、磁盘),是否因为资源不足导致服务启动失败;
- 确认实例之间的网络连通性,比如worker实例是否能访问rabbitmq实例的对应端口。
内容的提问来源于stack exchange,提问作者shantanuo
相关产品推荐
相关产品推荐

