본문 바로가기
기술

초보자를 위한 AWS 모니터링: CloudWatch와 SNS 연동하기

by 스타스토리. 2025. 6. 24.
반응형
핵심 요약: 본 문서는 AWS의 핵심 모니터링 서비스인 CloudWatch와 메시징 서비스인 SNS(Simple Notification Service)의 개념을 설명한다. 실습을 통해 EC2 인스턴스의 CPU 사용률을 감시하는 CloudWatch 경보를 생성하고, 임계값 초과 시 SNS 주제(Topic)를 통해 이메일 알림을 자동으로 발송하는 전 과정을 안내한다.

안정적인 클라우드 인프라 운영의 핵심은 '관찰 가능성(Observability)'을 확보하는 것이다. 단순히 애플리케이션을 실행하는 것을 넘어, 시스템의 상태를 실시간으로 파악하고 이상 징후를 조기에 감지하여 대응할 수 있어야 한다. AWS는 이를 위해 강력한 모니터링 및 알림 서비스를 제공한다. Amazon CloudWatch는 우리 인프라의 '눈'이 되어 시스템 지표를 감시하고, Amazon SNS는 '입'이 되어 문제가 발생했을 때 즉시 알려주는 역할을 수행한다. 이 두 서비스를 연동하여 자동화된 모니터링 및 알림 시스템을 구축하는 방법을 알아본다.

1. 핵심 서비스 개념

1.1. Amazon CloudWatch: AWS의 중앙 관제탑

CloudWatch는 AWS 리소스와 애플리케이션의 성능 데이터를 지표(Metrics), 로그(Logs), 이벤트(Events) 형태로 수집하여 중앙에서 모니터링하는 서비스이다. EC2 인스턴스의 CPU 사용률, 네트워크 트래픽, 디스크 I/O 등 다양한 기본 지표를 자동으로 수집하며, 사용자가 정의한 지표도 수집할 수 있다. CloudWatch의 핵심 기능은 경보(Alarm)로, 특정 지표가 설정된 임계값을 넘어서면 사전에 정의된 작업을 자동으로 수행하도록 트리거하는 역할을 한다.

1.2. Amazon SNS: 다목적 메시징 허브

SNS(Simple Notification Service)는 게시/구독(Pub/Sub) 모델을 사용하는 완전관리형 메시징 서비스이다. '게시자(Publisher)'가 특정 '주제(Topic)'에 메시지를 보내면, 해당 주제를 '구독(Subscriber)'하는 모든 엔드포인트에 메시지가 동시에 전달(fan-out)된다. 구독자는 이메일, SMS, SQS 대기열, Lambda 함수 등 다양한 형태로 메시지를 수신할 수 있다. CloudWatch 경보는 SNS 주제의 게시자 역할을 수행하여, 경보 발생 시 여러 대상에게 동시에 알림을 보낼 수 있다.

2단계: 알림 시스템 구축 실습

EC2 인스턴스의 CPU 사용률이 30%를 초과하면 지정된 이메일로 알림을 보내는 시스템을 구축한다.

2.1. SNS 주제(Topic) 및 구독 생성

  • AWS 콘솔에서 SNS 서비스로 이동 후, 좌측 메뉴에서 '주제'를 선택하고 '주제 생성' 버튼을 클릭한다.
  • '유형'은 표준(Standard)을 선택하고, '이름'에 admin-topic을 입력한 후 '주제 생성'을 클릭한다.
  • 생성된 주제의 상세 페이지에서 '구독 생성' 버튼을 클릭한다.
  • '프로토콜'은 이메일(Email)을 선택하고, '엔드포인트'에 알림을 수신할 본인의 이메일 주소를 정확히 입력한다.
  • '구독 생성'을 클릭한다.
🧐 구독 확인(Confirm Subscription)은 필수입니다
구독을 생성하면 입력한 이메일 주소로 AWS로부터 확인 메일이 발송된다. 메일 본문의 'Confirm subscription' 링크를 클릭해야만 구독 상태가 'Confirmed'로 변경되어 정상적으로 알림을 수신할 수 있다. 이 절차는 원치 않는 스팸 메일 수신을 방지하기 위한 것이다.

2.2. CloudWatch 경보 생성 및 연동

  • EC2 콘솔의 '인스턴스' 메뉴에서 모니터링할 인스턴스(webserver 1)를 선택한다.
  • '작업' > '모니터링 및 문제 해결' > 'CloudWatch 경보 관리'를 클릭한다.
  • '경보 알림' 섹션에서 '알림 보내기' 대상을 방금 생성한 SNS 주제인 admin-topic으로 선택한다.
  • '경보 임계값' 섹션에서 아래와 같이 경보 발생 조건을 설정한다.
- 경보 조건 유형: 임계값
- 지표 이름: CPUUtilization
- 통계: 평균
- 기간: 1분 (테스트를 위해 짧게 설정)
- 조건: 보다 큼 (>)
- 임계값: 30

위 설정은 '1분 동안의 평균 CPU 사용률이 30%를 초과하면' 경보를 발생시키라는 의미이다. 모든 설정을 완료한 후 '경보 생성' 버튼을 클릭한다.

3단계: 부하 테스트 및 알림 확인

이제 생성된 경보가 정상적으로 동작하는지 테스트할 차례이다.

  • ALB의 DNS 주소로 접속하여 샘플 웹 애플리케이션의 'LOAD TEST' 버튼을 여러 번 클릭하여 인스턴스에 인위적인 부하를 발생시킨다.
  • CloudWatch 콘솔의 '경보 > 모든 경보' 메뉴로 이동하면, 생성한 경보의 상태가 '확인(OK)'에서 '경보(In alarm)'로 변경되는 것을 확인할 수 있다.
  • 잠시 후, SNS 구독 시 입력했던 이메일 주소로 "ALARM: ..." 형태의 제목을 가진 알림 메일이 도착하는지 확인한다.

CloudWatch 경보 발생 시 SNS를 통해 수신되는 이메일 알림 예시

결론

Amazon CloudWatch와 SNS를 연동함으로써, 우리는 더 이상 수동으로 서버 상태를 확인하지 않아도 되는 자동화된 모니터링 및 알림 시스템을 구축하였다. 이 시스템은 CPU 사용률뿐만 아니라 네트워크, 디스크, 메모리 등 다양한 지표에 대해 확장이 가능하며, 알림 대상 또한 이메일 외에 SMS, 슬랙(Slack) 연동 등 다양한 형태로 구성할 수 있다.

이러한 사전 경고 시스템은 잠재적인 문제를 조기에 발견하고 신속하게 대응할 수 있는 기반을 제공하여, 전체 서비스의 안정성과 신뢰도를 높이는 데 결정적인 역할을 한다. 이는 모든 프로덕션 환경에서 반드시 갖추어야 할 필수적인 운영 요소이다.

반응형