我正在尝试调试一些复杂的云配置用户数据,但无法找到 cloud-init 为用户数据运行的特定命令的日志条目的位置。
作为示例,我正在启动一个 EC2 实例并提供一些简单的云配置用户数据
## template: jinja
#cloud-config
runcmd:
- echo 'unique-1234'
- echo 'Hello Cloud' > /tmp/cloud.log
我可以确认 cloud-init 正在运行我的用户数据命令:
/tmp/cloud.log
存在并具有提供的文本var/log/cloud-init-output.log
文件包含回显的“unique-1234”但是,我想要的是有关实际运行的用户数据模块和命令的一些日志信息。
该数据应该在
/var/log/cloud-init.log
中,但我找不到任何证据。有很多条目看起来像:
Running command ['lsb_release', '--all'] with allowed return codes [0] (shell=False, capture=True)
但是与用户数据无关,提供了我想要运行的命令。
grep 'echo' /var/log/cloud-init.log
结果为零。
阅读了 cloud-init 的日志记录文档后,我尝试将以下内容添加到我的 cloud-config yaml 中
reporting:
debug_log:
level: DEBUG
type: log
但结果是一样的——没有新条目
cloud-init.log
。
runcmd
获取指定的命令并将它们写入 shell 脚本:
2024-06-17 15:32:54,101 - modules.py[DEBUG]: Running module runcmd (<module 'cloudinit.config.cc_runcmd' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_runcmd.py'>) with frequency once-per-instance
2024-06-17 15:32:54,101 - handlers.py[DEBUG]: start: modules-config/config-runcmd: running config-runcmd with frequency once-per-instance
2024-06-17 15:32:54,101 - util.py[DEBUG]: Writing to /var/lib/cloud/instances/1ecf32de-49ab-47db-87f8-e0a20807c402/sem/config_runcmd - wb: [644] 24 bytes
2024-06-17 15:32:54,101 - helpers.py[DEBUG]: Running config-runcmd using lock (<FileLock using file '/var/lib/cloud/instances/1ecf32de-49ab-47db-87f8-e0a20807c402/sem/config_runcmd'>)
2024-06-17 15:32:54,101 - util.py[DEBUG]: Shellified 2 commands.
2024-06-17 15:32:54,101 - util.py[DEBUG]: Writing to /var/lib/cloud/instances/1ecf32de-49ab-47db-87f8-e0a20807c402/scripts/runcmd - wb: [700] 65 bytes
2024-06-17 15:32:54,102 - handlers.py[DEBUG]: finish: modules-config/config-runcmd: SUCCESS: config-runcmd ran successfully
我们可以看到它被写入
/var/lib/cloud/instance/scripts/runcmd
:
#!/bin/sh
echo 'unique-1234'
echo 'Hello Cloud' > /tmp/cloud.log
查看 runcmd 文档,我们看到
注意runcmd模块只编写稍后运行的脚本。实际运行脚本的模块是Final boot阶段的scripts_user。
如果我们从
scripts_user
搜索日志,我们可以看到我们的脚本正在运行:
2024-06-17 15:32:54,722 - modules.py[DEBUG]: Running module scripts_user (<module 'cloudinit.config.cc_scripts_user' from '/usr/lib/python3/dist-packages/cloudinit/config/cc_scripts_user.py'>) with frequency once-per-instance
2024-06-17 15:32:54,722 - handlers.py[DEBUG]: start: modules-final/config-scripts_user: running config-scripts_user with frequency once-per-instance
2024-06-17 15:32:54,722 - util.py[DEBUG]: Writing to /var/lib/cloud/instances/1ecf32de-49ab-47db-87f8-e0a20807c402/sem/config_scripts_user - wb: [644] 24 bytes
2024-06-17 15:32:54,722 - helpers.py[DEBUG]: Running config-scripts_user using lock (<FileLock using file '/var/lib/cloud/instances/1ecf32de-49ab-47db-87f8-e0a20807c402/sem/config_scripts_user'>)
2024-06-17 15:32:54,722 - subp.py[DEBUG]: Running command ['/var/lib/cloud/instance/scripts/runcmd'] with allowed return codes [0] (shell=False, capture=False)
2024-06-17 15:32:54,723 - handlers.py[DEBUG]: finish: modules-final/config-scripts_user: SUCCESS: config-scripts_user ran successfully
不幸的是,如果脚本遇到错误,我们只能在
cloud-init.log
中看到有关脚本的任何信息。否则,运行脚本的标准输出将进入 /var/log/cloud-init-output.log
。
您可以看到您回显的文本出现在那里:
root@me:~# tail -3 /var/log/cloud-init-output.log
Cloud-init v. 24.1.6 running 'modules:final' at Mon, 17 Jun 2024 15:32:54 +0000. Up 3.32 seconds.
unique-1234
Cloud-init v. 24.1.6 finished at Mon, 17 Jun 2024 15:32:54 +0000. Datasource DataSourceLXD. Up 3.48 seconds