시스템의 내부 동작을 이해하기 위한 4가지 핵심 신호
요청이 분산 시스템을 통과하는 전체 경로를 추적합니다. 마이크로서비스 환경에서 성능 문제의 근본 원인을 찾는 데 필수적입니다.
런타임에 캡처된 숫자 측정값으로, 시스템의 상태와 성능을 모니터링합니다. CPU 사용률, 메모리, 요청 수 등을 추적합니다.
타임스탬프가 있는 텍스트 레코드로, 시스템에서 발생하는 이벤트를 기록합니다. 기존 로깅과 자동으로 통합됩니다.
서비스 간에 컨텍스트 정보를 전파하는 키-값 저장소입니다. 사용자 ID나 요청 ID 같은 정보를 전달합니다.
| 종류 | 설명 | 예시 |
|---|---|---|
| Client | 동기식 외부 요청 | HTTP 요청, DB 호출 |
| Server | 동기식 수신 요청 | HTTP 서버, RPC 수신 |
| Internal | 프로세스 내부 작업 | 함수 호출, 미들웨어 |
| Producer | 비동기 작업 생성 | 메시지 큐에 작업 추가 |
| Consumer | 비동기 작업 처리 | 큐에서 메시지 처리 |
시간이 지나면서 누적되는 값
예: 총 요청 수, 에러 횟수
증가하거나 감소할 수 있는 값
예: 큐 길이, 연결 수
현재 시점의 값
예: CPU 사용률, 메모리
값의 분포를 측정
예: 응답 시간 분포
Views를 사용하면 어떤 메트릭을 처리하거나 무시할지, 어떤 집계 방식을 사용할지, 어떤 속성을 보고할지 커스터마이징할 수 있습니다.
기계가 읽기 쉬운 일관된 형식 (권장)
사람이 읽기 쉽지만 파싱이 어려움
일부 구조를 가지지만 일관성이 부족할 수 있음
| 필드명 | 설명 | 예시 |
|---|---|---|
| Timestamp | 이벤트 발생 시간 | 2024-01-15T10:30:45Z |
| TraceId | 관련 추적 ID | 7bba9f33312b3dbb... |
| SpanId | 관련 스팬 ID | 086e83747d0e381e |
| SeverityText | 로그 레벨 | ERROR, WARN, INFO |
| Body | 로그 메시지 본문 | User authentication failed |
| Attributes | 추가 메타데이터 | {userId: "123", ip: "192.168.1.1"} |
OpenTelemetry는 로그를 자동으로 활성 추적 및 스팬과 연결하여, 분산 시스템에서 문제를 더 쉽게 디버깅할 수 있게 합니다.
Baggage는 자동으로 전파되지만 속성(Attributes)에 자동으로 추가되지 않습니다. Baggage 데이터를 스팬, 메트릭, 로그의 속성으로 사용하려면 명시적으로 읽어서 추가해야 합니다.
사용자가 주문을 완료하는 과정에서 모든 신호가 어떻게 연동되는지 살펴봅시다:
주문 요청이 프론트엔드 → API Gateway → 주문 서비스 → 재고 서비스 → 결제 서비스로 흐르는 과정을 추적
• 주문 처리 시간 (Histogram)
• 동시 처리 중인 주문 수 (UpDownCounter)
• 총 주문 수 (Counter)
• 현재 재고 수준 (Gauge)
각 서비스에서 발생하는 이벤트를 기록하며, TraceId와 SpanId로 자동 연결됨
userId, orderId, customerTier 같은 정보를 모든 서비스에 전파하여 각 서비스에서 활용
OpenTelemetry의 4가지 신호를 통합적으로 사용하면
분산 시스템의 완전한 관찰가능성을 확보할 수 있습니다!