Salta al contenuto

Come posso inviare l'output dei dati utente ai log della console in un'istanza EC2 che esegue RHEL?

4 minuti di lettura
0

Desidero risolvere i problemi di bootstrap della mia istanza Amazon Elastic Compute Cloud (Amazon EC2) Linux RHEL 7, RHEL 8 o RHEL 9. Desidero registrare l'invocazione dei dati utente e inviarla ai log della console.

Breve descrizione

Per risolvere i problemi con il bootstrap di un'istanza EC2, modifica lo script bash di dati utente per reindirizzare tutto l'output. Reindirizza l'output sia a /var/log/user-data.log che a /dev/console. Quando lo script viene eseguito, puoi visualizzare i log di invocazione dei dati utente direttamente nella console.

Nota: la seguente risoluzione è valida solo per RHEL 7, RHEL 8 e RHEL 9. Per informazioni su Amazon Linux 2 e Amazon Linux 2023, consulta Come posso inviare l'output dei dati utente ai log della console su un'istanza EC2 per Amazon Linux 1, Amazon Linux 2 o Amazon Linux 2023?

Risoluzione

Per inviare l'output dei dati utente ai log della console in un'istanza EC2 che esegue RHEL, completa i seguenti passaggi:

  1. Apri la console Amazon EC2.

  2. Connettiti a un'istanza esistente o avvia una nuova istanza. Quindi utilizza SSH per connetterti all'istanza.

  3. Modifica la riga GRUB_CMDLINE_LINUX in /etc/default/grub e "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. Per ricreare il file /boot/grub2/grub.cfg, esegui questo script:
    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. Arresta l'istanza.

  6. (Facoltativo) Per eseguire i dati utente ogni volta che l'istanza si riavvia, configura lo script di dati utente e le direttive cloud-init con un file MIME multiparte.
    Nota: per impostazione predefinita, gli script di dati utente e le direttive cloud-init vengono eseguiti solo durante il primo ciclo di avvio di un'istanza EC2.

  7. Per reindirizzare l'output dei dati utente alla console, modifica il campo dei dati utente eseguendo questo comando:

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

    Nota: lo script per reindirizzare l'output dei dati utente inizia con la riga #!/bin/bash -xe. Lo script precedente è costituito da dati di configurazione cloud-init in cui lo script di shell viene eseguito ogni volta che l'istanza viene avviata. Nel comando precedente, la riga seguente reindirizza l'output dei dati utente:

    exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
  8. Avvia l'istanza, quindi visualizza l'output del log della console. Riceverai un output simile al seguente esempio:
    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!

Importante: i dati utente sono visibili nella console. Non includere informazioni riservate nei dati che invii.

Informazioni correlate

Esecuzione di comandi sull'istanza Linux durante l'avvio

AWS UFFICIALEAggiornata 2 anni fa