Amazon CloudWatch를 활용한 로깅과 지표 관리

AWS에서 애플리케이션 배포하기

Dunieski Otano

Amazon Web Services Solutions Architect

서비스가 다운됐을까요?

  • 고객이 앱에 문제가 있다고 알려옵니다
  • 사실 여부를 확인할 데이터가 없습니다
  • CloudWatch는 추측을 answer로 바꿔줍니다

서비스 상태가 정상인지 불확실해 물음표가 표시된 모니터링 대시보드

AWS에서 애플리케이션 배포하기

로깅 vs 모니터링 vs 관찰 가능성

로깅은 변경 불가능한 이벤트 기록, 모니터링은 알람이 있는 지표 임계값, 관찰 가능성은 새로운 질문에 답하기 위한 데이터 연관 분석임을 구분하는 3단 다이어그램

  • 로깅(Logging): 발생한 개별 이벤트를 기록
  • 모니터링(Monitoring): 정해진 지표를 임계값과 비교
  • 관찰 가능성(Observability): 데이터에 새로운 질문을 제기
  • 자신 있게 운영하려면 세 가지가 모두 필요합니다
AWS에서 애플리케이션 배포하기

로그 그룹, 로그 스트림, 보존 기간

  • 로그 그룹(Log group): 관련 로그를 담는 이름 있는 컨테이너
  • 로그 스트림(Log stream): 한 소스에서 나오는 일련의 기록
  • 보존 기간(Retention): 로그를 보관하는 기간
  • 로그는 비용이 발생하므로 보존 기간을 신중히 설정하세요

CloudWatch Logs 계층 구조: 여러 로그 스트림을 담은 로그 그룹, 시간순으로 정렬된 이벤트를 보여주는 각 스트림, 보존 기간 설정과 비용 안내

AWS에서 애플리케이션 배포하기

지표와 사용자 지정 지표

  • 지표(Metrics): 시계열 숫자 데이터
  • AWS는 많은 서비스 지표를 자동으로 게시합니다
  • 사용자 지정 지표(Custom metrics): 앱이 전송하는 숫자
  • 차원(Dimensions)은 속성별로 지표를 세분화합니다

CloudWatch 지표: 왼쪽은 자동 게시되는 AWS 서비스 지표, 오른쪽은 차원이 있는 사용자 지정 지표, 임계값 알람선이 포함된 시계열 차트

AWS에서 애플리케이션 배포하기

임베디드 지표 형식(Embedded Metric Format)

구조화된 로그 한 줄에 지표 값과 함께, CloudWatch에 어떤 필드가 지표인지 알려주는 _aws 블록이 들어갑니다:

{
  "_aws": {
    "CloudWatchMetrics": [
      {
        "Namespace": "OrdersApp",
        "Dimensions": [["customerTier"]],
        "Metrics": [{ "Name": "OrderLatencyMs", "Unit": "Milliseconds" }]
      }
    ]
  },
  "customerTier": "premium",
  "OrderLatencyMs": 142
}
AWS에서 애플리케이션 배포하기

대시보드와 알람

왼쪽은 CloudWatch 대시보드 위젯 패널, 오른쪽은 OK, ALARM, INSUFFICIENT_DATA 상태를 가진 알람 상태 머신, SNS 알림이 이메일과 자동화로 전달되는 흐름

  • 대시보드(Dashboard): 차트와 위젯을 모은 화면 하나
  • 알람(Alarm): 지표가 임계값을 넘으면 발동
  • 알람은 SNS를 거쳐 이메일, SMS, 자동화로 전달됩니다
  • 모든 지표가 아닌 사용자가 체감하는 증상에 알람을 설정하세요
AWS에서 애플리케이션 배포하기

구조화된 로깅 전략

  • 자유 형식 텍스트 대신 JSON으로 로그를 기록하세요
  • 타임스탬프, 레벨, 요청 ID, 사용자 ID를 포함하세요
  • 구조화된 필드는 필터링과 쿼리가 가능합니다
  • 서비스 간 일관성이 있어야 데이터 연관 분석이 가능합니다

타임스탬프, 레벨, requestId, userId 필드가 있는 구조화된 JSON 로그와, 이름이 지정된 필드로 정밀한 필터링과 집계가 가능함을 보여주는 Logs Insights 쿼리

AWS에서 애플리케이션 배포하기

연습해 봅시다!

AWS에서 애플리케이션 배포하기

Preparing Video For Download...