首页/云/云平台与虚拟化速查/cloud-init 日志与重跑
虚拟化操作94 条

cloud-init 日志与重跑

cloud-init 首次启动失败时(主机名、密钥、网络未按 user-data 生效),看状态与两份日志定位阶段;确认修复后可 clean 重跑验证。

云平台与虚拟化速查云更新于 2026-10-13

cloud-init 排查看哪里

cloud-init 在实例启动过程中读取元数据与 user-data,按阶段执行配置。排查分三处:cloud-init status --long 看整体阶段与是否出错,/var/log/cloud-init.log 看模块的执行与决策过程,/var/log/cloud-init-output.log 看 user-data 脚本自身的输出与报错。要让配置重新执行,需要清理已应用标记并重启实例。用 cloud-init analyze show 还能看出时间花在哪个阶段。

基本信息

状态查看cloud-init status --long
主日志/var/log/cloud-init.log
输出日志/var/log/cloud-init-output.log
重跑cloud-init clean 后重启实例
耗时分析cloud-init analyze show,查看各阶段耗时

典型使用场景

  • 首次启动后 user-data 里的配置没有生效,需要确认执行到哪一步
  • user-data 脚本报错,需要定位具体行与退出码
  • 修改 user-data 后希望在已运行的实例上重新执行
  • 制作自定义镜像前清理 cloud-init 状态,避免克隆实例沿用旧状态
  • 实例网络未按预期配置,确认阶段是否因网络不可达而失败

定位与重跑

定位与重跑
cloud-init status --long                        # 整体阶段与错误摘要
sudo tail -n 50 /var/log/cloud-init-output.log  # user-data 脚本的输出与报错
sudo grep -iE 'error|failed|warn' /var/log/cloud-init.log | tail -20
sudo cloud-init clean --logs                    # 清理状态与日志(生产慎用)
sudo reboot                                     # 下次启动重新执行
sudo cloud-init analyze show                    # 各阶段耗时,定位慢在哪一步

阶段与失败表现

阶段主要工作失败表现
本地初始化网络可用前的本地数据源处理本地数据源缺失时后续阶段直接跳过
init网络就绪后拉取元数据元数据服务不可达,user-data 拿不到
配置模块网络、存储、用户、软件包等模块模块报错但实例仍可启动,配置缺项
final执行 user-data 脚本与收尾任务脚本报错,输出只在 output 日志中
每次启动脚本per-boot 类型脚本只在特定启动阶段执行,容易被误认为未生效
生产环境慎用 clean:会清除已应用的模块标记并在下次启动重新执行 user-data,若脚本不是幂等的,可能重复创建用户、覆盖配置甚至重建文件系统。
从已有实例制作镜像前要清理 cloud-init 状态,否则克隆出来的实例可能沿用旧的 instance-id 而不重新执行 user-data,导致主机名、密钥与网络配置全部重复。

易错点

  • 只看 cloud-init.log:模块输出细节多在 cloud-init-output.log
  • user-data 脚本非幂等,重跑时重复执行造成配置覆盖
  • 制作镜像不清理状态,克隆实例主机名与密钥重复
  • 元数据服务不可达时误判为 cloud-init 故障,实际是网络或数据源配置问题

数据来源与参考

  • cloud-init 官方文档:调试与日志
  • cloud-init 文档:命令行
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌