- join
- 스프링부트
- Django
- spring
- CloudWatch
- java
- spring security 6
- PYTHON
- 프로그래머스
- spring mvc
- ORM
- springboot
- mysql
- string
- ci/cd
- 1차원 배열
- nginx
- 문자열
- Docker
- @transactional
- spring boot
- AWS
- hibernate
- 데이터베이스
- SSL
- sql
- select
- jpa
- 자바
- 스프링
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 | 31 |
개발하는 자몽
[AWS] CloudWatch 사용해보기 2: 커스텀 지표 수집 및 커스텀 대시보드 생성 본문
[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로 보낼 수 있는 권한을 갖는다.
- "IAM > 역할"로 이동하여 역할 생성을 선택한다.
- 1단계 - 신뢰할 수 있는 엔터티
- 신뢰할 수 있는 엔터티 유형: AWS 서비스
- 사용 사례: EC2
- 2단계 - 권한 추가
- 검색창에 `CloudWatchAgentServerPolicy`를 입력 및 선택한다. 다음으로 넘어간다.
- 3단계 - 이름 지정, 검토 및 생성
- 역할 이름과 설명은 자유롭게 입력하되, 어떤 목적으로 생성되었는지 드러나도록 작성한다. 이제 완료.
이제 생성한 역할을 EC2에 부여해야 한다.
"EC2 > 인스턴스"로 이동하고 역할을 부여해야 하는 EC2를 선택하자. 선택하고 "작업 > 보안 > IAM 역할 수정"을 수행한다. 이동한 화면에서 방금 생성한 역할을 선택하고 완료한다.
에이전트 설치 (Ubuntu 기준)
EC2에 접속한 상태에서 진행한다.
- 에이전트 패키지를 다운로드한다.
wget https://s3.amazonaws.com/amazoncloudwatch-agent/ubuntu/amd64/latest/amazon-cloudwatch-agent.deb - 다운로드한 패키지를 설치한다.
sudo dpkg -i -E ./amazon-cloudwatch-agent.deb - 설치 파일 위치로 이동한다.
cd /opt/aws/amazon-cloudwatch-agent/bin - 에이전트를 실행한다.
./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` 네임스페이스를 확인할 수 있다. 이 네임스페이스에서 메모리 및 디스크와 관련된 지표를 확인할 수 있다.

추가
- 에이전트 상태 확인 명령어
/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으로도 받아보도록 해보자. (이 부분은 추가 요금이 발생할 수도 있다.)
마지막으로, 언제나 요금 폭탄을 조심하자. 안 쓰는 대시보드나 알람은 바로바로 삭제하기!
'Architecture & Tool > AWS' 카테고리의 다른 글
| [AWS] CloudWatch 사용해보기 1: 용어 소개 (0) | 2025.12.05 |
|---|---|
| CI/CD에 블루-그린 무중단 배포 적용하기: AWS ELB, AWS Auto Scaling Groups(ASG) (1) | 2025.08.09 |
| [TIL / AWS] SpringBoot 서버리스로 배포하기: ECR + Fargate(ECS) + ALB + Private Link (6) | 2025.08.07 |
| CI/CD 구축하기: GitHub Actions (OIDC) + Amazon S3 + Amazon CodeDeploy (3) | 2025.07.28 |
| [AWS RDS] MySQL 파라미터 그룹 생성과 설정 - timezone, encoding (1) | 2025.01.31 |
