Direkt zum Inhalt

Wie kann ich Benutzerdatenausgaben an die Konsolenprotokolle einer EC2-Instance senden, auf der RHEL ausgeführt wird?

Lesedauer: 4 Minute
0

Ich möchte eine Fehlerbehebung für meinen Amazon Elastic Compute Cloud (Amazon EC2) Linux RHEL 7-, RHEL 8- oder RHEL 9-Instance-Bootstrap durchführen. Ich möchte den Aufruf von Benutzerdaten protokollieren und das Ergebnis in die Konsolenprotokolle übertragen.

Kurzbeschreibung

Ändere dein Bash-Skript „user-data“ so, dass alle Ausgaben umgeleitet werden, um Probleme mit deiner EC2-Instance-Bootstrap zu beheben. Leite die Ausgabe sowohl nach /var/log/user-data.log als auch nach /dev/console um. Sobald das Skript ausgeführt wird, kannst du die Protokolle der Benutzerdatenaufrufe direkt in deiner Konsole einsehen.

Hinweis: Die folgende Auflösung gilt nur für RHEL 7, RHEL 8 und RHEL 9. Informationen zu Amazon Linux 2 und Amazon Linux 2023 findest du unter Wie sende ich Benutzerdatenausgaben an die Konsolenprotokolle einer EC2-Instance für Amazon Linux 1, Amazon Linux 2 oder Amazon Linux 2023?

Lösung

Gehe wie folgt vor, um die Benutzerdatenausgabe an die Konsolenprotokolle einer EC2-Instance zu senden, auf der RHEL ausgeführt wird:

  1. Öffne die Amazon-EC2-Konsole.

  2. Stelle eine Verbindung zu einer vorhandenen Instance her oder starte eine neue Instance. Dann verwende SSH, um eine Verbindung zur Instance herzustellen.

  3. Bearbeite die Zeile GRUB_CMDLINE_LINUX in /etc/default/grub und ändere console=ttyS0,115200N8 console=tty0 in 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. Führe das folgende Skript aus, um die Datei /boot/grub2/grub.cfgneu zu erstellen:
    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. Stoppe die Instance.

  6. (Optional) Um die Benutzerdaten bei jedem Neustart der Instance auszuführen, konfiguriere das Benutzerdatenskript und die cloud-init-Anweisungen mit einer mehrteiligen MIME-Datei.
    Hinweis: Standardmäßig werden Benutzerdatenskripts und Cloud-Init-Direktiven nur während des ersten Startzyklus eines EC2-Instance-Starts ausgeführt.

  7. Um die Benutzerdatenausgabe an die Konsole umzuleiten, führe den folgenden Befehl aus, um das Benutzerdatenfeld zu bearbeiten:

    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!"
    
    --//--

    Hinweis: Das Skript zur Umleitung der Benutzerdatenausgabe beginnt mit der Zeile #!/bin/bash -xe. Das vorhergehende Skript besteht aus cloud-Init-Konfigurationsdaten, bei denen das Shell-Skript bei jedem Start der Instance ausgeführt wird. Im vorangegangenen Befehl leitet die folgende Zeile die Benutzerdatenausgabe um:

    exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
  8. Starte die Instance und sieh dir dann die Protokollausgabe der Konsole an. Du erhältst eine Ausgabe der Konsole, die dem folgenden Beispiel ähnelt:
    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!

Wichtig: Die Benutzerdaten sind in der Konsole sichtbar. Nimm keine vertraulichen Informationen in die von dir gesendeten Daten auf.

Ähnliche Informationen

Führen Sie Start-Befehle beim Hochfahren einer Linux-Instance aus

AWS OFFICIALAktualisiert vor 2 Jahren