跳至內容

如何將使用者資料輸出傳送至執行 RHEL 的 EC2 執行個體上的控制台日誌?

3 分的閱讀內容
0

我想對 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 2 和 Amazon Linux 2023 的資訊,請參閱如何將使用者資料輸出傳送到 Amazon Linux 1、Amazon Linux 2 或 Amazon Linux 2023 的 EC2 執行個體上的主控台日誌?

解決方法

若要將使用者資料輸出傳送至執行 RHEL 之 EC2 執行個體上的主控台日誌,請完成下列步驟:

  1. 開啟 Amazon EC2 console (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

    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
  4. 若要重新建立 ** /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
  5. 停止執行個體。

  6. (選用) 若要在每次執行個體重新啟動時執行使用者資料,請使用 MIME 多部分檔案設定使用者資料指令碼和 cloud-init 指令
    **注意:**預設情況下,使用者資料指令碼和 cloud-init 指令僅在 EC2 執行個體啟動的第一個啟動週期內執行。

  7. 若要將使用者資料輸出重新導向至主控台,請執行下列命令來編輯使用者資料欄位:

    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
  8. 啟動執行個體,然後查看主控台日誌輸出。您會收到類似以下範例的主控台輸出:
    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!

**重要:**您的使用者資料可在主控台中顯示。不要在傳送的資料中加入機密資訊。

相關資訊

啟動時在 Linux 執行個體上執行命令

AWS 官方已更新 2 年前