인프라를 운영할 때 가장 중요한 것은 성능과 더불어 서버의 안정성이다.
이를 위해선 주기적으로 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 ~
....
이제 인스턴스에 부하를 주어 경보가 발생하는지 확인해보자.
인스턴스에 접속하여 아래 명령어를 실행시킨다.
(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%의 데이터는 무시되므로,
신뢰도가 높다는 장점이 있다.
더 자세한 글은 아래 글을 참고한다.
실습이 완료된 후에는 반드시 인스턴스를 종료해야 한다.
인스턴스 종료 후 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 |