컴포넌트(Components) — OpenTelemetry를 이루는 주요 요소
컴포넌트(Components) — OpenTelemetry를 이루는 주요 요소
OpenTelemetry는 여러 주요 컴포넌트로 구성돼 있어요. Specification(스펙), Collector, 언어별 API & SDK 구현, 계측 라이브러리, 익스포터(Exporters), 제로 코드 계측, 리소스 감지기(Resource Detectors), 크로스 서비스 전파기(Propagators), 샘플러(Samplers), Kubernetes operator, Function as a Service 자산 등이 그것이에요. 이 구조 덕분에 OpenTelemetry는 텔레메트리 데이터 생성·내보내기를 위한 벤더별 SDK와 도구의 필요성을 대체할 수 있어요.
본문
스펙(Specification)
모든 구현이 따라야 하는 크로스 언어 요구사항·기대치를 정의해요. 용어 정의를 넘어 다음을 규정해요.
- API: 트레이싱·메트릭·로깅 데이터를 생성하고 연관 짓기 위한 데이터 타입과 연산
- SDK: API의 언어별 구현을 위한 요구사항. 설정·데이터 처리·내보내기 개념도 여기 정의돼요.
- Data: OpenTelemetry 프로토콜(OTLP)과 벤더 중립적 semantic conventions를 정의해 텔레메트리 백엔드가 지원할 수 있게 해요.
Collector
벤더 중립적 프록시로서 텔레메트리 데이터를 수신·처리·내보내는 역할을 해요. OTLP, Jaeger, Prometheus 그리고 많은 상용·독점 도구 등 여러 형식의 데이터를 받아 하나 이상의 백엔드로 보내고, 내보내기 전에 데이터를 처리·필터링할 수도 있어요.
언어별 API & SDK 구현
사용하는 언어로 OpenTelemetry API를 통해 텔레메트리를 생성하고 선호하는 백엔드로 내보낼 수 있게 해줘요. 또한 흔한 라이브러리·프레임워크용 계측 라이브러리를 통합해 애플리케이션의 수동 계측과 연결할 수 있어요.
계측 라이브러리(Instrumentation Libraries)
지원되는 언어의 인기 라이브러리·프레임워크에서 관련 텔레메트리 데이터를 생성하는 광범위한 컴포넌트 집합이에요. 예를 들어 HTTP 라이브러리의 인바운드·아웃바운드 HTTP 요청이 그 요청에 대한 데이터를 생성해요. OpenTelemetry의 지향 목표는 모든 인기 라이브러리가 기본적으로 관측 가능해져, 별도 의존성이 필요하지 않게 되는 것이에요.
익스포터(Exporters)
텔레메트리를 OpenTelemetry Collector로 보내 정확히 내보내는 게 모범 사례예요. 시각화를 위해 Jaeger, Zipkin, Prometheus 또는 벤더별 백엔드로 내보낼 수 있어요. 그중 OTLP 익스포터는 OpenTelemetry 데이터 모델에 맞춰 설계되어 정보 손실 없이 OTel 데이터를 내보내요. Prometheus, Jaeger, 대부분의 벤더가 OTLP를 지원해 유연성이 크답니다.
제로 코드 계측(Zero-code Instrumentation)
언어별 구현이 제공한다면 소스 코드를 건드리지 않고 애플리케이션을 계측하는 방법이에요. 기본 메커니즘은 언어에 의존하지만, 제로 코드 계측은 OpenTelemetry API·SDK 기능을 애플리케이션에 추가하고 계측 라이브러리·익스포터 의존성도 함께 추가할 수 있어요.
리소스 감지기(Resource Detectors)
리소스(Resource)는 텔레메트리를 생성하는 엔티티를 리소스 속성으로 나타낸 것이에요. 예를 들어 Kubernetes의 컨테이너에서 실행되는 프로세스는 Pod 이름, 네임스페이스, 배포 이름을 가질 수 있고, 이 속성들을 리소스에 포함할 수 있어요. 언어별 구현은 OTEL_RESOURCE_ 환경변수 등에서 리소스를 감지하는 기능을 제공해요.
더 알아보기
- Collector: 텔레메트리 수신·처리·내보내기 프록시
- OTLP: 정보 손실 없는 내보내기용 OpenTelemetry 프로토콜
- Zero-code instrumentation: 소스 수정 없이 계측 추가
- Resource & Instrumentation scope: 신호를 엔티티·계측 라이브러리로 묶는 개념