개발하는 자몽

[AWS] CloudWatch 사용해보기 2: 커스텀 지표 수집 및 커스텀 대시보드 생성 본문

Architecture & Tool/AWS

[AWS] CloudWatch 사용해보기 2: 커스텀 지표 수집 및 커스텀 대시보드 생성

jaamong 2025. 12. 6. 10:03

지난 글에서는 AWS가 기본적으로 여러 네임스페이스와 지표를 제공하는 것을 확인했었다. 기본 제공 데이터 외에도 사용자가 커스텀 지표를 생성하여 이 지표가 속하는 네임스페이스를 생성할 수도 있다.

커스텀 지표 수집

커스텀 지표를 생성하는 이유는 AWS에서 기본 제공하는 지표로는 확인할 수 없는 항목들이 있기 때문이다. EC2 메모리 및 디스크와 관련된 지표들은 AWS에서 기본 제공하지 않고, EC2 인스턴스에 CloudWatch agent를 설치하여 커스텀 지표를 수집하도록 설정해야 한다. 

진행하는 환경은 EC2 - Ubuntu 24.04 LTS이다. 

🔗기본 제공하지 않고 OS에 설치해야 하는 이유

 

Agent 설치

IAM 역할 생성

EC2에게 부여할 IAM 역할부터 생성하자. 이 역할은 EC2가 지표를 수집하고, 로그를 포함하여 CloudWatch로 보낼 수 있는 권한을 갖는다. 

  1. "IAM > 역할"로 이동하여 역할 생성을 선택한다. 
  2. 1단계 - 신뢰할 수 있는 엔터티
    • 신뢰할 수 있는 엔터티 유형: AWS 서비스
    • 사용 사례: EC2 
  3. 2단계 - 권한 추가
    • 검색창에 `CloudWatchAgentServerPolicy`를 입력 및 선택한다. 다음으로 넘어간다. 
  4. 3단계 - 이름 지정, 검토 및 생성
    • 역할 이름과 설명은 자유롭게 입력하되, 어떤 목적으로 생성되었는지 드러나도록 작성한다. 이제 완료. 

이제 생성한 역할을 EC2에 부여해야 한다. 

"EC2 > 인스턴스"로 이동하고 역할을 부여해야 하는 EC2를 선택하자. 선택하고 "작업 > 보안 > IAM 역할 수정"을 수행한다. 이동한 화면에서 방금 생성한 역할을 선택하고 완료한다. 

에이전트 설치 (Ubuntu 기준)

EC2에 접속한 상태에서 진행한다. 

  1. 에이전트 패키지를 다운로드한다.
    wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb
  2. 다운로드한 패키지를 설치한다.
    sudo dpkg -i -E ./amazon-cloudwatch-agent.deb
  3. 설치 파일 위치로 이동한다. 
    cd /opt/aws/amazon-cloudwatch-agent/bin
  4. 에이전트를 실행한다.
    ./amazon-cloudwatch-agent-config-wizard

실행하면 다음의 질문들이 나온다. (작성할 때 라이브로 진행한 게 아니라서 조금 다를 수 있지만, 큰 틀은 벗어나지 않는다) 

1. On which OS are you planning to use the agent?
 => linux 
2. Are you using EC2 or On-premises hosts?
 => EC2
3. Which user are you planning to run the agent?
 => root
4. Do you want to turn on StatsD daemon?
 => no
5. Do you want to monitor metrics from CollectD?
 => no
6. Do you want to monitor any host metrics? e.g. CPU, memory, etc.
 => yes
7. Do you want to monitor cpu metrics per core?
 => no
8. Do you want to add ec2 dimensions (ImageId, InstanceId, InstanceType, AutoScalingGroupName) into all of your metrics if the info is available?
 => yes
9. Do you want to aggregate ec2 dimensions (InstanceId)?
 => yes
10. Would you like to collect your metrics at high resolution (sub-minute resolution)? This enables sub-minute resolution for all metrics, but you can customize for specific metrics in the output json file.
 => 60s 
11. Which default metrics config do you want?
 => Basic (각 옵션마다 수집할 수 있는 지표가 다르며, Basic은 가장 적다.)

---json 파일로 된 configration---

12. Are you satisfied with the above config? Note: it can be manually customized after the wizard completes to add additional items.
 => yes
13. Do you have any existing CloudWatch Log Agent(<http://docs.aws.amazon.com/AmazonCloudWatch/latest/logs/AgentReference.html?) configuration file to import for migration?
 => no
14. Do you want to monitor any log files?
 => no 
15. Do you want to specify any additional log files to monitor?
 => no
16. Do you want to store the config in the SSM parameter store?
 => no

"Program exits now"라는 문장이 출력되면 설정이 완료됐다. 

설정(config)을 변경하고 싶다면 /opt/aws/amazon-cloudwatch-agent/bin/config.json 파일을 수정하자.

이후 에이전트를 실행하자. (설정 파일을 수정한 뒤에도 이 명령을 실행하면 된다.)

sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s

 

설정이 잘 되었다면 5분 뒤에 "CloudWatch > Metrics"에서 사용자 지정 네임스페이스 하위에 있는 `CWAgent` 네임스페이스를 확인할 수 있다. 이 네임스페이스에서 메모리 및 디스크와 관련된 지표를 확인할 수 있다. 

CWAgent 네임스페이스 > InstanceId (dimension > disk, mem 지표

추가

  • 에이전트 상태 확인 명령어
    /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent.log
  • 에이전트 에러 관련 로그 위치
    amazon-cloudwatch-agent-ctl -m ec2 -a status

 

커스텀 대시보드 생성

CWAgent 네임스페이스에서 메모리 및 디스크 관련 지표를 확인했다면 이번에는 해당 지표들을 하나의 위젯으로 묶어 대시보드에서 확인할 수 있도록 하자. 만들고자 하는 대시보드에는 두 개의 위젯을 담을 것이다. 

  • EC2 상태를 알 수 있는 위젯
  • 메모리, 디스크 및 CPU 사용률 현황을 알 수 있는 위젯

EC2 상태 확인을 위한 지표를 간단히 알아보자. 기본 제공되는 지표는 세 가지로 볼 수 있다. 

  • StatusCheckFailed_Instance
    • 잘못 구성된 네트워킹 또는 시작구성
    • 소진된 메모리
    • 손상된 파일 시스템
    • 호환되지 않는 커널
  • StatusCheckFailed_System
    • 네트워크 연결 문제
    • 시스템 전원 문제
    • 물리 호스트의 소프트웨어 문제
    • 물리 호스트의 하드웨어 문제
  • StatusCheckFailed
    • 위 2개 CheckFailed의 OR 조건

위 지표들은 AWS/EC2 네임스페이스의 인스턴스별 지표 차원에서 확인할 수 있다. 해당 지표들을 선택하고 "작업 > 대시보드에 추가"를 클릭한다. 

나타나는 화면에서 요구하는 정보들을 입력한다. 

  • 대시보드 선택: 별도로 생성해 둔 대시보드가 없다면 새로 생성을 선택
    • 새로 생성을 선택하면 '새 대시보드 생성'란이 나타난다. 생성할 대시보드 이름을 입력하고 생성을 클릭한다. 
  • 위젯 유형: 자유롭게 선택
  • 위젯 제목 사용자 지정: 선택한 지표들은 하나의 위젯으로 대시보드에 속하게 된다. 이 위젯을 뭐라고 칭할지 정하면 된다. 지금 선택한 지표들은 EC2의 상태를 나타내므로 간단히 `EC2 status`라고 명명했다. 

대시보드에 추가를 선택하여 완료한다. 

 

이제 "대시보드 > 사용자 지정 대시보드"로 이동하면 방금 생성한 대시보드 이름을 확인할 수 있다. 이름을 클릭하면 지표들을 묶은 위젯도 확인할 수 있다. 위젯은 생성 이후에도 편집할 수 있으므로 상황에 따라 지표 추가 및 제거를 편리하게 할 수 있다. 

 

두 번째 위젯도 만들어 보자. 우선 `CWAgent` 네임스페이스에서 `mem_used_percent`, `disk_used_percent` 지표를 선택하여 생성한 대시보드에 추가하자. 그다음 생성한 위젯에서 편집을 클릭하여 `CPUUtilization` 지표를 선택하면 두 번째 위젯도 완성이다. 

 

요금

사용자 지정 네임스페이스 - 지표

사용자 지정 네임스페이스에 속한 지표는 개당 월별 0.30 USD가 청구된다. (전체 지표수가 1만 개를 초과하는 경우 볼륨 요금 티어가 적용된다.) Resolution을 '60초'로 설정하고, 지표 설정을 'Basic'으로 설정했을 때 생성되는 `CWAgent` 네임스페이스에서 23개의 지표를 수집할 수 있다. 따라서 23개의 지표에 대한 월별 비용은 23 metrics × 0.30 USD = 6.90 USD가 된다. 

커스텀 대시보드

또한 AWS에 의해 자동으로 생성되는 대시보드 외에 커스텀 대시보드를 사용하는 경우, 대시보드당 3.00 USD가 청구된다. 지금처럼 한 개의 커스텀 대시보드가 있는 경우에는 월별 비용이 1 dashboard × 3.00 USD = 3.00 USD가 된다. 

경보(Alarm)

이 글에서 다루지는 않았지만 특정 지표에 대한 CloudWatch 알람을 설정하면, 알람이 트리거 되지 않아도 생성 즉시 비용이 청구된다. 해당 비용은 알람 당 월별 0.10 USD이며, 실제로 알람이 트리거 되어 SNS 알림이 발생하면 별도 비용이 청구된다. 

 

끝!

CloudWatch에 관하여 간단하게 알아보았다. 더 많은, 복잡한 기능들이 있지만, 우선 이 정도만 알아둬도 나머지는 좀 더 수월하게 알아갈 수 있다고 생각한다. 

참고로 요금에서 언급한 경보는 설정하는 방법이 복잡하거나 어렵지 않으므로 시도해 보면 좋을 것 같다. `CPUUtilization`이 70%를 초과하면 알림이 오도록 설정해 보는 건 어떨까. 알기로는 이메일뿐만 아니라 Slack으로도 알림을 받을 수 있다. 처음에는 이메일로 설정해 보고 Slack으로도 받아보도록 해보자. (이 부분은 추가 요금이 발생할 수도 있다.)

 

마지막으로, 언제나 요금 폭탄을 조심하자. 안 쓰는 대시보드나 알람은 바로바로 삭제하기!

 

 

 

Comments