Span 링크 (Span Links)
복잡한 분산 시스템에서 서로 인과 관계가 있지만 일반적인 부모-자식 관계가 아닌 스팬들을 연결해 주는 기능이에요. OpenTelemetry의 span link 개념을 바탕으로, 트레이스 안이나 트레이스 사이에서 작업 흐름을 추적할 수 있어요.
출처: 문서
본문
개요 (Overview)
Span link는 OpenTelemetry 개념이자 OpenTelemetry Tracing API의 일부예요. Datadog은 다음 방식으로 계측된 애플리케이션에서 span link를 지원해요.
- OpenTelemetry SDK로 계측된 애플리케이션
- Datadog SDK로 계측된 애플리케이션
Span link는 인과 관계가 있지만 전형적인 부모-자식 관계가 아닌 스팬 하나 이상을 서로 연결해 줘요. 이 링크는 같은 트레이스 안의 스팬이나 서로 다른 트레이스의 스팬을 연결할 수 있어요.
분산 시스템에서는 작업 흐름이 선형 실행 패턴에서 벗어나는 경우가 많아요. Span link는 이런 환경에서 작업을 추적하는 데 도움을 줘요. 요청을 배치로 실행하거나 이벤트를 비동기로 처리하는 시스템의 작업 흐름을 추적할 때 특히 유용해요.
Datadog은 정방향(forward)과 역방향(backward) span link를 모두 지원해요. 그래서 사용자는 트레이스 간 스팬 관계를 양방향으로 시각화하고 탐색할 수 있어요.
- 정방향 링크 (Forward Links): 나중에 발생하는 스팬에 링크를 걸 수 있어요. 같은 트레이스든 다른 트레이스든 관계없어요. 이렇게 하면 이전 작업에서 이후 작업으로 트레이스를 가로질러 이동할 수 있어요.
- 역방향 링크 (Backward Links): 마찬가지로 이전에 발생한 스팬에 링크를 걸 수 있어요. 같은 트레이스나 다른 트레이스 모두 가능해요. 이렇게 하면 이후 작업에서 이전 작업으로 거슬러 추적할 수 있어요.
일반적인 사용 사례 (Common use cases)
Span link는 여러 작업이 하나의 스팬으로 수렴하는 fan-in 시나리오에서 가장 유용해요. 하나의 스팬이 수렴하는 여러 작업을 다시 가리키게 되죠.
예를 들어 이런 경우가 있어요.
- Scatter-Gather와 Map-Reduce: 여러 병렬 프로세스가 하나의 결합된 프로세스로 수렴할 때, span link가 이 병렬 프로세스들을 추적·연결해요. 각 병렬 프로세스의 결과를 최종 집계 결과에 연결해 줘요.
- 메시지 집계 (Message Aggregation): Kafka Streams 같은 시스템에서 span link가 메시지 그룹의 각 메시지를 집계 결과에 연결해요. 개별 메시지가 최종 출력에 어떻게 기여하는지 보여주죠.
- 트랜잭션 메시징 (Transactional Messaging): 메시지 큐처럼 여러 메시지가 하나의 트랜잭션에 속하는 경우, span link가 각 메시지와 전체 트랜잭션 처리 간의 관계를 추적해요.
- 이벤트 소싱 (Event Sourcing): 이벤트 소싱에서 span link는 여러 변경 메시지가 엔터티의 현재 상태에 어떻게 기여하는지 추적해요.
Span link 만들기 (Creating span links)
Span link를 만드는 방법은 애플리케이션이 어떻게 계측되어 있는지에 따라 달라져요.
Datadog SDK
Python, Node.js, Go, PHP SDK는 span link를 추가하는 API를 제공해요. 예시는 Python, Node.js, Go, PHP 예시를 참고하세요.
Java, .NET, Ruby는 OpenTelemetry API로 span link를 추가해요. Datadog SDK가 OpenTelemetry API로 만든 span link를 Datadog으로 보내요. Datadog SDK에서 OpenTelemetry API를 사용하려면 OpenTelemetry API 커스텀 계측을 참고하세요. span link API에 대해서는 Java, .NET, Ruby의 OpenTelemetry 문서를 참고하세요.
OpenTelemetry SDK
언어별 OpenTelemetry 계측 문서를 따라 하세요. 예를 들어 Java span API를 참고해요.
최소 지원 버전 (Minimum support)
참고: 이 절은 Datadog APM 클라이언트 라이브러리(OpenTelemetry API 사용)로 span link를 생성하기 위한 최소 지원을 설명해요. OpenTelemetry SDK로 생성된 span link는 OTLP Ingest를 통해 Datadog으로 전송돼요.
Datadog SDK를 사용해 span link를 생성하려면 Agent v7.52.0 이상이 필요해요. span link 지원은 다음 릴리스에서 도입됐어요.
| 언어 | 최소 SDK 버전 |
|---|---|
| C++/Proxy | 아직 미지원 |
| Go | 1.61.0 |
| Java | 1.26.0 |
| .NET | 2.53.0 |
| Node | 5.3.0 |
| PHP | 0.97.0 |
| Python | 2.5.0 |
| Ruby | 2.0.0 |
Span link 보기 (Viewing span links)
Trace Explorer에서 span link를 볼 수 있어요.