RHEL 7 または RHEL 8 を実行している EC2 インスタンスのコンソールログにユーザーデータ出力を送信するにはどうすればよいですか?

所要時間2分
0

Amazon Elastic Compute Cloud (Amazon EC2) Linux RHEL 7 または RHEL 8 インスタンスのブートストラップに関してトラブルシューティングを行いたいと考えています。ユーザーデータの呼び出しをログに記録し、その内容をコンソールログに送信したいのですが、

簡単な説明

EC2 インスタンスのブートストラップの問題をトラブルシューティングするには、すべての出力を /var/log/user-data.log/dev/console にリダイレクトするコードをユーザーデータの bash スクリプトに追加します。これは、SSH 経由でインスタンスにアクセスできない場合でも行うことができます。コードを実行すると、ユーザーデータ呼び出しログがコンソールに表示されます。

注: 以下に示す解決方法は RHEL 7 と RHEL 8 でのみ有効です。Amazon Linux と Amazon Linux 2 の詳細については、「Amazon Linux 1、Amazon Linux 2、または Amazon Linux 2023 の EC2 インスタンスのコンソールログにユーザーデータ出力を送信する方法を教えてください。」を参照してください。

解決方法

  1. Amazon EC2 コンソールを開きます。

  2. 新しいインスタンスを起動し、そのインスタンスに SSH 接続します。

  3. /etc/default/grubGRUB\ _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!

    注: ユーザーデータはコンソールに表示されるため、送信するデータには機密情報を含めないようにしてください。

関連情報

起動時に Linux インスタンスでコマンドを実行する

AWS公式
AWS公式更新しました 7ヶ月前
コメントはありません

関連するコンテンツ