사용자 데이터 출력을 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/grubGRUB_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 구성 데이터입니다. 이전 명령에서 다음 줄은 사용자 데이터 출력을 리디렉션합니다.

    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 공식업데이트됨 일 년 전
댓글 없음