CloudWatch

AWS 에는 많은 서비스들이 있습니다. 서비스들을 사용하면서 각 서비스가 얼마나 많은 공간을 차지하는지, 서비스의 상태는 어떠한지, 어떤 이벤트들이 발생하는지, 얼마나 많은 에러가 발생하는지에 대한 고민을 하게 됩니다. AWS CloudWatch 를 사용하게 되면 우리가 사용하는 AWS 서비스 및 리소스 정보들을 실시간으로 모니터링할 수 있습니다.

  • AWS 리소스 사용의 실시간 모니터링 기능을 지원합니다.
  • S3 파일을 업로드하거나 RDS접속 시도와 같이 다양한 이벤트들을 수집하여 로그파일로 저장할 수 있습니다.
  • 이벤트 & 알람 설정을 통해 SNS, AWS Lambda로 전송 가능합니다.
  • 대표적으로 EC2, RDS, S3, ELB 등과 같이 저명한 컴퓨팅 리소스들에 대해 CloudWatch를 적용할 수 있습니다.

Types of Monitoring

  1. Basic Monitoring

    • 무료입니다.
    • 기본 모니터링으로 설정되어 있으며 5분 간격으로 CPU 사용량, 디스크 사용량, 네트워크 I/O 등 최소한의 Metrics를 제공합니다.
  2. Detailed Monitoring

    • 유료입니다.
    • 1분 간격으로 자세한 Metrics를 제공합니다.

CloudWatch Usecase

Use Case : 매일 얼마나 많은 사용자들이 모바일 앱을 사용하는지 알고 싶을 때 Potential Issue : 특정날에 수많은 Traffic이 몰릴 수 있어 병목현상이 생길 수 있습니다. Solution : 매일 Traffic Rate와 특정 버튼의 유저 클릭 횟수를 분석하여 더 효율적인 앱개발을 할 수 있는 통찰력을 얻을 수 있습니다.


Use Case : 특정 시간대에 웹서버 상태를 점검하여 비용 절감 목표 Potential Issue : 똑같은 비용을 내며 AWS 리소스들을 사용하지만 낮시간대와 밤시간대에 필요한 서버의 성능은 달라질 수 있기 때문에 금전적 손실이 생길 수 있습니다. Solution : Alarm 설정을 통하여 특정 Threshold 에 도달했을때 개발자에게 상황을 보고해줌으로서 서버 Management를 할 수 있습니다.

Alarm

  • 임의로 정해놓은 값에 도달할 시 Alram을 울립니다.
  • Alram이 울릴 시 특정 이벤트들을 작동시킬 수 있습니다.

Billing Alarm

사용한 AWS 리소스들의 지출 임계값을 초과할 경우 SNS를 통해 경고를 줄 수 있는 Alarm 입니다. 현재 버지니아(N.Vriginia(us-east-1))지역에서만 해당 기능을 사용할 수 있습니다.

Alarm State

  1. OK

    • 알람 조건이 충족되지 않은 상태입니다.
    • 모니터링하는 지표(metric)가 정상 범위 안에 있다는 것을 의미합니다.
    • 예: CPUUtilization < 80%
  2. ALARM

    • 알람 조건이 충족된 상태입니다.
    • 즉, 설정한 임계치(threshold)를 초과하거나 미달했을 때를 말합니다.
    • 예: CPUUtilization > 80%
  3. INSUFFICIENT_DATA

    • 알람이 판단할 수 있는 데이터가 부족한 상태입니다.

Experiment

CloudWatch를 테스트해보기 앞서 로컬에서 300M 정도의 더미파일을 생성합니다.

해당 파일을 scp 를 사용해서 EC2 인스턴스에 전송합니다.

$scp -i ec2-keypair.pem D:dummy_file ec2-user@ec2-15-164-251-0.ap-northeast-2.compute.amazonaws.com:/home/ec2-user

EC2 인스턴스로 돌아와 파일을 잘 받았는지 확인합니다. (287M) 인것을 확인할 수 있습니다.

AWS Console > CloudWatch > 애플리케이션 모니터링 > 리소스 상태에서 본인의 인스턴스를 선택합니다.

여러 Metric 이 나오게 되는데, 이는 EC2 인스턴스에서 직접 더 자세히 확인해볼 수 있습니다. 해당 사진이 CloudWatch 에서 확인한 Metric입니다.

해당 사진이 EC2 에서 직접 확인한 Metric입니다. EC2 > 인스턴스 > 자신의 인스턴스 > 모니터링 탭에서 확인할 수 있습니다.

Alarm 생성

CloudWatch로 돌아와 경보 > 경보상태에서 알람을 생성할 수 있습니다. 현재 어떠한 Alarm 을 만들어주지 않았기 때문에 경보 생성을 선택합니다.

지표선택에서 EBS를 선택합니다. 지표는 AWS 리소스를 뜻하며 정확히 어떤 Metric 정보를 바탕으로 알람을 설정할지를 묻는 것입니다.

VolumeWriteBytes 를 선택해주고 지표선택을 누릅니다. VolumeWriteBytes가 임계점을 넘기면 알람이 울리도록 설정하는 것입니다.

VolumeWriteBytes는 EBS 볼륨에 기록된(Write) 총 바이트 수를 말합니다.

지표 및 조건 지정

각 Input 태그는 다음과 같은 의미를 가집니다.

  • 지표이름
    • 이전에 선택한 지표 이름을 말합니다. VolumeWriteBytes
  • VolumeId
    • EC2 인스턴스를 만들 때 할당된 디스크 ID 를 말합니다. 해당 정보는 EC2 인스턴스의 Elastic Block Store > 볼륨 에서 확인할 수 있습니다.
  • 기간
    • 몇분 주기로 통계를 낼지 정하는 인터벌 값이며 5분이 디폴트입니다. 더욱 세밀하게 조절할 수 있습니다.

알람을 울리는데 필요한 조건을 100000(100K) 로 설정합니다. 추가구성 에서는 누락된 데이터가 있을 시 어떻게 행동할 것인지 정해줄 수 있는데 디폴트(누락으로 처리)로 설정합니다.

즉 VolumneWriteBytes 이 100K가 넘어가면 알람이 울리도록 설정한 것입니다.

작업 구성

알림 추가 버튼을 누르면 경보가 울릴 때 SNS를 통해 알람을 울릴지, Email을 통해 알람을 울릴지에 대한 행동을 정의할 수 있습니다. Email을 통해 알람을 받을 것이기 때문에 새 주제 생성 을 선택합니다. 새 주제 생성... 에는 원하는 이름을 입력하고, 알람을 받을 이메일을 기입합니다.

Auto Scaling 작업은 Alarm이 발생했을 때 AWS에서 자동으로 처리해주고 싶은 행동을 정의할 때 사용됩니다. 예를 들어, 메모리 부족으로인해 알람이 발생했을때 Auto Scaling 을 통해 메모리를 자동으로 늘려주는 행동을 정의할 수 있습니다. 하지만 유료로 전환될 수 있기 때문에 패스하고 다음을 선택합니다.

이름 및 설명 추가

경보 이름 및 설명을 재량껏 작성합니다. 해당 설정으로 작성한 내용이 포함된 알람이 메일을 통해 전송됩니다.

요약 정보

앞서 설정한 지표 및 조건 지정, 작업구성, 이름 및 설명 추가 에 대한 요약정보가 출력됩니다. 이제 경보 생성을 선택하여 경보를 생성합니다.

생성된 경보 확인

초기 상태는 데이터 부족 일 수 있습니다. 이는 경보를 울리기에 충분한 데이터 전송이 이루지지 않았기 때문이라고 추정할 수 있습니다. EC2 인스턴스에 적당한 데이터를 보내주면 해당 데이터 부족 은 사라지게 될 것입니다.

이메일 구독 활성화

알람이 발생했을 때 그 정보를 이메일로 보내지도록 하려면 이메일 구독을 활성화 해야합니다. Amazon SNS > 구독 으로 와서 생성된 이메일 구독을 체크해준 후, 확인 요청 을 누릅니다.

메일함에서 AWS 에서 활성화 링크를 보내준 것을 확인할 수 있습니다. 해당 링크에 들어가면

confirm 이메일이 오지않는다면 스팸메일을 확인해보자. 필자는 여기서 애먹은 기억이 있습니다.ㄴ

아래와 같이 이메일 구독이 성공적으로 수행된것을 확인할 수 있습니다. 이제 알람이 발생하게되면 해당 메일로 알람이 갈 것입니다.

알람 발생 확인

포스팅 초반에 작성했던 것처럼 로컬에서 SCP300M 정도의 파일을 EC2로 전송합니다.

5분정도 기다리면 CloudWatch에서 이전에 생성한 Alarm이 경보상태로 바뀐것을 확인할 수 있습니다.

해당 경보를 선택해서 Metrics 를 확인하면 SCP로 인해 EC2 EBS에 100K 가 넘은 데이터가 전송되어 알람이 트리거된 것을 알 수 있습니다.

메일함에서도 알람이 이메일로 잘 전송된것을 확인할 수 있습니다.

Conclusion

지표 및 조건 지정에서 설정하는 VolumeWriteBytes 같은 지표들을 잘 이해하고 숙지해두면, CloudWatch를 더 효과적으로 활용할 수 있습니다.

Reference

Inflearn : AWS(Amazon Web Service) 입문자를 위한 강의

AWS IAM과 접근 권한 & Amazon CloudWatch

CloudWatch란?

CloudWatch + 프리티어 범위