如何将用户数据输出发送到运行 RHEL 的 EC2 实例上的控制台日志?
我想对我的 Amazon Elastic Compute Cloud (Amazon EC2) Linux RHEL 7、RHEL 8 或 RHEL 9 实例引导进行故障排除。我想记录用户数据调用,然后将其发送到控制台日志。
简短描述
要对与 EC2 实例引导问题进行故障排除,请修改您的用户数据 bash 脚本以重定向所有输出。将输出重定向到 /var/log/user-data.log 和 /dev/console。当脚本运行时,您可以直接在控制台中查看用户数据调用日志。
**注意:**以下解决方法仅适用于 RHEL 7、RHEL 8 和 RHEL 9。有关 Amazon Linux、Amazon Linux 2 和 Amazon Linux 2023 的信息,请参阅如何将用户数据输出发送到 Amazon Linux 1、Amazon Linux 2 或 Amazon Linux 2023 的 EC2 实例上的控制台日志?
解决方法
要将用户数据输出发送到运行 RHEL 的 EC2 实例上的控制台日志,请完成以下步骤:
-
打开 Amazon EC2 控制台。
-
编辑 /etc/default/grub 中的 GRUB_CMDLINE_LINUX 行,然后将“console=ttyS0,115200n8 console=tty0”改为“console=tty1 console=ttyS0”:
RHEL 7# cat /etc/default/grub GRUB_TIMEOUT=1 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 net.ifnames=0 rd.blacklist=nouveau crashkernel=auto" GRUB_DISABLE_RECOVERY="true"
RHEL 8
# cat /etc/default/grub GRUB_TIMEOUT=1 GRUB_DISTRIBUTOR="$(sed 's, release .*$,,g' /etc/system-release)" GRUB_DEFAULT=saved GRUB_DISABLE_SUBMENU=true GRUB_TERMINAL_OUTPUT="console" GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295 crashkernel=auto" GRUB_DISABLE_RECOVERY="true" GRUB_ENABLE_BLSCFG=true
RHEL 9
# cat /etc/default/grub GRUB_CMDLINE_LINUX="console=tty1 console=ttyS0 net.ifnames=0 rd.blacklist=nouveau nvme_core.io_timeout=4294967295" GRUB_TIMEOUT=0 GRUB_ENABLE_BLSCFG=true GRUB_DEFAULT=saved
-
要重新创建 /boot/grub2/grub.cfg 文件,请运行以下脚本:
RHEL 7# grub2-mkconfig -o /boot/grub2/grub.cfgGenerating grub configuration file ... Found linux image: /boot/vmlinuz-3.10.0-1062.1.2.el7.x86_64 Found initrd image: /boot/initramfs-3.10.0-1062.1.2.el7.x86_64.img Found linux image: /boot/vmlinuz-0-rescue-026767dbe06a4910a5ce3bd0def903c0 Found initrd image: /boot/initramfs-0-rescue-026767dbe06a4910a5ce3bd0def903c0.img done
RHEL 8
# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... done
RHEL 9
# grub2-mkconfig -o /boot/grub2/grub.cfg Generating grub configuration file ... Adding boot menu entry for UEFI Firmware Settings ... done
-
停止实例。
-
(可选)要在每次实例重启时运行用户数据,请使用 MIME 多部分文件配置用户数据脚本和 cloud-init 指令。
**注意:**默认情况下,用户数据脚本和 cloud-init 指令仅在 EC2 实例启动的第一个启动周期内运行。 -
要将用户数据输出重定向到控制台,请运行以下命令来编辑用户数据字段:
Content-Type: multipart/mixed; boundary="//" MIME-Version: 1.0 --// Content-Type: text/cloud-config; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="cloud-config.txt" #cloud-config cloud_final_modules: - [scripts-user, always] --// Content-Type: text/x-shellscript; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="userdata.txt" #!/bin/bash -xe exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1 cat /etc/redhat-release echo "Hello from user-data!" --//--
**注意:**重定向用户数据输出的脚本以 #!/bin/bash -xe 行开头。前面的脚本为 cloud-init 配置数据,每次启动实例时都会运行 Shell 脚本。在前面的命令中,以下行重定向了用户数据输出:
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
-
启动实例,然后查看控制台日志输出。您收到的控制台输出类似于以下示例:
RHEL 7<13>May 21 03:11:44 user-data: + cat /etc/redhat-release <13>May 21 03:11:44 user-data: Red Hat Enterprise Linux Server release 7.9 (Maipo) <13>May 21 03:11:44 user-data: + echo 'Hello from user-data!' <13>May 21 03:11:44 user-data: Hello from user-data!
RHEL 8
<13>May 21 03:11:21 user-data: + cat /etc/redhat-release <13>May 21 03:11:21 user-data: Red Hat Enterprise Linux release 8.6 (Ootpa) <13>May 21 03:11:21 user-data: + echo 'Hello from user-data!' <13>May 21 03:11:21 user-data: Hello from user-data!
RHEL 9
<13>May 21 03:12:34 user-data: + cat /etc/redhat-release <13>May 21 03:12:34 user-data: Red Hat Enterprise Linux release 9.3 (Plow) <13>May 21 03:12:34 user-data: + echo 'Hello from user-data!' <13>May 21 03:12:34 user-data: Hello from user-data!
**重要事项:**您的用户数据在控制台中可见。不要在发送的数据中包含机密信息。
相关信息
相关内容
- AWS 官方已更新 7 个月前