Saltar al contenido

¿Cómo puedo enviar el resultado de los datos de usuario a los registros de la consola en una instancia de EC2 que ejecuta RHEL?

4 minutos de lectura
0

Quiero solucionar los problemas de arranque de mi instancia de Amazon Elastic Compute Cloud (Amazon EC2) Linux RHEL 7, RHEL 8 o RHEL 9. Quiero registrar la invocación de datos de usuario y, a continuación, enviarla a los registros de la consola.

Descripción corta

Para solucionar problemas con el arranque de la instancia de EC2, modifica el script bash de datos de usuario para redirigir todos los resultados. Redirige el resultado a /var/log/user-data.log y /dev/console. Cuando se ejecuta el script, puedes ver los registros de invocación de datos de usuario directamente en la consola.

Nota: La siguiente resolución es solo para RHEL 7, RHEL 8 y RHEL 9. Para obtener información sobre Amazon Linux 2 y Amazon Linux 2023, consulta ¿Cómo envío el resultado de los datos de usuario a los registros de la consola en una instancia de EC2 para Amazon Linux 1, Amazon Linux 2 o Amazon Linux 2023?

Resolución

Para enviar el resultado de los datos de usuario a los registros de la consola en una instancia de EC2 que ejecuta RHEL, sigue estos pasos:

  1. Abre la consola de Amazon EC2.

  2. Conéctate a una instancia existente o inicia una nueva. A continuación, usa SSH para conectarte a la instancia.

  3. Edita la línea GRUB_CMDLINE_LINUX en /etc/default/grub y cambia «console=ttyS0,115200n8 console=tty0» a «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. Para volver a crear el archivo /boot/grub2/grub.cfg, ejecuta el siguiente 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. Detén la instancia.

  6. (Opcional) Para ejecutar los datos de usuario cada vez que se reinicie la instancia, configura el script de datos de usuario y las directivas de cloud-init con un archivo MIME de varias partes.
    Nota: De forma predeterminada, los scripts de datos de usuario y las directivas de cloud-init solo se ejecutan durante el primer ciclo de arranque del inicio de una instancia de EC2.

  7. Para redirigir el resultado de los datos de usuario a la consola, ejecuta el siguiente comando para editar el campo de datos de usuario:

    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: El script para redirigir el resultado de los datos de usuario comienza con la línea #!/bin/bash -xe. El script anterior contiene datos de configuración de cloud-init que hacen que el script de shell se ejecute cada vez que se inicia la instancia. En el comando anterior, la línea siguiente redirige el resultado de los datos de usuario:

    exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
  8. Inicia la instancia y, a continuación, ve el resultado del registro de la consola. Recibirás un resultado de la consola similar al del ejemplo siguiente:
    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: Los datos de usuario están visibles en la consola. No incluyas información confidencial en los datos que envíes.

Información relacionada

Ejecutar comandos en la instancia de Linux durante el inicio

OFICIAL DE AWSActualizada hace 2 años