현대적인 서버 운영에서는 단순히 Container가 실행되고 있는지만 확인하는 것으로는 부족합니다.
서비스가 정상적으로 동작하는지, 어디에서 문제가 발생하는지, 사용자의 요청이 어떤 과정을 거치는지 파악해야 합니다.
기존 방식:
Server 확인
↓
Container 상태 확인
↓
문제 추적
문제:
- 장애 원인 찾기 어려움
- 서비스 흐름 파악 어려움
- 성능 저하 분석 어려움
이 문제를 해결하는 것이 Observability입니다.
Observability 구조:
Application
↓
Metrics
↓
Logs
↓
Traces
↓
Monitoring System
Observability는 시스템 내부 상태를 외부에서 이해할 수 있도록 만드는 운영 방식입니다.
이번 글에서는 Docker Compose 환경에서 Observability 개념부터 Metrics, Logging, Distributed Tracing, Monitoring 구성, Production 운영 전략까지 알아보겠습니다.
Observability란 무엇인가?
Observability는 시스템의 상태를 데이터를 통해 분석할 수 있는 능력을 의미합니다.
핵심 요소는 3가지입니다.
Metrics
숫자로 표현되는 시스템 상태
예:
CPU 80%
Memory 70%
Request 1000/s
Logging
서비스에서 발생하는 기록
예:
User Login Success
Payment Failed
Tracing
요청 흐름 추적
예:
User Request
↓
API Gateway
↓
Order Service
↓
Payment Service
세 가지 데이터를 함께 활용하는 것이 Observability입니다.
Monitoring과 Observability 차이
Monitoring:
현재 상태 확인
예:
CPU 90%
Memory 80%
Observability:
왜 문제가 발생했는지 분석
예:
Payment Service 지연
↓
Database Query 증가
↓
특정 API 문제 발생
Monitoring은 상태 확인, Observability는 원인 분석에 집중합니다.
Docker Compose Observability 구조
기본 구조:
Container
↓
Metrics Collector
↓
Logging System
↓
Tracing System
↓
Dashboard
Production 구조:
Application
↓
Prometheus
↓
Grafana
↓
Loki
↓
Jaeger
↓
Alertmanager
Docker Compose Metrics 수집
Metrics는 시스템 상태 데이터를 수집합니다.
수집 대상:
Container:
- CPU
- Memory
- Network
- Disk
Application:
- Request Count
- Response Time
- Error Rate
Database:
- Connection
- Query Performance
Docker Compose Prometheus 구성
Prometheus는 Metrics 수집 시스템입니다.
구조:
Container
↓
Prometheus
↓
Storage
↓
Grafana
docker-compose.yml:
services:
prometheus:
image: prom/prometheus
ports:
- "9090:9090"
실행:
docker compose up -d
Docker Compose Grafana Dashboard 구성
Grafana는 데이터를 시각화합니다.
구조:
Prometheus
↓
Grafana
↓
Dashboard
확인 가능:
- CPU 그래프
- Memory 그래프
- Request 그래프
- Error 그래프
운영자는 Dashboard를 통해 서버 상태를 확인합니다.
Docker Compose Logging 중앙화
Container가 많아지면 Log 관리가 어려워집니다.
기존:
Container 1
↓
Log 확인
Container 2
↓
Log 확인
중앙화:
Container
↓
Log Collector
↓
Central Logging
장점:
- 검색 가능
- 장애 분석
- 기록 보관
Docker Compose Loki Logging 구성
Loki는 Container Log 수집 시스템입니다.
구조:
Container Log
↓
Promtail
↓
Loki
↓
Grafana
장점:
- Docker 환경 최적화
- Grafana 연동
Docker Compose Distributed Tracing
Microservice 환경에서는 요청 흐름 추적이 중요합니다.
예:
User Request
↓
API Gateway
↓
Order Service
↓
Payment Service
↓
Database
문제:
어느 구간에서 느려지는지 확인 필요
Tracing:
Request ID
↓
전체 흐름 추적
Docker Compose Jaeger Tracing 구성
Jaeger는 Distributed Tracing 시스템입니다.
구조:
Application
↓
Jaeger Agent
↓
Jaeger Collector
↓
Dashboard
확인:
- Service 호출 시간
- 오류 위치
- 지연 구간
Docker Compose Health Monitoring
Healthcheck는 기본적인 Observability 요소입니다.
구조:
Container
↓
Health Check
↓
상태 전달
상태:
Healthy
Unhealthy
장애 감지:
Unhealthy
↓
Alert 발생
Docker Compose Alertmanager 구성
문제가 발생하면 알림이 필요합니다.
구조:
Prometheus
↓
Alertmanager
↓
Notification
알림:
- Slack
- Webhook
예:
CPU 95% 이상
↓
Alert 발생
Docker Compose Observability와 장애 대응
장애 발생:
사용자 오류 증가
Observability:
Metrics 확인
↓
Logs 확인
↓
Trace 확인
↓
원인 분석
빠른 복구 가능
Docker Compose Observability Production 구조
실제 운영:
User
↓
Load Balancer
↓
API Gateway
↓
Application Container
↓
Metrics
↓
Logs
↓
Tracing
↓
Monitoring
↓
Alert
Docker Compose Observability Best Practice
추천:
- Metrics 수집
- Log 중앙화
- Trace 적용
- Dashboard 구성
- Alert 설정
- 장애 분석 테스트
운영 흐름:
Data 수집
↓
분석
↓
문제 발견
↓
알림
↓
복구
자주 묻는 질문
Monitoring과 Observability는 같은 것인가요?
비슷하지만 다릅니다.
Monitoring은 상태 확인, Observability는 원인 분석까지 포함합니다.
Docker Compose에서도 Observability 구축이 가능한가요?
가능합니다.
Prometheus, Grafana, Loki, Jaeger 등을 Container로 구성할 수 있습니다.
작은 서비스에도 필요한가요?
기본 Metrics와 Logging부터 시작하는 것이 좋습니다.
가장 중요한 Observability 요소는 무엇인가요?
Metrics, Logging, Tracing 세 가지를 함께 보는 것이 중요합니다.
마무리
Docker Compose Observability 구축은 안정적인 Production 서버 운영을 위한 핵심 요소입니다.
최종 구조:
Application
↓
Metrics
↓
Logs
↓
Tracing
↓
Dashboard
↓
Alert
Container가 많아질수록 단순히 “서버가 켜져 있는지” 확인하는 것을 넘어 “왜 문제가 발생했는지” 분석하는 운영 체계가 필요합니다.
다음 글에서는 서버 상태 데이터를 수집하는 핵심 도구인 Docker Compose Prometheus Monitoring 구성 방법을 알아보겠습니다.