【问题标题】:Where to find logs for a cloud-init user-data script?在哪里可以找到 cloud-init 用户数据脚本的日志?
【发布时间】:2013-09-12 13:35:30
【问题描述】:

我正在通过将 shell 脚本粘贴到用户数据字段中来初始化运行标准 Ubuntu 13.04 AMI 衍生产品的 Spot 实例。

这行得通。脚本运行。但是调试起来很困难,因为我不知道脚本的输出记录在哪里,如果在任何地方。

我查看了 /var/log/cloud-init.log,它似乎包含一堆与调试 cloud-init 本身相关的内容,但与我的脚本无关。我在 /var/log 中搜索并没有找到任何东西。

我有什么特别需要做的事情才能打开登录吗?

【问题讨论】:

  • 你检查 /var/log/boot.log 了吗? CloudInit 在启动时运行,因此您的“打印”和错误应该出现在该日志中的某处
  • 我在 boot.log 中得到的只是:“cloud-init start running: Mon, 09 Sep 2013 06:39:55 +0000. up 44.94 seconds”
  • 你传递的脚本是什么?如果它没有任何输出,那么你什么都看不到是正常的。
  • @cjdcordeiro,该脚本执行一些 apt-get 命令,下载并构建 Redis 并安装一些 R 包。所有这些都应该产生一些输出。为了更好地衡量,我加入了一些 echo 语句,并尝试使用和不使用“set -x”,但没有明显的结果。
  • 所以,@cbare,这条评论会很大,请在下面的答案中阅读。

标签: cloud-init


【解决方案1】:

云初始化用户数据的默认位置已经是 /var/log/cloud-init-output.log,在 AWS、DigitalOcean 和大多数其他云提供商中。您无需设置任何额外的日志记录即可查看输出。

【讨论】:

  • 是的 - 请参阅我对上面我的回答的评论,在提出这个问题时,这还不是所有发行版的默认设置。
  • @michael 是的。当事情发生变化并且旧答案不再适用时,我会编写新答案以保持 Stack Overflow 的相关性。欢迎您保留自己的答案来做同样的事情。
【解决方案2】:

您可以为您的用户数据创建一个云配置文件(顶部带有“#cloud-config”),使用 runcmd 调用脚本,然后像这样启用输出日志记录:

output: {all: '| tee -a /var/log/cloud-init-output.log'}

【讨论】:

  • 谢谢迈克尔。我会试试看,当我开始下一轮的时候报告。
  • 这个文件存在于我的centos box上。
  • @can - 我最近在使用 AmazonLinux AMI 时注意到了这一点。在我撰写此评论时,我正在使用 Ubuntu AMI。我猜它已被添加到其他一些发行版的默认值中。非常好!
【解决方案3】:

所以我尝试复制您的问题。通常我在 Cloud Config 中工作,因此我只是创建了一个简单的测试用户数据脚本,如下所示:

#!/bin/sh

echo "Hello World.  The time is now $(date -R)!" | tee /root/output.txt

echo "I am out of the output file...somewhere?"

yum search git    # just for fun

ls

exit 0

请注意,使用 CloudInit shell 脚本,用户数据“将在首次启动期间以类似 rc.local 的级别执行。类似 rc.local 的意思是‘在启动序列中非常晚’” 登录到我的实例(一台 Scientific Linux 机器)后,我首先去了 /var/log/boot.log,然后我发现:

你好,世界。现在时间是 2013 年 9 月 11 日星期三 10:21:37 +0200!我是

文件外。某处的日志文件?加载的插件:changelog, 内核模块、优先级、保护库、安全性、 : tsflags, versionlock 126 个包由于存储库优先保护而被排除 9 个包由于存储库而被排除 保护 ^Mepel/pkgtags
| 581 KB 00:00

================================ N/S 匹配:git ========== ===================== ^[[1mGit^[[0;10mPython.noarch:Python ^[[1mGit^[[0;10m库c^[[ 1mgit^[[0;10m.x86_64 :一个快速的网络 ^[[1mgit^[[0;10m

的接口

...

...(更多 yum 搜索输出)

...

bin etc lib lost+found mnt proc sbin srv tmp var

boot dev home lib64 media opt root selinux sys usr

(其他不相关的东西)

所以,如您所见,我的脚本运行并被正确记录。 此外,正如预期的那样,我在 /root/output.txt 中强制记录了“output.txt”,内容如下:

你好,世界。现在时间是 2013 年 9 月 11 日星期三 10:21:37 +0200!

所以...我不太确定您的脚本中发生了什么。 确保您使用

退出脚本
exit 0   #or some other code

如果仍然无法正常工作,您应该提供更多信息,例如您的脚本、您的 boot.log、您的 /etc/rc.local 和您的 cloudinit.log。 顺便说一句:你的 cloudinit 版本是多少?

【讨论】:

  • 我证实这适用于 CentOS AMI (ami-0027bf69),但不适用于标准 Ubuntu 13.04 AMI (ami-c30360aa)。在 Ubuntu 上,output.txt 按预期写入,我将 yum 行更改为“apt-get install -y git”。此 AMI 以 BOOTLOGD_ENABLE=No 运行,因此没有 boot.log。谢谢,@cjdcordeiro!
  • 嗯,我想我会称它为已验证日志记录在 Ubuntu 13.04 AMI 和/或 Cloud-Init 0.7.2 中被有意关闭或破坏。感谢您的帮助!
  • 是的,这可能是一个与 Ubuntu AMI 相关的问题。
猜你喜欢
  • 1970-01-01
  • 2018-07-02
  • 1970-01-01
  • 1970-01-01
  • 2018-10-31
  • 2019-11-11
  • 2023-03-15
  • 1970-01-01
  • 2019-06-03
相关资源
最近更新 更多