Я пытаюсь отладить некоторые сложные пользовательские данные облачной конфигурации, и у меня возникли проблемы с поиском местоположения записей журнала конкретных команд, которые 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, я попытался добавить следующее в свой yaml-файл Cloud-config:
reporting:
debug_log:
level: DEBUG
type: log
но результат был тот же — новых записей в cloud-init.log
не было.
runcmd
принимает указанные команды и записывает их в сценарий оболочки:
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 записывает только сценарий, который будет запущен позже. Модуль, который фактически запускает сценарий, — это 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