목 차


1. AWS EC2 send-diagnostic-interrupt

   1.1 send-diagnostic-interrupt 개요

2. AWS CLI 명령 실행 방법

   2.1 로컬 PC에 AWS CLI 설치

   2.2 CLI 명령을 위한 Access key 발급 및 로컬 PC 적용

3. send-diagnostic-interrupt 사용 방법    

   3.1 기본 사용법

   3.2 지원 인스턴스 타입 (Nitro 시스템으로 구동되는 모든 EC2 인스턴스)

4. 설정 방법

   4.1 Windows 2008 / 2012 / 2016 일 경우

   4.2 Linux ( RedHat 6.x / 7.x ) 일 경우


 

 

1. AWS EC2 send-diagnostic-interrupt

1.1 send-diagnostic-interrupt 개요

 (1) 목적

EC2 인스턴스에서 커널 패닉 생성을 원격으로 트리거 할 수 있는 새로운 Amazon Elastic Compute Cloud (EC2) API가 출시되었습니다.

EC2:SendDiagnosticInterrupt API는 실행 중인 EC2 인스턴스에 물리적 시스템에 NMI 버튼을 눌러 유사한 진단 인터럽트를 보냅니다.

인스턴스의 하이퍼바이저가 마스크 불가능 인터럽트 (NMI)를 운영 체제로 전송합니다.

NMI 인터럽트가 수신될 때 운영 체제의 동작은 구성에 따라 다릅니다. 

일반적으로 커널 패닉이 발생합니다. 

커널 패닉 동작은 운영 체제 구성에 따라 다릅니다. 크래시 덤프 데이터 파일 생성을 트리거 하거나 역 추적을 얻거나 대체 커널을 로드하거나 시스템을 다시 시작할 수 있습니다.

 


2. AWS CLI 명령 실행 방법

2.1 로컬 PC에 AWS CLI 설치

 (1) 다운링크 : https://docs.aws.amazon.com/ko_kr/cli/latest/userguide/install-cliv2-windows.html

 (2) 다운 받은 설치 파일을 실행하여 설치 진행


2.2 CLI 명령을 위한 Access key 발급 및 로컬 PC 적용

 (1) AWS IAM Console에 접속하여 해당 계정의 임시 Access Key를 발급 받는다.

     로컬 PC CMD 창에서 복사한 Access Key 정보 입력


     Access Key 등록 이후 로컬 PC CMD에서 CLI 명령 수행 가능



3. send-diagnostic-interrupt 사용 방법

3.1기본 사용법

 (1) CLI 명령
- aws ec2 send-diagnostic-interrupt –region ap-northeast-2–instance-id --no-dry-run 

 

3.2 지원 인스턴스 타입 (Nitro 시스템으로 구동되는 모든 EC2 인스턴스)

 (1) C5, C5d, C5n, i3.metal , I3en, M5, M5a, M5ad, M5d, p3dn.24xlarge , R5, R5a, R5ad, R5d, T3, T3a, Z1d 



4. 설정 방법

4.1 Windows 2008 / 2012 / 2016 일 경우

 (1) NMI Crash Dump 를 남기기 위해 레지스트리 값 등록 (Windows 2008 R2에서는 적용 필수)

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl" /v NMICrashDump /t REG_DWORD /d 0x00000001 /f

 

 (2) Crash Dump 를 남기기 위해 레지스트리 값 등록 (전체 메모리 덤프 값으로 설정)

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\CrashControl" /v CrashDumpEnabled /t REG_DWORD /d 0x00000001 /f

 

 (3) 가상메모리 설정 (아래의 3개 옵션 중에 하나가 선택되어 있는지 확인).

  1. Automatically manage paging file size for all drives
  2. Custom size : Initial size (시스템 메모리), Maximum Size (시스템 메모리)

        예) EC2의 메모리가 2G 일 경우

             Initial size (MB) : 2048
             Maximum size (MB) : 2048

  1. System managed size

설정 완료 후 Set 또는 설정 버튼 클릭, 상황에 따라 재부팅 될 수도 있음

     

주의 : Initial size 가 시스템 메모리보다 작을 경우는 덤프가 생성 되지 않을 수도 있음

 

(4) 다른 EC2 서버에서 AWS CLI 명령 실행

aws ec2 send-diagnostic-interrupt --instance-id i-xxxx --no-dry-run --profile your-profile-name

 

보통 3~5분뒤에 재부팅 되고 인스턴스에 연결하면 %SystemRoot%MEMORY.DMP 파일이 생성되어 있는 것을 볼 수 있습니다. (C:\Windows\MEMORY.DMP)

 

4.2 Linux ( RedHat 6.x / 7.x ) 일 경우

주의 : 평소 정상 작동시에는 아래와 같이 먼저 설정 되어 있어야 합니다. 

 

 (1) 패키지 설치

$ sudo yum install kexec-tools crash  # kdump & kexec 설치 구성


 (2) 충돌 커널에 예약 메모리양을 할당 (crashkernel=160M 추가)

$ sudo vi /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="crashkernel=160M vconsole.keymap=us console=ttyS0,115200n8 console=tty0 crashkernel=auto     vconsole.font=latarcyrheb-sun16"

GRUB_DISABLE_RECOVERY="true"

 

할당할 메모리양은 인스턴스의 메모리 크기에 따라 다릅니다. 일반적으로 추천하는 것은  kdump로, 할당된 메모리가 충분한지 테스트하는 것이 좋습니다.

 

 (3) grub 구성 다시 빌드

$ sudo grub2-mkconfig -o /boot/grub2/grub.cfg

 

$ sudo vi /etc/sysctl.conf

kernel.unknown_nmi_panic=1           # 맨아래에 추가

 

 (4) kdump 서비스 시작 후 재부팅

$ sudo systemctl enable kdump.service    # Linux 7.x

 

$ sudo chkconfig kdump on              # Linux 6.x

 

 (5) 다른 EC2 서버에서 AWS CLI 명령 실행

$ sudo aws ec2 send-diagnostic-interrupt --instance-id i-xxxx --no-dry-run --profile your-profile-name

 

보통 3~5분뒤에 재부팅 되고 인스턴스에 연결하면 /var/crash 파일이 생성되어 있는 것을 볼 수 있습니다.

 

 (6) 덤프 생성 확인

[ec2-user@ip-10-10-2-169 crash]$ pwd

/var/crash

[ec2-user@ip-10-10-2-169 crash]$ ls -l

total 0

drwxr-xr-x. 2 root root 42 Apr  2 02:32 127.0.0.1-2021-11-01-02:32:39

[ec2-user@ip-10-10-2-169 crash]$