23-06-01 Sprint
카테고리: Sprint
Auto Scaling + CloudWatch를 이용한 알림
추가적으로 모니터링을 통해 모든 지표를 항상 관찰할 수 없으므로, 주요 메트릭의 임계치, 또는 장애 발생 예상 시점(예를 들어, CPU 사용량이 80%에 도달할 경우)을 경보의 형태로 제공해야 합니다. 이를 기존에 익혔던 SNS 및 람다를 통해 구현해 봅시다.
💡 Bare Minimum Requirement
- EC2 서버를 ASG를 통해 구성합니다. 구성은 다음을 따릅니다.
- CloudWatch 알람을 통해 ASG의 스케일 인/아웃을 진행합니다.
- 스케일 인/아웃이 진행될 때 디스코드에 알림을 보냅니다.
- 메트릭을 바탕으로 장애 발생 예상 시점에 디스코드에 알림을 보냅니다.
- CPU 사용률(CPUUtilization) 값이 특정 값 이상일 때 경보가 발생하게 하세요.
💡 알림 및 경보 아키텍처
EC2 수집 주기의 기본값은 5분입니다. ASG의 경우 [지표 수집 활성화]를 통해 지표를 CloudWatch에 기록합니다.
이러한 기록을 이용해 시간에 따른 메트릭 추이를 확인할 수 있습니다. 이때 경보를 통해 임계치에 따른 메시지가 SNS로 전달됩니다. 또한 ASG에서 발생하는 스케일링 이벤트를 트리거하기 위해 경보 두 개(스케일 인/아웃)를 자동으로 생성합니다.
참고로, CloudWatch의 메트릭 보존 기간은 수집 주기에 따라 다릅니다. 세부 모니터링 옵션을 활성화하여 수집 주기를 조절할 수 있습니다. 자세한 내용은 CloudWatch FAQ를 통해 확인하세요.
🏷 시작 템플릿 구성
ASG를 위한 시작 템플릿 구성은 다음을 따릅니다.
-
그룹 정보
- 원하는 용량: 1
- 최소 용량: 1
- 최대 용량: 3
-
시작 템플릿은 다음 구성을 따릅니다.
-
Ubuntu Server (LTS)
-
t2.nano
-
기존 혹은 신규 키 페어를 사용합니다
-
보안 그룹: 인바운드 HTTP 및 SSH 허용
-
사용자 데이터
1 2 3 4 5
#!/bin/bash echo "Hello, World" > index.html sudo apt update sudo apt install stress nohup busybox httpd -f -p 80 &
-
- 템플릿 이름 쓰기
- 요구 사항 대로 우분투 LTS 버전 생성 및 t2.nano
- 키페어 및 네트워크 설정
- 고급 세부 정보 제일 아래 쪽 사용자 데이터에 내용 추가
- 템플릿 생성 버튼 누르면 생성 완료
- 만들어진 템플릿으로 Auto Scaling 그룹 생성
- Auto Scaling 그룹 생성 완료
- Cloud Watch 경보 메시지 발송을 위한 SNS 주제 생성
🏷 CloudWatch와 조정 정책
- CloudWatch를 통한 Auto Scaling 그룹 지표 수집 활성화 필요
- Scale-in 조건: CPU 40% 이하
- Scale-out 조건: CPU 50% 이상
- CloudWatch 경보 생성
- 같은 내용으로 Scale in 경보 추가 생성
- 경보가 울리면 자동으로 인스턴스 생성, 추가를 할 수 있도록 Auto Scaling 그룹에서 추가 정책 생성
- 마찬가지로 Scale in 정책도 추가 생성
Lambda 코드
- Python 3.x 버전의 언어로 작성된 코드가 준비되어 있습니다. 이를 이용해 람다 함수를 생성하세요.
- 디스코드 웹훅 URL은
HOOK_URL
환경변수를 이용해 추가하며, 다음 URL을 입력해 넣습니다.
1
https://discord.com/api/webhooks/1102396954543128618/785PFD5H5ORooihWDdipYdVsFQdSwETMypye-X9EavBTrhXGg8DyBLRJW66EGad6XIpD
- 코드의
username
부분에CloudWatch Monitoring
대신, 여러분의 이름을 적어 넣으세요.
이 함수는, cloudwatch-alarm-to-slack-python
블루프린트를 기반으로 작성되었습니다.
🏷 람다 함수 생성
- 함수 코드 넣고 요구 사항대로 작성 후 Deploy
- SNS 로 메시지가 도착하면 람다가 트리거 될 수 있도록 구성
- 환경 변수에 웹훅 URL 주소 추가
이걸로 필요한 구성은 전부 만들었기 때문에 테스트만 진행 하면 된다.
부하 테스트
부하 테스트를 위해서 stress
명령어를 사용합니다. 다음 명령어를 이용하면, CPU를 100%를 사용하도록 만들 수 있습니다. top
명령어를 통해서 정말 100%를 사용하는지 확인해 보세요.
1
$ stress -c 1
- AWS CLI 로 EC2 접속 후 스트레스 테스트 진행
- CPU 사용률에 따라 Discord 에 알림이 간다.
댓글남기기