옵저버빌리티(Observability)

[!tldr] 한줄 요약 옵저버빌리티는 시스템의 외부 출력(메트릭, 로그, 트레이스)만으로 내부 상태를 추론할 수 있는 능력이다.

핵심 내용

기원: 제어 이론에서 소프트웨어로

옵저버빌리티는 1959년 Rudolf Kalman이 제어 이론(Control Theory) 에서 도입한 개념이다. 원래 정의는 "시스템의 외부 출력만으로 내부 상태를 얼마나 잘 추론할 수 있는가"를 나타내는 척도다.

이 개념이 소프트웨어 엔지니어링으로 넘어오면서, 분산 시스템의 내부 상태를 텔레메트리 데이터로 파악하는 능력을 뜻하게 되었다.

모니터링 vs 옵저버빌리티

모니터링(Monitoring)옵저버빌리티(Observability)
질문"무엇이 잘못됐나?""왜 잘못됐고 어떻게 고치나?"
접근사전 정의된 메트릭 수집로그+메트릭+트레이스 상관 분석
성격반응적(reactive)능동적(proactive)
범위개별 시스템 건강 상태시스템 간 상호작용 전체

모니터링은 옵저버빌리티의 부분집합이다. 모니터링이 사전 정의된 메트릭으로 "무엇이 잘못됐나?"를 알려준다면, 옵저버빌리티는 메트릭·로그·트레이스의 상관 분석을 통해 "왜 잘못됐고 어떻게 고치나?"까지 답한다.

세 기둥(Three Pillars)

전통적으로 메트릭(Metrics), 로그(Logs), 트레이스(Traces) 를 "옵저버빌리티의 3기둥"이라 부른다.

1. 메트릭(Metrics) — 숫자로 표현되는 정량 데이터

2. 로그(Logs) — 이벤트의 텍스트 기록

3. 트레이스(Traces) — 요청의 전체 경로 추적

graph TB
    System["분산 시스템(Distributed System)"]

    System --> Metrics["메트릭(Metrics)<br/>문제가 있다"]
    System --> Logs["로그(Logs)<br/>무슨 일이 일어났는지"]
    System --> Traces["트레이스(Traces)<br/>어디서 느려졌는지/실패했는지"]

    Metrics --> Alert["알림(Alert)"]
    Logs --> Context["문맥 제공(Context)"]
    Traces --> Path["경로 추적(Path Tracking)"]

    Alert --> RCA["근본 원인 분석<br/>(Root Cause Analysis)"]
    Context --> RCA
    Path --> RCA

    style System fill:#e1f5ff
    style Metrics fill:#fff4e6
    style Logs fill:#fff4e6
    style Traces fill:#fff4e6
    style RCA fill:#d4edda

[!tip] 세 기둥의 역할 요약 메트릭은 알림(alert), 트레이스는 경로 추적, 로그는 문맥(context) 제공. 이 셋을 상관 분석할 수 있어야 진정한 옵저버빌리티다.

MELT로의 확장

최근에는 3기둥에 이벤트(Events) 를 더한 MELT(Metrics, Events, Logs, Traces) 모델이 널리 쓰인다. 이벤트는 배포, 스케일링, 장애 발생 등 상태 변화 알림을 의미한다. 여기에 프로파일링(Profiling) 까지 추가되는 추세다.

최근 동향

예시

[사용자 요청] → 프론트엔드 → API 게이트웨이 → 주문 서비스 → 결제 서비스 → DB

[!example] 장애 시나리오

  1. 메트릭: 주문 API 응답 시간이 평소 200ms → 5초로 급증 (알림 발생)
  2. 트레이스: 주문 서비스 → 결제 서비스 구간에서 4.8초 지연 확인
  3. 로그: 결제 서비스에서 ConnectionTimeout: payment-db:5432 에러 발견
  4. 결론: 결제 DB 커넥션 풀 고갈이 근본 원인

참고 자료

관련 노트