[AFOS 2기] 2주차 인스턴스 배포 & CloudWatch 모니터링
본문 바로가기
Cloud/AWS

[AFOS 2기] 2주차 인스턴스 배포 & CloudWatch 모니터링

by Meenzino 2021. 7. 8.

Amazon CloudWatch란?


Amazon Web Services(AWS) 리소스와 AWS에서 실시간으로 실행 중인 애플리케이션을 모니터링합니다.
지표를 감시해 알림을 보내거나 임계값을 위반한 경우 모니터링 중인 리소스를 자동으로 변경하는 경보를 생성할 수 있습니다.

  • CloudWatch로 인스턴스 모니터링
  • Amazon EC2는 기본적으로 측정치 데이터를 5분 동안 CloudWatch에 전송합니다.
  • CPUUtilization : 인스턴스에서 현재 사용 중인 할당된 EC2 컴퓨팅 유닛(ECU)의 비율(%)입니다 , 단위: 백분율

 

출처 : https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/monitoring/cloudwatch_architecture.html

 

[실습 전 사전 준비 사항]


신규 VPC 생성 : SecondVPC 생성

1. 서비스 -> VPC -> 'VPC 마법사 시작' 클릭


2. '단일 퍼블릭 서브넷이 있는 VPC' -> 선택


3. 아래 내용처럼 입력 후 'VPC 생성' 클릭

IPv4 CIDR 블록 : 10.20.0.0/16 
VPC 이름 : SecondVPC 
퍼블릭 서브넷의 IPv4 CIDR : 10.20.1.0/24 
가용 영역 : ap-northeast-2a 
서브넷 이름 : SecondVPC-Subnet1

 

 

[실습] 인스턴스 배포 및 모니터링/알람

 

AFOS 스터디 이미지 참조

 

1. 인스턴스 배포


https://watermelon-sugar.tistory.com/14 1주 차 글을 참고
1주 차 인스턴스 생성과 다른 부분은 단계 3 : 인스턴스 세부 정보 구성, 단계 5 : 태그 추가 부분만 바꿔주시길 바랍니다.

단계 3 : 인스턴스 세부 정보 구성

  • 네트워크 : SecondVPC
  • 서브넷 : 'SecondVPC' 선택 시 자동으로 1개 있는 서브넷 선택됨
  • 퍼블릭 IP 자동 할당 : 활성화 
  • 고급 세부 정보

사용자 데이터에 아래 내용을 복사 붙여 넣기 -> 인스턴스 시작 시 명령 실행합니다.
(호스트 네임을 바꿔주고 웹서버를 설치, 실행해주는 명령어입니다.)

#!/bin/bash 
hostnamectl --static set-hostname AFOS2-WebSrv 
yum install httpd -y 
systemctl start httpd && systemctl enable httpd 
echo "<h1>Welcome to AFOS2 Web Server</h1>" > /var/www/html/index.html

단계 5 : 태그 추가

  • 키: Name & 값 : WebSrv

나머지는 1주차 구성과 똑같이 인스턴스 생성

2. 인스턴스의 퍼블릭 IP를 확인 후 SSH 프로그램으로 접속

저는 MobaXterm로 접속해보겠습니다.

프로그램 실행 후 아래와 같이 설정 후 OK클릭


접속이 잘된 것을 확인할 수 있습니다.

 

3. EC2 퍼블릭 IP로 웹브라우저 접속 확인

 

  • 인스턴스 생성할 때 넣었던 스트립트 명령 적용 확인

 

  • EC2 기본 정보 확인

서비스 -> EC2 -> 인스턴스 클릭 -> 모니터링 -> CPU사용률(%) 확인

 

 

# CPU 확인
cat /proc/cpuinfo
[root@ip-172-31-43-250 ~]# cat /proc/cpuinfo |egrep '(processor|name)'
processor	: 0
model name	: Intel(R) Xeon(R) CPU E5-2676 v3 @ 2.40GHz

# 메모리 확인 1GiB
[root@ip-172-31-43-250 ~]# cat /proc/meminfo |grep MemTotal
MemTotal:        1006900 kB

# 다양한 시스템 관련 부하 확인 툴 설치
# sudo 는 슈퍼유저의 권한으로 실행
[ec2-user@ip-172-31-46-223 ~]$ sudo yum -y install htop

# htop 으로 CPU Memory 등 시스템 자원 확인
[ec2-user@ip-172-31-46-223 ~]$ htop

# 프라이빗 IP 정보 확인
[ec2-user@ip-172-31-46-223 ~]$ ip -br -c addr show
lo               UNKNOWN        127.0.0.1/8 ::1/128
eth0             UP             172.31.46.223/20 fe80::880:baff:fe0f:2598/64

[ec2-user@ip-172-31-46-223 ~]$ ip a

# 퍼블릭 IP 정보 확인
[ec2-user@ip-172-31-46-223 ~]$ curl ipinfo.io

# 스토리지 확인 : 부트볼륨(EBS) 정보 확인
[ec2-user@ip-172-31-46-223 ~]$ lsblk
NAME    MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
xvda    202:0    0   8G  0 disk
└─xvda1 202:1    0   8G  0 part /

[ec2-user@ip-172-31-46-223 ~]$ df -h
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        482M     0  482M   0% /dev
tmpfs           492M     0  492M   0% /dev/shm
tmpfs           492M  460K  492M   1% /run
tmpfs           492M     0  492M   0% /sys/fs/cgroup
/dev/xvda1      8.0G  1.4G  6.7G  18% /
tmpfs            99M     0   99M   0% /run/user/0
tmpfs            99M     0   99M   0% /run/user/1000

# 서비스 제공 확인(포트 Listen) : SSH(서버 서비스 중, TCP 22 포트 사용) , HTTP(서버 서비스 중, TCP 80 포트 사용)
# 예시) ss -t(TCP) -l(Listen) -n(숫자로 출력)
[ec2-user@ip-172-31-46-223 ~]$ ss -tl
State           Recv-Q           Send-Q                      Local Address:Port                       Peer Address:Port
LISTEN          0                128                               0.0.0.0:ssh                             0.0.0.0:*
LISTEN          0                128                                     *:http                                  *:*
...

[ec2-user@ip-172-31-46-223 ~]$ ss -tln
State           Recv-Q           Send-Q                      Local Address:Port                       Peer Address:Port
LISTEN          0                128                               0.0.0.0:22                              0.0.0.0:*
LISTEN          0                128                                     *:80                                    *:*
...

 

4. EC2 CPUUtilization(사용률) 경보(Alarm) 생성


EC2 1분간격 모니터링 설정(약간의 추가 비용 발생) : EC2 -> 모니터링 및 문제 해결 -> 세부 모니터링 관리[활성화]


서비스 -> CloudWatch 검색 -> 경보 -> 경보 생성

[ 단계 1 ] 지표 및 조건 지정 -> '지표 선택' -> ' EC2 ' 인스턴스별 지표 , 'CPUUtilization' 검색 후 '인스턴스ID' 확인


탭 메뉴 중 '그래프로 표시된 지표(1)' 클릭 -> 기간 1분
'그래프 옵션' 클릭 -> 위젯 유형에 '누적 면접' 클릭 -> 하단 [지표 선택] 클릭


임계값 유형 : 정적
경보 조건 : 보다 큼(> 임계값)
...보다 : 50
추가구성 - 누락된 데이터 처리 : 누락된 데이터를 양호(임계값 위반 안 함) 으로 처리


[단계 2] 작업 구성 -> 아래 설정 후 맨 하단 다음 클릭

경보 상태 트리거 : 경보 상태 SNS 주제 선택 : 새 주제 생성 새 주제 생성 이름 : EC2_CPU_High_Alarms_Topic 알림을 수신할 이메일 엔드포인트 : '각자 자신의 개인 이메일, 이메일2...' ← @kakao.com 이메일 권장 카톡 즉시 확인 가능

 


이메일을 확인 하고 Confirm subscription 클릭



EC2 작업 : EC2 작업 추가 -> 경보상태 -> 이 인스턴스 재부팅 -> 맨 하단 '다음' 클릭



[단계 3] 경보 이름 : WebSrv-CPU-High-Alarm -> 아래 '다음' 클릭


[단계 4] 맨 아래 '경보 생성' 클릭

5. CPU 부하 발생

  • CPU 부하 툴 설치
    sudo amazon-linux-extras install -y epel
    sudo yum install -y stress-ng
    stress-ng -h​

EC2 - 모디터링 - CPU 사용률(%) 확인 -> 오른쪽 중간 상단 ' 자동 새로 고침 ' 간격 10초


(옵션) EC2 Shell 에서 top, htop 로 CPU 상태 확인

  • CPU 부하 발생
    sudo stress-ng --cpu 1 --cpu-load 70% --timeout 10m --metrics --times --verify​​

 

6. 알람 이메일 확인 & EC2 자동 재부팅 확인

 

CPU 사용률 확인 및 EC2 재부팅

 

 

알람이메일


CPU 부하 발생 후 알람 이메일과 EC2의 재부팅을 확인 할 수 있었습니다.

실습 완료 후 반드시 EC2를 삭제 해주세요!! -> 인스턴스 클릭 -> 인스턴스 종료 ->
종료 & CloudWatch 경보 -> 작업 -> 삭제


참고 : AFOS 스터디

댓글