본문으로 건너뛰기

관측성 개요

멀티리전 쇼핑몰 플랫폼의 전체 관측성(Observability) 스택을 소개합니다. 분산 시스템에서 문제를 신속하게 파악하고 해결하기 위해 트레이스(Traces), 메트릭(Metrics), 로그(Logs) 세 가지 핵심 요소를 통합 운영합니다.

관측성의 세 가지 기둥

기둥목적도구
Traces요청의 전체 흐름 추적OpenTelemetry, Tempo, X-Ray
Metrics시스템 상태 수치화Prometheus, CloudWatch
Logs상세 이벤트 기록Fluent Bit, CloudWatch Logs

전체 아키텍처

핵심 컴포넌트

1. OpenTelemetry Collector (DaemonSet)

모든 노드에서 실행되며 애플리케이션의 텔레메트리 데이터를 수집합니다.

# 수신 포트
- OTLP gRPC: 4317
- OTLP HTTP: 4318
- Prometheus metrics: 8889

# 주요 기능
- Tail-based Sampling (에러 100%, 느린 요청 100%, 기본 10%)
- 배치 처리 (1024개 단위)
- 메모리 제한 (512Mi)

이중 내보내기 (Dual Export):

  • Grafana Tempo: 장기 보관 및 상세 분석
  • AWS X-Ray: AWS 서비스 통합 및 서비스 맵

2. Prometheus + Grafana

# Prometheus 설정
retention: 15d
storage: 50Gi (gp3)
serviceMonitor: 자동 탐지

# Grafana 설정
persistence: 10Gi
dataSource:
- Prometheus (기본)
- Tempo (트레이스)
- CloudWatch (AWS 메트릭)

3. Fluent Bit (DaemonSet)

모든 컨테이너 로그를 수집하여 CloudWatch Logs로 전송합니다.

# 로그 그룹 구조
/eks/{cluster-name}/containers

# 로그 스트림
{node-name}-{container-name}

# 보관 기간
90일

4. CloudWatch 통합

Terraform으로 관리되는 CloudWatch 리소스:

# 네임스페이스별 로그 그룹
- /eks/multi-region-mall/core-services
- /eks/multi-region-mall/user-services
- /eks/multi-region-mall/fulfillment
- /eks/multi-region-mall/business-services
- /eks/multi-region-mall/platform

# 주요 알람
- high-error-rate: 5XX 에러율 > 1%
- high-latency: 응답시간 > 2
- aurora-replication-lag: 복제 지연 > 1000ms
- msk-under-replicated: 언더 복제 파티션 감지

데이터 흐름 상세

리전별 구성

각 리전(us-east-1, us-west-2)은 독립적인 관측성 스택을 운영합니다:

컴포넌트us-east-1us-west-2
OTel CollectorDaemonSetDaemonSet
TempoS3 버킷 (use1)S3 버킷 (usw2)
Prometheus50Gi PVC50Gi PVC
CloudWatch/eks/multi-region-mall/*/eks/multi-region-mall/*

Tempo IRSA 설정

ArgoCD ApplicationSet을 통해 리전별 IAM Role을 자동 패치합니다:

# appset-tempo.yaml
patches:
- target:
kind: ServiceAccount
name: tempo
patch: |-
- op: replace
path: /metadata/annotations/eks.amazonaws.com~1role-arn
value: "arn:aws:iam::123456789012:role/production-tempo-{{metadata.labels.region}}"

알림 및 에스컬레이션

빠른 시작

1. Grafana 접속

# 포트 포워딩
kubectl port-forward svc/prometheus-grafana -n monitoring 3000:80

# 브라우저에서 접속
open http://localhost:3000
# 기본 계정: admin / prom-operator

2. 트레이스 검색

# Tempo API로 트레이스 검색
curl -G http://localhost:3200/api/search \
--data-urlencode 'tags=service.name=order-service' \
--data-urlencode 'minDuration=500ms'

3. 로그 조회

# CloudWatch Logs Insights
aws logs start-query \
--log-group-name "/eks/multi-region-mall/core-services" \
--query-string 'fields @timestamp, @message | filter @message like /ERROR/ | limit 100'

관련 문서