트레이스 구조
트레이스 구조 (Trace structure)
트레이스는 트리 구조로 구성된 텔레메트리 데이터예요. 트레이스는 스팬(span)으로 만들어지며, 자식 스팬(child span)이라 불리는 0개 이상의 분기를 가질 수 있는 루트 스팬(root span)이 있어요. 각 자식 스팬은 그 자체로 하나 이상의 자식 스팬의 부모 스팬이 될 수 있어요.
출처: 문서
본문
트레이스는 트리로 구조화된 텔레메트리 데이터예요. 트레이스는 스팬으로 만들어지며(예: 스팬 트리), 자식 스팬이라 불리는 0개에서 여러 개의 분기를 가질 수 있는 루트 스팬이 있어요. 각 자식 스팬은 그 자체로 하나 이상의 자식 스팬의 부모 스팬이 될 수 있고, 이렇게 계속돼요.
Tempo와 TraceQL 쿼리 언어의 특정 컨텍스트에서 스팬은 다음 연관 필드를 가져요:
- name: 스팬 이름
- duration: 스팬의 종료 시간과 시작 시간의 차이
- status: enum:
{ok, error, unset}. 자세한 내용은 OTel span status 문서를 참고해요. - kind: enum:
{server, client, producer, consumer, internal, unspecified}. 자세한 내용은 OTel span kind 문서를 참고해요. - Attributes (속성)
처음 네 가지 속성은 intrinsics예요. Intrinsics는 스팬과 트레이스의 정체성과 수명 주기에 근본적인 코어 내장 필드예요. 이 필드는 OpenTelemetry 사양에 의해 정의되며 항상 존재해요. 분산 트레이싱 데이터의 필수 구조를 설명해요.
Attributes는 키/값 쌍 형태의 커스텀 스팬 메타데이터예요. 네 가지 유형의 속성이 있어요: span attributes, resource attributes, event attributes, link attributes.
Span attributes는 추적하는 작업에 대한 정보를 전달하기 위해 스팬을 주석 처리하는 데 사용할 수 있는 메타데이터를 포함한 키/값 쌍이에요. 예를 들어 전자상거래 애플리케이션에서 스팬이 사용자의 쇼핑 카트에 항목을 추가하는 작업을 추적한다면, 사용자 ID, 추가된 항목 ID, 카트 ID를 캡처해 span attributes로 스팬에 첨부할 수 있어요.
Resource attribute는 스팬을 생성하는 엔티티에 대한 정보를 나타내요. 예를 들어 Kubernetes가 배포한 컨테이너에서 실행되는 프로세스가 만든 스팬은 클러스터 이름, 네임스페이스, pod, 컨테이너 이름을 지정하는 리소스에 연결할 수 있어요. Resource attributes는 Resource를 설명하는 리소스 관련 메타데이터(키/값 쌍)예요.
Event attribute는 스팬 기간 동안의 고유한 시점을 나타내요. 자세한 내용은 All about span events 및 OTEL 문서의 Span events를 참고해요.
Link attribute는 스팬의 링크 데이터를 쿼리할 수 있게 해줘요. 스팬 링크는 한 스팬을 인과 관계가 있는 하나 이상의 다른 스팬과 연결해요. 스팬 링크에 대한 자세한 내용은 Open Telemetry 프로젝트의 Span Links 문서를 참고해요.
OpenTelemetry 사양은 Spans와 Resources에 대한 Semantic Attributes를 정의해요. Semantic Span Attributes는 언어, 프레임워크, 런타임 전반에 공유되는 속성의 명명 체계 집합이에요. 자세한 내용은 Trace Semantic Conventions 및 Resource Semantic Conventions를 참고해요.