RHEL 7 または RHEL 8 を実行している EC2 インスタンスのコンソールログにユーザーデータ出力を送信するにはどうすればよいですか?
最終更新日: 2020 年 8 月 14 日
Amazon Elastic Compute Cloud (Amazon EC2) Linux RHEL 7 または RHEL 8 インスタンスのブートストラップに関してトラブルシューティングを行おうとしています。ユーザーデータの呼び出しをログに記録し、コンソールに送信する方法を教えてください。
簡単な説明
インスタンスへの SSH を介したアクセスを行わずに EC2 インスタンスのブートストラップで発生する問題をトラブルシューティングするには、ユーザーデータの Bash スクリプトにコードを追加し、すべての出力を /var/log/user-data.log と /dev/console の両方にリダイレクトします。このコードが実行されると、ユーザーデータの呼び出しを記録したログがコンソールに表示されます。
注: この解決方法は、RHEL 7 および RHEL 8 でのみ有効です。Amazon Linux および Amazon Linux 2 に関しては、How can I send user-data output to the console logs on an EC2 instance running Amazon Linux or Amazon Linux 2? をご参照ください。
解決方法
1. Amazon EC2 コンソールを開きます。
2. 新しいインスタンスを起動し、そのインスタンスに SSH 接続します。
3. /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
4. /boot/grub2/grub.cfg ファイルを再作成します。
RHEL 7:
# grub2-mkconfig -o /boot/grub2/grub.cfg
Generating 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
5. インスタンスを停止します。
6. 変更したインスタンスから新しい AMI を作成します。
7. 新しい AMI から新しいインスタンスを起動します。
8. 次のコマンドを入力して、ユーザデータ出力コンソールをリダイレクトします。
#!/bin/bash -xe
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
yum -y update
echo "Hello from user-data!"
以下の行で、ユーザーデータ出力をリダイレクトします。
exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
以下は、コンソール出力の例です。
RHEL 7:
subscription-manager.x86_64 0:1.24.26-3.el7_8
subscription-manager-rhsm.x86_64 0:1.24.26-3.el7_8
subscription-manager-rhsm-certificates.x86_64 0:1.24.26-3.el7_8
sudo.x86_64 0:1.8.23-9.el7
systemd.x86_64 0:219-73.el7_8.8
systemd-libs.x86_64 0:219-73.el7_8.8
systemd-sysv.x86_64 0:219-73.el7_8.8
teamd.x86_64 0:1.29-1.el7
tuned.noarch 0:2.11.0-8.el7
tzdata.noarch 0:2020a-1.el7
util-linux.x86_64 0:2.23.2-63.el7
yum.noarch 0:3.4.3-167.el7
yum-utils.noarch 0:1.1.31-54.el7_8
Replaced:
iwl7265-firmware.noarch 0:22.0.7.0-72.el7
Complete!
+ echo 'Hello from user-data!'
Hello from user-data!
RHEL 8:
Installed:
grub2-tools-efi-1:2.02-82.el8_2.1.x86_64
kernel-4.18.0-193.13.2.el8_2.x86_64
kernel-core-4.18.0-193.13.2.el8_2.x86_64
kernel-modules-4.18.0-193.13.2.el8_2.x86_64
linux-firmware-20191202-97.gite8a0f4c9.el8.noarch
Complete!
+
echo 'Hello from user-data!'
Hello from user-data!