AWS 모니터링 (CloudWatch, X-Ray, CloudTrail) 정리
AWSCloudWatchX-RayCloudTrailDVA-C02
작성자 : 오예환 | 작성일 : 2026-01-12 | 수정일 : 2026-01-12
1. 모니터링의 중요성
왜 모니터링이 필요한가?
| 관점 | 고려사항 |
|---|
| 사용자 경험 | 애플리케이션 지연시간, 장애 |
| 사전 예방 | 문제 발생 전 감지 |
| 성능 & 비용 | 스케일링 패턴, 트렌드 분석 |
| 학습 & 개선 | 지속적 개선 |
AWS 모니터링 서비스 개요
| 서비스 | 용도 |
|---|
| CloudWatch | 메트릭, 로그, 이벤트, 알람 |
| X-Ray | 분산 추적, 성능 문제 해결 |
| CloudTrail | API 호출 감사, 리소스 변경 추적 |
Part 1: Amazon CloudWatch
2. CloudWatch Metrics
개요
- 모든 AWS 서비스에 대한 메트릭 제공
- Metric: 모니터링할 변수 (CPUUtilization, NetworkIn 등)
- Namespace: 메트릭 그룹
- Dimension: 메트릭 속성 (instance id, environment 등) - 최대 30개
- 타임스탬프 포함
- CloudWatch Dashboard로 시각화
EC2 Detailed Monitoring
| 항목 | Standard | Detailed Monitoring |
|---|
| 주기 | 5분 | 1분 |
| 비용 | 무료 | 유료 |
| ASG | 느린 스케일링 | 빠른 스케일링 |
⚠️ EC2 Memory 사용량은 기본 제공 안 됨 → Custom Metric으로 푸시 필요
Custom Metrics
| 항목 | 설명 |
|---|
| 용도 | 자체 메트릭 정의 (RAM, 디스크, 로그인 사용자 등) |
| API | PutMetricData |
| Dimensions | 메트릭 세분화 (Instance.id, Environment.name) |
해상도 (Resolution):
| 해상도 | 주기 | 비용 |
|---|
| Standard | 60초 (1분) | 기본 |
| High Resolution | 1/5/10/30초 | 높음 |
💡 메트릭 데이터: 과거 2주 ~ 미래 2시간 범위 허용
3. CloudWatch Logs
구조
CloudWatch Logs
│
├─ Log Group (애플리케이션 단위)
│ │
│ ├─ Log Stream (인스턴스/파일/컨테이너)
│ ├─ Log Stream
│ └─ Log Stream
│
└─ Log Group
└─ ...
로그 보존 정책
로그 전송 대상
| 대상 | 용도 |
|---|
| Amazon S3 | 장기 저장 |
| Kinesis Data Streams | 실시간 스트리밍 |
| Kinesis Data Firehose | Near Real-time 적재 |
| AWS Lambda | 서버리스 처리 |
| OpenSearch | 검색/분석 |
로그 암호화
- 기본 암호화 적용
- KMS 기반 암호화 설정 가능
로그 소스
| 소스 | 설명 |
|---|
| SDK, CloudWatch Agent | 애플리케이션 로그 |
| Elastic Beanstalk | 애플리케이션 로그 수집 |
| ECS | 컨테이너 로그 |
| Lambda | 함수 로그 |
| VPC Flow Logs | VPC 네트워크 로그 |
| API Gateway | API 로그 |
| CloudTrail | API 호출 로그 |
| Route 53 | DNS 쿼리 로그 |
4. CloudWatch Logs Insights
개요
- CloudWatch Logs 데이터를 검색/분석
- 전용 쿼리 언어 제공
- AWS 서비스 및 JSON 로그 필드 자동 검색
기능
- 필드 추출, 조건 필터링, 집계 통계, 정렬, 개수 제한
- 쿼리 저장 및 Dashboard 추가
- 여러 Log Group 쿼리 (다른 AWS 계정 포함)
⚠️ 쿼리 엔진임 (실시간 엔진 아님)
5. CloudWatch Logs Export & Subscriptions
S3 Export
| 항목 | 설명 |
|---|
| 지연시간 | 최대 12시간 |
| API | CreateExportTask |
| 실시간성 | ❌ (Near Real-time 불가) |
💡 실시간이 필요하면 Logs Subscriptions 사용
Logs Subscriptions
CloudWatch Logs → Subscription Filter → Lambda (Real-time)
→ Kinesis Data Firehose (Near Real-time)
→ Kinesis Data Streams
- Subscription Filter: 전달할 로그 필터링
- 실시간 로그 이벤트 처리/분석
Multi-Account & Multi-Region 집계
┌─────────────────────────────────────────────────────────────┐
│ Account A (Region 1) │
│ CloudWatch Logs → Subscription Filter ──┐ │
├─────────────────────────────────────────────────────────────┤
│ Account B (Region 2) │ │
│ CloudWatch Logs → Subscription Filter ──┼──▶ Kinesis Data │
├─────────────────────────────────────────────────────────────┤ Streams
│ Account B (Region 3) │ │ │
│ CloudWatch Logs → Subscription Filter ──┘ ▼ │
│ Kinesis Data │
│ Firehose │
│ │ │
│ ▼ │
│ Amazon S3 │
└─────────────────────────────────────────────────────────────┘
Cross-Account Subscription
- Destination Access Policy + IAM Role 설정 필요
- Sender 계정에서 Recipient 계정의 Kinesis로 로그 전송
6. CloudWatch Agent
EC2 로그 수집
┌─────────────────────────────────────────┐
│ EC2 Instance │
│ │
│ ┌─────────────────────────────────┐ │
│ │ CloudWatch Agent │ │
│ │ (로그 파일 수집 + 전송) │ │
│ └──────────────┬──────────────────┘ │
└─────────────────┼───────────────────────┘
│
▼
CloudWatch Logs
⚠️ 기본적으로 EC2 로그는 CloudWatch로 안 감 → Agent 설치 필요
Agent 종류
| Agent | 설명 |
|---|
| CloudWatch Logs Agent | 구버전, Logs만 전송 |
| CloudWatch Unified Agent | 신버전, 시스템 메트릭 + Logs 전송 |
Unified Agent 수집 메트릭 (Linux)
| 카테고리 | 메트릭 |
|---|
| CPU | active, guest, idle, system, user, steal |
| Disk | free, used, total, IO (writes, reads, bytes, iops) |
| RAM | free, inactive, used, total, cached |
| Netstat | TCP/UDP 연결 수, 패킷, 바이트 |
| Processes | total, dead, blocked, idle, running, sleep |
| Swap | free, used, used % |
💡 EC2 기본 메트릭: disk, CPU, network (고수준)
Unified Agent: 상세 시스템 메트릭 (RAM 포함!)
SSM Parameter Store 연동
- Unified Agent 설정을 중앙 집중 관리
7. CloudWatch Logs Metric Filter
개요
- 로그에서 필터 표현식으로 패턴 검색
- 메트릭 생성 → Alarm 트리거 가능
예시
EC2 Instance
│
▼
CloudWatch Agent → CloudWatch Logs → Metric Filter → CloudWatch Alarm → SNS
│
"ERROR" 카운트
특징
| 항목 | 설명 |
|---|
| Dimensions | 최대 3개 |
| 소급 적용 | ❌ (필터 생성 이후 데이터만) |
8. CloudWatch Alarms
개요
- 메트릭 기반 알림 트리거
- 다양한 통계 옵션 (sampling, %, max, min 등)
Alarm States
| 상태 | 설명 |
|---|
| OK | 정상 |
| INSUFFICIENT_DATA | 데이터 부족 |
| ALARM | 경보 상태 |
Alarm Targets
| 대상 | 동작 |
|---|
| EC2 | Stop, Terminate, Reboot, Recover |
| Auto Scaling | 스케일링 액션 |
| SNS | 알림 전송 (Lambda, SQS 등 연동) |
EC2 Instance Recovery
CloudWatch Alarm (StatusCheckFailed_System)
│
├─→ EC2 Instance Recovery
│ (Same Private/Public/Elastic IP, 메타데이터, Placement Group 유지)
│
└─→ SNS Topic (알림)
Status Check 종류:
- Instance status: EC2 VM 체크
- System status: 하드웨어 체크
- Attached EBS status: EBS 볼륨 체크
Composite Alarms
EC2 Instance
│
├─→ CW Alarm A (CPU 모니터링) ─┐
│ │
└─→ CW Alarm B (IOPS 모니터링) ─┼─→ Composite Alarm (AND/OR) → SNS
│
"alarm noise" 감소
- 여러 알람 상태를 AND/OR 조합
- 알람 노이즈 감소
Alarm 테스트
# CLI로 알람 상태 강제 설정 (테스트용)
aws cloudwatch set-alarm-state \
--alarm-name "myalarm" \
--state-value ALARM \
--state-reason "testing purposes"
9. CloudWatch Synthetics Canary
개요
- API, URL, 웹사이트를 프로그래밍 방식으로 모니터링
- 고객이 문제를 겪기 전에 발견
기능
- 가용성, 지연시간 체크
- 로드 타임 데이터, UI 스크린샷 저장
- CloudWatch Alarms 연동
- Node.js / Python 스크립트
- Headless Chrome 브라우저 접근
- 1회 또는 정기 스케줄 실행
Canary Blueprints
| Blueprint | 용도 |
|---|
| Heartbeat Monitor | URL 로드, 스크린샷/HTTP 아카이브 저장 |
| API Canary | REST API 읽기/쓰기 테스트 |
| Broken Link Checker | URL 내 모든 링크 체크 |
| Visual Monitoring | 스크린샷 비교 (베이스라인 vs 현재) |
| Canary Recorder | 웹사이트 액션 녹화 → 스크립트 자동 생성 |
| GUI Workflow Builder | 로그인 폼 등 웹페이지 액션 테스트 |
10. Amazon EventBridge (구 CloudWatch Events)
개요
- Schedule: Cron 작업 (예약 스크립트)
- Event Pattern: 서비스 이벤트에 반응
Event Sources
| 소스 | 예시 |
|---|
| EC2 Instance | 인스턴스 시작/중지 |
| CodeBuild | 빌드 실패 |
| S3 | 객체 업로드 |
| Trusted Advisor | 새 발견 사항 |
| CloudTrail | 모든 API 호출 |
| Schedule/Cron | 매 4시간마다 |
Event Destinations
| 카테고리 | 대상 |
|---|
| Compute | Lambda, Batch, ECS Task |
| Integration | SQS, SNS, Kinesis Data Streams |
| Orchestration | Step Functions |
| Maintenance | CodePipeline, CodeBuild, SSM, EC2 Actions |
Event Bus 종류
| Bus | 소스 |
|---|
| Default Event Bus | AWS 서비스 |
| Partner Event Bus | AWS SaaS 파트너 |
| Custom Event Bus | 커스텀 앱 |
주요 기능
| 기능 | 설명 |
|---|
| Archive | 이벤트 아카이브 (무기한 또는 기간 설정) |
| Replay | 아카이브된 이벤트 재생 |
| Schema Registry | 이벤트 스키마 분석 → 코드 생성 |
| Resource-based Policy | Cross-Account 이벤트 허용 |
Multi-Account 집계
Account A → Event Rule → ─┐
Account B → Event Rule → ─┼──▶ Central Account Event Bus → SNS
Account C → Event Rule → ─┤
Account D → Event Rule → ─┘
(Resource Policy로 허용)
Part 2: AWS X-Ray
11. X-Ray 개요
기존 디버깅의 문제점
- 로컬 테스트 → 로그 추가 → 재배포... 반복
- 로그 형식이 애플리케이션마다 다름
- 분산 서비스 디버깅 어려움
- 전체 아키텍처 뷰 없음
X-Ray 장점
| 장점 | 설명 |
|---|
| 성능 병목 발견 | 어디서 느린지 파악 |
| 의존성 이해 | 마이크로서비스 관계 파악 |
| 서비스 이슈 정확히 파악 | 어느 서비스 문제인지 |
| 요청 동작 분석 | 요청 흐름 추적 |
| 에러/예외 발견 | 오류 발생 지점 |
| SLA 충족 여부 | 응답 시간 확인 |
| Throttling 발생 지점 | 어디서 제한되는지 |
| 영향받는 사용자 식별 | 누가 영향 받는지 |
호환 서비스
- AWS Lambda
- Elastic Beanstalk
- ECS
- ELB
- API Gateway
- EC2 / 온프레미스 서버
12. X-Ray 활성화 방법
Step 1: 코드에 X-Ray SDK 추가
지원 언어: Java, Python, Go, Node.js, .NET
SDK가 캡처하는 것:
- AWS 서비스 호출
- HTTP/HTTPS 요청
- 데이터베이스 호출 (MySQL, PostgreSQL, DynamoDB)
- 큐 호출 (SQS)
Step 2: X-Ray Daemon 설치 또는 AWS 통합 활성화
┌─────────────────────────────────────────┐
│ EC2 Instance │
│ │
│ ┌─────────────────────────────────┐ │
│ │ Application Code │ │
│ │ + AWS X-Ray SDK │ │
│ └──────────────┬──────────────────┘ │
│ │ Send traces │
│ ┌──────────────▼──────────────────┐ │
│ │ X-Ray Daemon │ │
│ │ (UDP 패킷 수집) │ │
│ └──────────────┬──────────────────┘ │
└─────────────────┼───────────────────────┘
│ Batch (매 1초)
▼
AWS X-Ray
- X-Ray Daemon: UDP 패킷 인터셉터 (Linux/Windows/Mac)
- Lambda, Beanstalk 등: Daemon 자동 실행
- IAM 권한 필요 (X-Ray 쓰기)
13. X-Ray 핵심 개념
용어
| 용어 | 설명 |
|---|
| Segment | 각 애플리케이션/서비스가 전송 |
| Subsegment | 더 세부적인 정보 |
| Trace | Segment 모음 (전체 요청 추적) |
| Sampling | 요청의 일부만 기록 (비용 절감) |
| Annotations | Key-Value, 인덱싱됨 (필터 검색 가능) |
| Metadata | Key-Value, 인덱싱 안 됨 |
Sampling Rules (기본값)
• 첫 번째 요청/초: 항상 기록 (reservoir)
• 추가 요청: 5%만 기록 (rate)
- 코드 변경 없이 Sampling Rules 수정 가능
- 커스텀 규칙 생성 가능
X-Ray API
Write APIs (Daemon 사용): | API | 용도 | |-----|------| | PutTraceSegments | 세그먼트 업로드 | | PutTelemetryRecords | 텔레메트리 업로드 | | GetSamplingRules | 샘플링 규칙 조회 |
Read APIs: | API | 용도 | |-----|------| | GetServiceGraph | 서비스 맵 | | BatchGetTraces | Trace ID로 조회 | | GetTraceSummaries | Trace 요약 조회 | | GetTraceGraph | 특정 Trace 그래프 |
보안
14. X-Ray 트러블슈팅
EC2에서 X-Ray 안 될 때
| 확인 항목 |
|---|
| EC2 IAM Role에 적절한 권한 있는지 |
| X-Ray Daemon 실행 중인지 |
Lambda에서 X-Ray 활성화
| 확인 항목 |
|---|
IAM Execution Role에 AWSXRayWriteOnlyAccess 포함 |
| 코드에 X-Ray SDK import |
| Lambda Active Tracing 활성화 |
15. X-Ray 통합
Elastic Beanstalk
Elastic Beanstalk + X-Ray ❤
• X-Ray Daemon이 플랫폼에 포함됨
• 콘솔 또는 .ebextensions/xray-daemon.config로 활성화
• Instance Profile에 IAM 권한 필요
• 코드에 X-Ray SDK 추가
⚠️ Multicontainer Docker는 X-Ray Daemon 미제공
ECS + X-Ray
| 패턴 | 설명 |
|---|
| Daemon | EC2마다 X-Ray Daemon 컨테이너 1개 |
| Sidecar (EC2) | 각 Task에 X-Ray 컨테이너 |
| Sidecar (Fargate) | 각 Fargate Task에 X-Ray 컨테이너 |
┌─── Daemon 패턴 ────┐ ┌─── Sidecar 패턴 ───┐
│ │ │ │
│ EC2 │ │ Fargate Task │
│ ┌────┐ ┌────┐ │ │ ┌────┐ ┌────────┐ │
│ │App │ │App │ │ │ │App │ │X-Ray │ │
│ └────┘ └────┘ │ │ │ │ │Sidecar │ │
│ ┌──────────────┐ │ │ └────┘ └────────┘ │
│ │ X-Ray Daemon │ │ │ │
│ └──────────────┘ │ └─────────────────────┘
└────────────────────┘
16. AWS Distro for OpenTelemetry
개요
- OpenTelemetry 프로젝트의 AWS 지원 배포판
- 단일 API, 라이브러리, 에이전트로 Trace & Metrics 수집
- Auto-instrumentation: 코드 변경 없이 Trace 수집
지원 대상
- EC2, ECS, EKS, Fargate, Lambda
- 온프레미스
전송 대상
- AWS X-Ray
- Amazon CloudWatch
- Amazon Managed Prometheus
- 파트너 모니터링 솔루션
X-Ray vs OpenTelemetry
| 상황 | 선택 |
|---|
| AWS 전용 | X-Ray |
| 오픈소스 표준화 | OpenTelemetry |
| 다중 목적지 전송 | OpenTelemetry |
Part 3: AWS CloudTrail
17. CloudTrail 개요
CloudTrail이란?
- AWS 계정의 거버넌스, 컴플라이언스, 감사
- 기본 활성화!
- AWS 계정 내 모든 API 호출 기록
기록 소스
로그 저장
- CloudWatch Logs
- S3 Bucket
범위
💡 리소스 삭제 조사 시 → CloudTrail 먼저 확인!
18. CloudTrail Events
Event 유형
| 유형 | 설명 | 기본 활성화 |
|---|
| Management Events | 리소스 작업 (IAM, EC2 등) | ✅ |
| Data Events | 데이터 작업 (S3 객체, Lambda 실행) | ❌ (고볼륨) |
| Insights Events | 비정상 활동 탐지 | ❌ |
Management Events 예시
- IAM
AttachRolePolicy
- EC2
CreateSubnet
- CloudTrail
CreateTrail
Read vs Write Events 분리 가능
Data Events 예시
- S3:
GetObject, DeleteObject, PutObject
- Lambda:
Invoke API
CloudTrail Insights
Management Events → CloudTrail Insights → 분석 (베이스라인 생성)
│
▼ 비정상 패턴 탐지
┌─────────────────────┐
│ Insights Events │
│ │
├─→ CloudTrail Console│
├─→ S3 Bucket │
└─→ EventBridge Event│
(자동화)
└─────────────────────────────────────────┘
탐지 대상:
- 부정확한 리소스 프로비저닝
- 서비스 제한 도달
- IAM 액션 급증
- 주기적 유지보수 활동 공백
19. CloudTrail Events 보존
기본 보존
장기 보존
CloudTrail → S3 Bucket (장기 저장) → Athena (분석)
20. EventBridge + CloudTrail 연동
API 호출 가로채기
User → DynamoDB DeleteTable API 💥
│
▼
CloudTrail (로그)
│
▼
EventBridge (이벤트)
│
▼
SNS (알림)
사용 사례 예시
IAM Role AssumeRole 모니터링:
User → IAM AssumeRole → CloudTrail → EventBridge → SNS
Security Group 변경 모니터링:
User → EC2 AuthorizeSecurityGroupIngress → CloudTrail → EventBridge → SNS
21. CloudWatch vs CloudTrail vs X-Ray 비교
| 서비스 | 용도 | 핵심 기능 |
|---|
| CloudTrail | API 호출 감사 | 누가 무엇을 했는지 추적 |
| CloudWatch | 모니터링 | 메트릭, 로그, 알람 |
| X-Ray | 분산 추적 | 요청 흐름, 지연시간, 에러 분석 |
상세 비교
| 항목 | CloudTrail | CloudWatch | X-Ray |
|---|
| 목적 | 감사/컴플라이언스 | 모니터링/알림 | 성능 분석/디버깅 |
| 데이터 | API 호출 로그 | 메트릭, 로그 | Trace, Segment |
| 사용 시점 | 보안 조사, 변경 추적 | 리소스 모니터링, 알림 | 마이크로서비스 디버깅 |
| 시각화 | 이벤트 기록 | Dashboard | Service Map |
핵심 요약
CloudWatch
| 기능 | 설명 |
|---|
| Metrics | AWS 서비스 메트릭, Custom Metrics |
| Logs | 로그 수집/저장/분석 |
| Alarms | 메트릭 기반 알림/액션 |
| Logs Insights | 로그 쿼리/분석 |
| Synthetics Canary | 웹사이트/API 프로그래밍 모니터링 |
| EventBridge | 이벤트 기반 자동화 |
X-Ray
| 개념 | 설명 |
|---|
| Trace | 요청의 전체 경로 |
| Segment | 각 서비스가 기록 |
| Annotations | 인덱싱됨, 검색 가능 |
| Sampling | 비용 절감 (일부만 기록) |
CloudTrail
| 개념 | 설명 |
|---|
| Management Events | 리소스 작업 (기본 활성화) |
| Data Events | S3 객체, Lambda 실행 |
| Insights | 비정상 활동 탐지 |
| 보존 | 90일 (S3로 장기 저장) |