사이드 프로젝트를 진행하면서 얼마전 logback + sentry + slack으로 로그 모니터링을 구축했었다. 확실히 모니터링 시스템을 구축하니까 개발에만 집중할 수 있어서 너무 편리하다.. 이번에는 AWS의 CloudWatch를 활용해서 내가 가용하고 있는 EC2와 RDS를 모니터링 해보려고 한다. 만약 특정 임계값을 넘으면 slack으로 알림을 받고 이를 통해 이상현상이 발생하는 원인을 유추하고 해결해보려고 한다. 나는 AWS의 CloudWatch + SNS + Chatbot + slack으로 모니터링 및 알림 서비스를 구축해보려 한다.
AWS의 Simple Notification Service, 즉 SNS는 애플리케이션 간 및 애플리케이션과 사용자 간 통신 모두를 위한 안전 관리형 메시징 서비스다. Pub/Sub 기반의 메세징 서비스이며 이메일, HTTP(S), SQS, SMS, Lambda 등 다양한 프로토콜로 메시지 전달이 가능하다.
AWS의 SNS에서 새로운 주제를 생성한다. 유형은 표준으로, 이름을 적고 생성하기 버튼을 클릭하자.
AWS Chatbot은 Amazon Chime, slack과 연동하여 업무 자동화를 구현할 수 있는 서비스이며 최근에 GA(General Available) 되었다. 지원하는 Webhook API를 AWS의 lambda 등을 활용하여 구현하는 것보다 훨씬 쉽고 간단하게 슬랙과 연동할 수 있다.
AWS의 Chatbot에서 새 클라이언트 구성을 클릭하고 유형으로 Slack을 선택하자.
아래와 같은 화면이 나오는데 허용 버튼을 클릭하자
구성된 클라이언트에서 Slack의 워크스페이스를 클릭한 다음 새 채널 구성 버튼을 클릭한다.
아래와 같이 설정 정보를 입력하고 저장 버튼을 클릭하자.
다시 SNS 서비스에 들어가 보자. chatbot에 대한 구독이 새로 생겼다.
Amazon CloudWatch는 AWS 리소스와 AWS에서 실시간으로 실행 중인 애플리케이션을 모니터링 하는 서비스이다. 지표를 감시해 알림을 보내거나 임계 값을 위반한 경우 모니터링 중인 리소스를 자동으로 변경하는 경보를 생성할 수 있다. 여기서 경보는 인스턴스 중지, auto scaling 및 Amazon SNS 작업 시작, 종료 등으로 구성할 수 있다.
AWS의 CloudWatch에서 경보 생성을 클릭하자.
모니터링할 지표를 선택하자. 굉장히 많은 지표가 존재한다. 나는 CPU Utilization을 선택했다.
조건을 선택하자. 나는 CPU Utilization로 70%를 임계 값으로 설정했다.
작업 구성을 설정하자. 이전에 만들었던 SNS를 선택하자.
경보 설명을 작성하고 다음 버튼을 누르면 CloudWatch 경보가 생성된다.
위 1번부터 5번까지 과정을 지표로 RDS Utilization로 설정하고 반복한다.
이렇게 해서 CloudWatch + SNS + Chatbot + Slack으로 EC2와 RDS의 모니터링 및 알림 시스템을 구축해보았다. 이처럼 Slack으로 알림을 받도록 구성하니까 매번 CloudWatch 서비스에 접속하지 않고도 이상 현상이 발생하기 전에 알림을 통해 선제 대응을 할 수 있다는 점이 너무 편리한 거 같다. slack 없이 프로젝트 못할 거 같다... 프로젝트에서는 CPU, RDS의 Utilization가 70% 넘었을 때 Slack으로 알림을 보내도록 설정했고 아래는 테스트용으로 임계 값을 0.4로 잡았을 때 slack에 전송된 알림이다.