AWS

AWS CloudWatch를 통한 장애 탐지 및 모니터링

JAEJUNG 2021. 7. 21. 16:40

인프라를 운영할 때 가장 중요한 것은 성능과 더불어 서버의 안정성이다.

이를 위해선 주기적으로 Instance의 상태를 체크해야 하고, 장애 발생을 대비하기 위해 모니터링하는 과정이 필요하다.

이번 포스팅에선 웹 서버를 구성한 뒤에 이를 CloudWatch로 모니터링하고, AWS SNS 서비스를 통해

notify하는 과정을 설명한다.

 

EC2 인스턴스 생성

- 프리티어를 위해 제공되는 여러 os가 있는데 이 실습에선 기본적인 Amazon Linux로 구성하도록 하겠다.

- 프리티어로 실습할 땐 인스턴스 유형은 무조건 t2.micro로!

(다른 건 모두 과금)

 

- 다른 설정은 건드리지 않고, 아래와 같이 CloudWatch 세부 모니터링 활성화 옵션을 체크해준다.

(실습이 끝나면 반드시 Terminated 시켜주기)

 

- [스토리지 추가] 단계에서도 변경할 설정은 없다.

참고로, 프리 티어는 최대 30GB의 EBS와 함께 사용가능한 스토리지가 주어지며 실무에서도 쉽게 50GB 이상은 주지 않는 것을 권장한다. (EBS = 비쌈)

 

- [태그], [보안그룹] 항목 모두 pass하며 검토를 통해 설정이 잘 됐는지 확인한다.

 

- 최종단계로 키 페어를 생성해주는데, 이 Key는 외부에서 SSH를 통해 EC2 인스턴스에 접속할 때 사용한다.

CompanyName_ProjectName_Purpose의 형태로 리소스를 관리하는 것을 추천한다.

 

- [인스턴스 시작]을 누르고 [인스턴스] 탭에 가보면 인스턴스가 생성중인 것을 확인할 수 있으며, 약 5분 내외로 이루어진다.

 

CloudWatch 경보 설정

인스턴스는 시간이 지나면 자동으로 생성되므로, 이를 모니터링하기 위한 추가 작업을 진행한다.

 

- [작업] 탭을 눌러 해당 인스턴스에 대한 CloudWatch 경보를 추가한다.

 

- 아래와 같이 새로운 경보를 설정해준다.

 

- 생성을 완료하면 [모든 경보] 항목에서 생성한 경보를 확인할 수 있다.

 

EC2 인스턴스에 부하 발생시키기

CloudWatch 경보를 생성할 때 CPU 사용률을 10%로 설정했기 때문에 인스턴스에 실제 부하를 주어 cpu 사용률이 10%를 넘도록 만들어보자

 

먼저 인스턴스에 접속해야 하는데 접근 방법은 아래와 같다.1. AWS 웹 콘솔에서 제공하는 SSH 연결 기능 사용2. 로컬에서 직접 SSH를 통해 EC2 인스턴스로 접속

 

AWS에선 편리한 원격 접속을 위해 [연결] 기능을 제공한다.

위와 같이 클릭 몇 번만으로 EC2 인스턴스에 접속이 가능하다.

 

만약 직접 SSH를 통해 접속해야 한다면 아까 다운받은 Key를 사용하면 된다.

Putty나 SecureCRT 등 여러 툴이 있지만, 이 글에선 CMD 창을 통해 접속하는 방법을 소개한다.

 

먼저 다운받은 Key pair의 경로를 확인한다.

 

또한 SSH로 접속할 땐 username과 IP 주소(혹은 Domain)이 필요하다.

인스턴스를 생성할 때 기본 사용자 이름은 ec2-user이다.

IP 주소의 경우 생성한 인스턴스의 세부 정보를 통해 확인이 가능하다.

 

접속에 필요한 모든 정보를 확인했으니 이제 CMD 창을 켠 뒤 아래와 같이 명령어를 입력해보자.

ssh -i 다운로드 경로\key파일 ec2-user@퍼블릭 IPv4 주소

 

정상적으로 key파일을 통해 EC2 인스턴스에 접속한 것을 확인할 수 있다.

fingerprint([yes/no])~와 같은 내용이 출력되면 yes를 입력해주면 된다.

 

명령어 입력 시 아래와 같은 내용이 출력되면서 접속이 안된다면 Key 파일을 초기 폴더에서 다른 곳으로 이동했는지

확인한다.

누구나 key 파일을 읽을 수 있다면 보안상 취약하기 때문에 처음 다운받은 경로에 key 파일을 두어야 하며, 이와 관련한

권한 설정은 아래 블로그를 참고하면 좋을 것 같다.

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for ~
....

 

 

윈도우 SSH : UNPROTECTED PRIVATE KEY FILE!

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @         WARNING: UNPROTECTED PRIVATE KEY FILE!          @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@..

4whomtbts.tistory.com

 

이제 인스턴스에 부하를 주어 경보가 발생하는지 확인해보자.

인스턴스에 접속하여 아래 명령어를 실행시킨다.

(AWS 콘솔 화면이 먹통이라면 새로고침을 해주거나 한/영 키를 변경해본다.)

sudo amazon-linux-extras install epel -y
sudo yum install stress -y

stress -c 2

 

stress 테스트를 진행하면서 현재 cpu 사용량을 보고 싶다면 AWS 콘솔과 CMD 모두 접속하여

한 곳에서 top 명령어를 실행하여 확인할 수 있다.

 

CPU 사용률이 10%를 넘으면 경보가 발생하도록 설정했기 때문에 CloudWatch로 돌아가서 확인해보면

경보가 발생한 것을 확인할 수 있다.

 

여기서 그치지 않고, 이 경보가 발생하면 이를 트리거로 사내 모든 엔지니어에게 알람을 전송시킨다던가, 혹은 이메일, 문자를 전송하여 현 상황을 파악할 수 있도록 해야 한다.

AWS SNS(Simple Notification Service)는 이 과정을 대신 수행해주는 서비스이다.

 

AWS SNS를 통해 알람 받기

SNS를 검색하고 들어가보자.

 

[주제] 탭을 클릭하면 생성해놓았던 CloudWatch 경보가 있다.

 

클릭한 후에 [구독 생성]을 클릭해준다.

 

여러 서비스를 통해 알람을 제공받을 수 있으며 간단한 테스트를 위해 이메일을 선택하고 자신의 이메일을 입력한 뒤 구독을 생성해준다.

 

새로운 구독 항목이 생겼으며 해당 이메일로 접속하여 인증을 진행한다.

 

Confirmation을 위한 메일이 도착했으며 Confirm subscription을 눌러준다.

 

구독 상태가 [확인 대기 중]에서 [확인됨]으로 변경된 것을 확인한다.

 

이제 CPU 사용률이 10%를 넘어 경보가 울리고 이때 이메일로 알람이 오는지 확인한다.

먼저 경보 상태가 정상인지 확인한다.

 

다시 인스턴스에 접속한 뒤 stress 명령어를 통해 부하를 발생시킨다.

 

CloudWatch 경보가 다시 발생했으며,

 

이메일을 통해 알람이 온 것을 확인할 수 있다.

 

AWS에선 CPU 사용률이 5분간 P90 값이 50% 이상이면 유의하게 이상이 있다고 보고 있다. 

만약 탐지값이 100개라고 가정하면 그 중 90%의 값이 n %를 넘었을 때 경보가 발생되는 것이다.

P90을 사용하는 이유는 중위값 90%를 가져와서 통계로 사용하기 때문에 양 극단의 5%의 데이터는 무시되므로,

신뢰도가 높다는 장점이 있다.

더 자세한 글은 아래 글을 참고한다.

 

Amazon CloudWatch 업데이트 – 백분율 통계 및 신규 대시보드 위젯 추가 | Amazon Web Services

최근에 Amazon CloudWatch에 많은 기능을 추가하고 있습니다. 로그 통합 기능, 통계 보유 기간 확대 및 사용자 인터페이스 개선 등이 있었습니다. 오늘은 백분율 기반의 통계 및 신규 대시보드 위젯

aws.amazon.com

 

실습이 완료된 후에는 반드시 인스턴스를 종료해야 한다.

 

인스턴스 종료 후 CloudWatch와 SNS 서비스에서 생성한 것들을 삭제해준다.

'AWS' 카테고리의 다른 글

AWS CLI를 통한 Amazon S3 데이터 업로드  (0) 2021.08.11
VPC_hands-on  (0) 2021.08.10
S3_hands-on  (0) 2021.08.10
EC2_hands-on  (0) 2021.08.10
VPC(Virtual Private Cloud)란?  (0) 2021.07.21