트레이스(Traces) — 요청의 전체 흐름을 한눈에

트레이스(Traces) — 요청의 전체 흐름을 한눈에

트레이스는 애플리케이션에 요청이 들어왔을 때 무슨 일이 일어나는지의 전체 그림(big picture)을 보여주는 신호예요. 단일 데이터베이스를 쓰는 모놀리스든, 여러 서비스가 얽힌 정교한 메시(mesh) 구조든, 요청이 애플리케이션 안에서 지나가는 '경로(path)'를 이해하는 데 트레이스가 핵심 역할을 해요. 트레이스는 곧 '컨텍스트·상관관계·계층 구조까지 녹아든 구조화된 로그의 모음'이라고 생각할 수 있어요.

출처: https://opentelemetry.io/docs/concepts/signals/traces/

본문

OpenTelemetry에서 트레이싱이 어떻게 동작하는지 이해하려면 계측에 참여하는 구성 요소가 무엇인지 먼저 보는 게 좋아요.

  • Tracer: Tracer Provider로부터 만들어지며, 서비스의 특정 연산(예: 서비스의 요청)에서 무슨 일이 일어나는지에 대한 상세 정보를 담은 스팬(span)을 생성해요.
  • Span(스팬): 트레이스의 구성 단위이자 하나의 작업(unit of work) 또는 연산을 나타내요. 스팬에는 이름, 부모 스팬 ID(루트 스팬은 비어 있음), 시작·종료 타임스탬프, 스팬 컨텍스트(Span Context), 속성(Attributes), 스팬 이벤트(Span Events), 스팬 링크(Span Links), 스팬 상태(Span Status)가 포함돼요.
  • Trace Exporters: 트레이스를 소비자(consumer)에게 전송해요. 소비자는 디버깅용 표준 출력, OpenTelemetry Collector, 또는 선택한 오픈소스·벤더 백엔드가 될 수 있어요.
  • Context Propagation: 분산 트레이싱을 가능하게 만드는 핵심 개념이에요. 이 메커니즘 덕분에 서비스 경계를 넘어 스팬들이 서로 연관되고 하나의 트레이스로 조립될 수 있어요.

스팬 컨텍스트(Span Context)

스팬 컨텍스트는 모든 스팬 위의 불변(immutable) 객체로, 다음을 담고 있어요.

  • 스팬이 속한 트레이스의 Trace ID
  • 스팬 자신의 Span ID
  • Trace Flags: 트레이스에 대한 정보를 담은 이진 인코딩
  • Trace State: 벤더별 트레이스 정보를 운반할 수 있는 키-값 쌍 목록

스팬 컨텍스트는 분산 컨텍스트 및 배기지(Baggage)와 함께 직렬화되어 전파되는 스팬의 일부예요. Trace ID를 담고 있기 때문에 스팬 링크(Span Links)를 만들 때도 사용돼요.

스팬 이벤트(Span Events)

스팬 이벤트는 스팬 위의 **구조화된 로그 메시지(또는 주석)**로 볼 수 있어요. 주로 스팬이 진행되는 동안 의미 있는 특정 시점을 표시하는 데 쓰여요. 예를 들어 웹 브라우저에서 페이지 로드 추적, 페이지가 인터랙티브해진 시점 표시 같은 상황을 떠올리면 돼요.

루트 스팬(Root Span) 이해하기

루트 스팬은 전체 연산의 시작과 끝을 나타내요. 루트 스팬에는 trace_id 필드가 있지만 parent_id가 없다는 점이 특징이에요. 바로 그 '부모 ID 없음'이 루트 스팬임을 알려주는 신호랍니다.

더 알아보기

  • 컨텍스트 전파: 스팬을 서비스 경계를 넘어 서로 연관짓는 핵심 개념 → 트레이스 개념 문서에서 이어서
  • 스팬 링크(Span Links): 서로 다른 트레이스의 스팬을 연결하는 방법
  • 스펙: 더 자세한 내용은 OpenTelemetry 트레이싱 신호 스펙 참고