08 CHAPTER 08 · 운영·자동화

CloudWatch · 모니터링

운영 가시성 — 문제를 서비스 장애 전에 잡는 방법

운영·자동화 기본 지표 무료

CloudWatch · 지표 · 로그 그룹 · 경보 · 대시보드 · CloudWatch Agent · CloudTrail

CHAPTER INFO
📊운영의 눈과 귀
💰기본 지표 무료 · 커스텀 지표 과금
🔗이전: CH07 Route 53 · CloudFront
🔗다음: CH09 CI/CD 자동화

CloudWatch란 — AWS의 통합 모니터링

서버가 죽기 전에 CPU가 90%로 올라갑니다. DB 커넥션이 꽉 차기 전에 경고 신호가 있습니다. 이상 트래픽이 들어오기 전에 패턴이 보입니다. CloudWatch는 이 신호들을 수집하고, 조건이 되면 알람을 보냅니다.

구성 요소역할
지표(Metrics)시간에 따른 숫자 데이터. CPU 사용률, 네트워크 트래픽, DB 커넥션 수 등
로그(Logs)애플리케이션·시스템 로그. 로그 그룹과 스트림으로 관리
경보(Alarms)지표가 임계값을 넘으면 알림 전송 또는 Auto Scaling 동작
대시보드여러 지표를 한눈에 보는 커스텀 화면

지표(Metrics) — 기본 vs 커스텀

기본 제공 지표 (무료)

서비스주요 지표확인 주기
EC2CPUUtilization, NetworkIn/Out, DiskReadOps5분
RDSDatabaseConnections, FreeStorageSpace, CPUUtilization1분
ALBRequestCount, TargetResponseTime, HTTPCode_Target_5XX_Count1분
LambdaInvocations, Duration, Errors, Throttles1분
🏨
파르나스 인프라에서 봐야 할 지표
RDS의 DatabaseConnections가 max_connections에 가까워지면 HikariCP 커넥션 풀 exhaustion 직전입니다. EC2의 CPUCreditBalance가 0에 가까우면 t타입 버스트 한계입니다. 이 두 지표에 경보를 걸어두면 장애 전에 감지할 수 있습니다.

커스텀 지표 — EC2 메모리는 기본 제공 안 됨

EC2의 메모리 사용률은 기본 지표에 없습니다. CloudWatch Agent를 설치해야 수집됩니다.

📦 CloudWatch Agent 설치
# Amazon Linux 2023
sudo dnf install amazon-cloudwatch-agent -y

# 설정 마법사 실행
sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-config-wizard

# 에이전트 시작
sudo systemctl enable amazon-cloudwatch-agent
sudo systemctl start amazon-cloudwatch-agent

CloudWatch Logs — Spring Boot 로그 수집

EC2에 남는 로그를 CloudWatch로 보내면 서버가 죽어도 로그가 남고, 여러 서버의 로그를 한 곳에서 볼 수 있습니다.

📝 Spring Boot → CloudWatch Logs 설정
# CloudWatch Agent 설정 파일 — 로그 수집 부분
{
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/var/log/myapp/*.log",
            "log_group_name": "/my-service/application",
            "log_stream_name": "{instance_id}",
            "retention_in_days": 30
          }
        ]
      }
    }
  }
}

로그 인사이트 — 로그에서 쿼리하기

CloudWatch Logs Insights로 로그에 SQL 비슷한 쿼리를 날릴 수 있습니다.

🔍 로그 인사이트 쿼리 예시
# 최근 1시간 ERROR 로그 검색
fields @timestamp, @message
| filter @message like /ERROR/
| sort @timestamp desc
| limit 50

# 요청별 응답 시간 평균
fields @timestamp, @message
| parse @message "duration=*ms" as duration
| stats avg(duration) by bin(5m)

경보(Alarms) — 자동 알림과 Auto Scaling 연동

  1. CloudWatch → 경보 → 경보 생성
  2. 지표 선택 (EC2 → CPUUtilization → 특정 인스턴스 선택)
  3. 조건 설정: 평균 > 70% for 2개 연속 1분 기간
  4. 알림 작업: SNS 주제 → 이메일 전송
  5. 경보 이름: EC2-CPU-High
💡
경보 → Auto Scaling 연동
CPU 경보가 울리면 Auto Scaling 정책을 실행하도록 연동할 수 있습니다. "CPU 70% 초과 시 → 인스턴스 1개 추가" 같은 식으로요. ASG 생성 시 타깃 추적 정책을 쓰면 경보와 스케일링이 자동으로 연결됩니다.

CloudTrail — 누가 무엇을 했는가

CloudTrail은 AWS 계정의 API 호출 이력을 전부 기록합니다. "언제 누가 어떤 리소스를 만들거나 삭제했는가"를 추적할 수 있습니다.

구분CloudWatchCloudTrail
목적리소스 상태 모니터링 (성능, 가용성)API 호출 감사 (누가 무엇을 했는가)
데이터지표, 로그API 이벤트 로그
ISMS-P 관련시스템 가용성 증빙접근 이력 감사 증빙
🏨
ISMS-P에서 CloudTrail
ISMS-P 인증에서 "AWS 관리 콘솔 접속 및 작업 이력"을 요구합니다. CloudTrail을 활성화하고 S3에 90일 이상 보관하면 이 요건을 충족할 수 있습니다. Trail 하나를 만들어 모든 리전에 적용하는 멀티리전 Trail이 권장됩니다.
📌 CH08 핵심 개념 요약
CloudWatch 4요소지표(Metrics) · 로그(Logs) · 경보(Alarms) · 대시보드
EC2 메모리 지표기본 제공 안 됨 → CloudWatch Agent 설치 필요
중요 경보 대상RDS DatabaseConnections · EC2 CPUCreditBalance · ALB 5XX 에러율
로그 보존로그 그룹에 보존 기간 설정 필수. 무한 보존 시 비용 계속 누적
CloudTrailAPI 호출 감사 로그. ISMS-P 접근 이력 증빙. 멀티리전 Trail 권장