如何将用户数据输出发送到运行 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、Amazon Linux 2 和 Amazon Linux 2023 的信息,请参阅如何将用户数据输出发送到 Amazon Linux 1、Amazon Linux 2 或 Amazon Linux 2023 的 EC2 实例上的控制台日志?

解决方法

要将用户数据输出发送到运行 RHEL 的 EC2 实例上的控制台日志,请完成以下步骤:

  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

    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 官方
AWS 官方已更新 8 个月前