Ir para o conteúdo

Como posso enviar a saída de user-data para os logs do console em uma instância do EC2 que está executando o RHEL?

4 minuto de leitura
0

Quero solucionar meu bootstrap de instância do Amazon Elastic Compute Cloud (Amazon EC2) Linux RHEL 7, RHEL 8 ou RHEL 9. Quero registrar a invocação user-data e enviá-la para os logs do console.

Breve descrição

Para solucionar problemas com o bootstrap de sua instância do EC2, modifique seu script bash de user-data para redirecionar toda a saída. Redirecione a saída para /var/log/user-data.log e /dev/console. Quando o script é executado, é possível visualizar os logs de invocação de user-data diretamente no console.

Observação: a resolução a seguir é somente para RHEL 7, RHEL 8 e RHEL 9. Para obter informações sobre o Amazon Linux 2 e o Amazon Linux 2023, consulte Como envio a saída user-data para os logs do console em uma instância do EC2 para Amazon Linux 1, Amazon Linux 2 ou Amazon Linux 2023?

Resolução

Para enviar a saída user-data para os logs do console em uma instância do EC2 que está executando o RHEL, conclua as seguintes etapas:

  1. Abra o console do Amazon EC2.

  2. Conecte-se a uma instância existente ou executar uma nova instância. Em seguida, use o SSH para se conectar à instância.

  3. Edite a linha GRUB_CMDLINE_LINUX em /etc/default/grub e altere “console=ttyS0,115200n8 console=tty0” para “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 recriar o arquivo /boot/grub2/grub.cfg, execute o seguinte 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. Interrompa a instância.

  6. (Opcional) Para executar os dados do usuário sempre que a instância for reinicializada, configure o script de dados do usuário e as diretivas cloud-init com um arquivo MIME de várias partes.
    Observação: por padrão, os scripts de dados de usuário e as diretivas de cloud-init são executados somente durante o primeiro ciclo de inicialização de uma instância do EC2.

  7. Para redirecionar a saída user-data para o console, execute o seguinte comando para editar o campo de dados do usuário:

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

    Observação: o script para redirecionar a saída de user-data começa com a linha #!/bin/bash -xe. O script anterior contém dados de configuração cloud-init que executam o shell script toda vez que a instância é inicializada. No comando anterior, a linha a seguir redireciona a saída de user-data:

    exec > >(tee /var/log/user-data.log|logger -t user-data -s 2>/dev/console) 2>&1
  8. Execute a instância e, em seguida, visualize a saída do log do console. Você recebe um resultado do console semelhante ao exemplo a seguir:
    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: seus dados de usuário estão visíveis no console. Não inclua informações confidenciais nos dados que você envia.

Informações relacionadas

Executar comandos na instância do Linux no lançamento

AWS OFICIALAtualizada há 2 anos
Sem comentários