OpenTelemetry오픈텔레메트리
쉽게 이해하기
마이크로서비스가 늘어나면 서비스마다 로그, 메트릭, 트레이스를 다르게 만들고 다른 방식으로 전송해 운영팀이 전체 흐름을 잇기 어렵습니다. 벤더를 바꾸거나 도구를 섞어 쓰면 포맷과 라이브러리 호환성 문제로 공수가 커집니다. 이 혼란을 줄이기 위해 표준화된 계측과 전송 방식이 필요합니다. OpenTelemetry는 여러 언어와 프레임워크에서 같은 방법으로 데이터를 수집하고 같은 규격(OTLP)으로 보내게 하는 공통 표준입니다. 앱은 각 언어의 API/SDK로 스팬과 메트릭 이벤트를 만들고, 이를 OTLP로 Collector에 보냅니다. Collector는 받은 데이터를 필요한 형태로 가공해 원하는 백엔드로 전달합니다. 예를 들어 앱은 Tracer/Meter Provider를 설정해 스팬·메트릭을 생성하고, 이를 Exporter나 OTLP 엔드포인트로 내보냅니다. Collector는 OTLP gRPC(예: 4317)나 HTTP(예: 4318)로 수신해 프로세서에서 집계·샘플링 등을 거친 뒤 Jaeger, Prometheus, OpenSearch 같은 시스템으로 내보내도록 구성할 수 있습니다.
비유와 예시
- 다국어 마이크로서비스 공통 표준화: Go 결제 서비스와 Python 추천 서비스가 각각 SDK로 계측하고 OTLP로 Collector에 전송합니다. 운영팀은 Jaeger와 Prometheus 대시보드에서 동일 규격의 데이터로 요청 흐름과 지연을 추적합니다.
- 백엔드 교체 시 코드 수정 최소화: 기존 Jaeger로 트레이스를 보던 팀이 OpenSearch로 로그 분석을 추가합니다. Collector의 Exporter 설정만 바꿔 새로운 백엔드로 내보내고, 애플리케이션 계측 코드는 그대로 둡니다.
- Kubernetes 사이드카 수집 경로: 각 파드 옆에 Collector 사이드카를 띄워 OTLP로 지역 수집 후 중앙 Collector로 전달합니다. 클러스터 네트워크 변화에도 앱은 동일 엔드포인트만 바라보면 됩니다.
한눈에 비교
| OpenTelemetry | Prometheus | Jaeger | |
|---|---|---|---|
| 주된 데이터 | 트레이스·메트릭·로그 | 메트릭 | 트레이스 |
| 전송/수집 | OTLP + Collector | Pull/Push + Exporters | 에이전트/컬렉터 수집 |
| 적용 범위 | 다언어·다백엔드 표준화 | 시계열 메트릭 수집·질의 | 분산 트레이싱 시각화 |
| 코드 계측 | 언어별 API/SDK·자동계측 | 라이브러리 Exporter | 트레이싱 라이브러리/헤더 |
OpenTelemetry는 벤더·도구 전환을 염두에 둔 공통 계측·전송 표준이고, Prometheus와 Jaeger는 각각 메트릭·트레이스 특화 백엔드다.
어디서 왜 중요한가
- OpenTelemetry 데모 스택: OTLP(gRPC/HTTP)로 Collector에 수집하고, Prometheus(메트릭)·Jaeger(트레이스)·OpenSearch(로그)로 내보내며 Grafana 등에서 시각화하는 흐름을 보여줍니다.
- 교차 언어 일관성: 세맨틱 컨벤션과 공통 API로 서비스 간 스팬·메트릭을 비교 가능하게 만들어 분산 환경의 해석 비용을 줄입니다.
- 표준 프로토콜 채택: OTLP가 SDK와 백엔드 사이의 기본 와이어 포맷이 되어 방화벽 규칙과 엔드포인트 관리(예: 4317/4318)가 단순해졌습니다.
- 운영 디커플링: 라우팅·프로세서·Exporter 구성을 Collector에서 제어해 백엔드 변경 시 애플리케이션 재배포를 줄입니다.
자주 하는 오해
- ❌ 오해: OpenTelemetry는 모니터링 제품이다 → ✅ 실제: 제품이 아니라 계측·수집·전송을 표준화하는 프레임워크이자 Collector입니다.
- ❌ 오해: Collector가 없으면 동작하지 않는다 → ✅ 실제: SDK는 직접 Exporter로 내보내거나 OTLP로 Collector에 보낼 수 있습니다.
- ❌ 오해: 트레이스만 다룬다 → ✅ 실제: 트레이스·메트릭·로그를 모두 다룹니다.
대화에서는 이렇게
- "프론트엔드와 결제 모두 OTLP gRPC 4317로 Collector에 붙이고, Exporter는 Jaeger/Prometheus를 동시에 사용하죠."
- "Java는 자동계측, Go는 SDK 코드 계측으로 가되 Tracer/Meter Provider 네이밍 규칙을 맞춥시다."
- "Collector 파이프라인만 업데이트해서 OpenSearch 로그 경로를 추가하면 앱 코드는 건들 필요 없습니다."
- "SDK 배칭/재시도를 켜서 배포 중 짧은 백엔드 장애를 흡수합시다."
- "Grafana는 Prometheus(9090)와 Jaeger(16686)에서 읽도록 유지합니다."
함께 읽으면 좋은 용어
참고 자료
- OpenTelemetry Specs Overview
API/SDK, Semantic Conventions, 필수 플러그인 개요.
- Code-based Instrumentation
언어별 API/SDK 설정과 데이터 내보내기 절차.
- Demo Architecture
Collector·OTLP·백엔드 연계 텔레메트리 흐름 예시.
- Documentation
프로젝트 개요와 지원 범위, 시작 가이드.
- A Guide to OpenTelemetry
도구 연계와 아키텍처 해설.
- Quick Guide to OpenTelemetry
Collector 배치 방식과 SDK 특징 요약.
- What Is OpenTelemetry?
구성요소와 Exporter 개념 정리.