-
텔레메트리 데이터 수집 아키텍처에는 다음과 같은 구성요소가 존재함.
- Agent
- 애플리케이션이나 서버에 직접 설치되어 동작하는 경량 프로세스.
- 로컬에서 데이터를 수집하고 일차적인 처리(필터링, 기본 변환 등)를 수행.
- 보통 단일 호스트나 애플리케이션에 국한된 정보만 처리.
- Collector
- 여러 에이전트나 데이터 소스로부터 데이터를 중앙에서 수집하는 역할.
- 더 복잡한 처리(집계, 샘플링, 변환 등)를 수행함.
- 여러 호스트나 애플리케이션의 데이터를 수집해 백엔드로 전달함.
- Exporter
- 프로메테우스 생태계에서 주로 사용되는 용어로, 특정 시스템이나 애플리케이션의 메트릭을 노출(expose)하는 역할을 함.
- 데이터를 수집하여 HTTP 엔드포인트로 노출시키고, 프로메테우스 서버가 이를 긁어가는(scrape) 방식으로 동작함.
- pull 모델.
- Forwarder
- 수집된 텔레메트리 데이터를 다양한 백엔드 시스템으로 능동적으로 전송(push)하는 역할을 함.
- 주로 로그나 이벤트 데이터에서 사용됨. 데이터 형식 변환을 처리함.
- push 모델.
- SDK(Software Development Kit)
- 애플리케이션 코드에 직접 통합되는 라이브러리.
- 개발자가 애플리케이션 내부에서 텔레메트리 데이터를 생성하고 내보내는 데 사용함.
- 독립적인 프로세스가 아닌, 애플리케이션과 동일한 프로세스 내에서 "인-프로세스 에이전트" 역할을 수행함.
-
도구에 따라 일부 구성요소가 포함되거나 포함되지 않을 수 있고, 경계가 모호할 수도 있음. 예를 들어,
- fluent-bit
- Fluent Bit는 SDK가 아닌 독립 프로세스(애플리케이션 코드에 삽입되는 코드 없음).
- 애플리케이션의 파일 출력이나 표준 출력을 Fluent Bit가 수집하고 백엔드로 전송하거나 노출함. 즉, Fluent Bit는 agent, collector, forwarder, exporter가 하나의 프로세스로 통합된 형태.
- 대규모 환경에서는 Fluent Bit를 agent로, Fluentd를 중앙 collector로 사용하는 아키텍처도 가능함(Fluent Bit는 Fluentd의 경량화 버전임).
- 데이터 흐름
- 애플리케이션(file/stdout) → [ Fluent Bit(agent) → forward/export ] → 백엔드
- 애플리케이션(file/stdout) → Fluent Bit(agent) → [ Fluentd(collector) → forward/export ] → 백엔드
- cAdvisor
- cAdvisor는 독립적인 컨테이너로 실행되면서 호스트 머신의 컨테이너 런타임(Docker, containerd 등)에 접근함. 컨테이너 런타임 API를 통해 직접 정보를 수집하므로, 각 컨테이너 내부에 별도의 agent가 없음.
- Prometheus 형식으로 노출하여 exporter의 역할을 가지고 있지만, 능동적으로 전송하는 forwarder의 역할을 가지고 있지는 않음.
- 데이터 흐름
- 컨테이너 런타임 → [ cAdvisor(collector) → export ] → 백엔드
- OpenTelemetry
- 애플리케이션 코드에 직접 통합되는 표준화된 SDK로, 로그, 메트릭, 트레이스를 수집하여 OpenTelemetry Collector로 전송함.
- 데이터 흐름
- 애플리케이션 + OTEL SDK(forward) → OTEL Collector → forward/export → 백엔드
- Loki
- Loki Client Libraries는백엔드 시스템(Loki)에서 직접 제공하는 SDK로, 애플리케이션에서 Loki로 로그를 직접 전송 가능함.
- Promtail은 Loki 생태계의 별도 에이전트로, 파일 기반 로그를 수집함.
- 데이터 흐름
- 애플리케이션 + Loki Client Libraries(forward) → Loki(백엔드)
- 애플리케이션(file) → [ Promptail → forward ] → Loki(백엔드)
-
도입배경
-
MSA 환경에서 문제가 발생했을 때, 로그만 보거나 메트릭만 보는 것으로는 원인을 파악하기 어려움. 통합된 컨텍스트에서 데이터를 수집하면 "이 특정 요청이 실패한 이유는 무엇인가?"라는 질문에 더 쉽게 답할 수 있음. → 하지만 과거에 사용되던 그라파나와 같은 일반적인 도구들의 경우, 서로 다른 데이터 소스에서 가져온 데이터 간의 연결을 만드는 것이 어려움.
-
MSA 환경이 더 널리 사용되며, 다양한 목적의 로그 수집기와 저마다의 데이터 파이프라인이 생겨남. → 이러한 도구 생태계의 다양화는 벤더 종속성(vendor lock-in) 문제를 심화시키고, 통합 관측성 구현을 위한 운영 복잡도를 크게 증가시킴.
-
이 문제는 OpenTelemetry 공식 문서에 있는 그림에 잘 표현되어 있음.

OTEL을 사용하지 않는 경우 ↔에 ?
가 있음.
-
OpenTelemetry는 데이터가 수집되는 시점부터 로그, 메트릭, 트레이스 간의 상관관계를 유지함(Correlate). 예를 들어, 특정 API 호출에 대한 트레이스와 그 호출 과정에서 발생한 로그, 관련 메트릭을 동일한 컨텍스트 ID로 연결할 수 있음.

-
OpenTelemetry는 수집 단계에서 데이터를 표준화하므로, 모든 백엔드 시스템에 일관된 형식으로 데이터가 전달됨. 데이터가 표준화된 형식으로 수집되면 저장소를 나중에 변경하더라도 수집 코드를 수정할 필요가 없음.
-
OTEL이 하는 일

출처

출처
parse me : 언젠가 이 글에 쓰이면 좋을 것 같은 재료을 보관해 두는 영역입니다.
None
from : 과거의 어떤 원자적 생각이 이 생각을 만들었는지 연결하고 설명합니다.
- ba2.4.3.2_1. title: 로그, 트레이스, 메트릭, 이벤트를 통틀어 텔레메트리 데이터라고 부른다. 작게 분해된 서비스일지라도 한눈에 파악하기 위해, 텔레메트리 데이터를 수집하고 저장하는 방법의 표준화가 요구되기 시작했다. OpenTelemetry Collector은 로그, 트레이스, 메트릭, 이벤트 만남의 장이다.
- 이 글은 앞의 글에 언급된 OTEL Collector에 대해 설명한다.
supplementary : 어떤 새로운 생각이 이 문서에 작성된 생각을 뒷받침하는지 연결합니다.
None
opposite : 어떤 새로운 생각이 이 문서에 작성된 생각과 대조되는지 연결합니다.
None
to : 이 문서에 작성된 생각이 어떤 생각으로 발전되거나 이어지는지를 작성하는 영역입니다.
None