오픈텔레메트리란?
애플리케이션 관측성을 높이기 위한 오픈 소스 프레임워크
트레이스, 메트릭, 로그를 수집
트레이스?
분산 시스템에서 요청(Requset)의 흐름을 추적하는 데이터
- 특정 요청이 여러 서비스와 인프라를 거치면서 어떻게 처리되는지 분석
- 구성요소 : 트레이스ID, 스펜ID, 스펜
1. 트레이스ID : 하나의 요청을 식별하는 고유 ID
2. 스펜ID : 특정 작업(span)을 식별하는 고유 ID
3. 스펜(span) : 특정 작업을 식별하는 ID
트레이스ID vs SPANID
- 트레이스 ID : 하나의 요청이 여러 서비스를 걸쳐 실행될때 하나의 트레이스 아이디를 사용함
- 스팬 ID : 하나의 트레이스ID에 여러 스팬이 존재함
Trace ID: 4bf92f3577b34da6a3ce929d0e0e4736
├── Span ID (Root): 00f067aa0ba902b7 (API Gateway)
├── Span ID: a3c19a2b3f0d4c1e (User Service)
├── Span ID: f87c65a0bcdb4d5e (Order Service)
├── Span ID: 9df2c7d31abc0123 (Payment Service)
정리
트레이스ID | 스펜ID | |
역할 | 하나의 요청(Trace) 전체 식별 | 개별 작업(Span) 식별 |
길이 | 16바이트 (128비트) | 8바이트 (64비트) |
범위 | 트랜잭션 전체에 걸쳐 공유됨 | 특정 작업(Span) 내에서만 사용됨 |
관계 | 트레이스 내 모든 스팬이 같은 트레이스 ID를 공유 | 각 스팬은 고유한 스팬 ID를 가짐 |
메트릭?
시간 기반 데이터이며, 특정 시점에 측정된 값을 저장
정량적 표현이며, cpu 사용량, 요청수, 응답수 같은 정보를 저장
- 구성요소
1. 메트릭 이름 : 측정하는 값의 이름 http_request_total 등
2. 값 : 메트릭의 수치 95% cpu사용율 10ms 응답시간 등
3. 레이블/태그 : 메트릭을 세부적으로 구분하는 키-값 데이터 {method="GET", status="200"} 등
4. 타임스탬프 : 해당 메트릭이 수집된 시간
- 메트릭의종류
메트릭 종류 | 설명 | 예제 |
Counter (카운터) | 증가만 가능 (Reset 전까지 감소 X) | http_requests_total (총 HTTP 요청 수) |
UpDownCounter (업다운 카운터) | 증가 & 감소 가능 | active_users (현재 접속자 수) |
Histogram (히스토그램) | 값의 분포를 측정 (최소, 최대, 평균) | request_duration (응답 시간 분포) |
Gauge (게이지) | 특정 시점의 상태값 | cpu_usage (현재 CPU 사용량) |
로그?
이벤트 발생 기록을 남기는 데이터로 디버깅, 감사, 이벤트 분석 등에 사용
- 구성 요소
1. 타임스탬프 : 로그발생시
2. 레벨 : 로그 심각도(info, warn 등)
3. 메시지 : 다양한 이벤트 설명
최종정리
유형 | 목적 | 주요정보 | 예제 |
트레이스 | 요청의 흐름을 추적 | 트레이스아이디, 스펜아이디 | api호출 시간 측정 |
메트릭 | 성능 모니터링 | 카운터, 게이지, 히스토그램, 업다운카운터 | cpu사용률75% |
로그 | 이벤트 기록 | 타임스탬프, 레벨, 메시지 | db연결 실패 로그 |