Skip to main content

관찰 가능성 엔지니어링

OpenTelemetry 시그널 - 분산 추적

분산 추적

  • 시스템의 여러 지점에서 생성된 일련의 이벤트 데이터
  • 고유한 식별자로 연결되어 있다.
  • 각 추적은 전체 시스템에 대한 고유한 요청을 나타낸다.
  • 동기와 비동기 요청으로 구분된다.
    • 동기

      • 순차적으로 발생하는 요청
      • 다음 작업으로 넘어가기 전에 완료되어야 하는 단위 작업
    • 비동기

      • 동시에 수행되거나 독립적으로 처리될 수 있는 일련의 작업
      • 큐에 메세지 송신, 일괄 처리 작업 수행하는 프로세스 등이 포함된다.
  • 추적에 기록된 각 작업은 스팬( 시스템에서 처리된 작업의 단위 )으로 표기된다.

추적 심층 분석

스팬 컨텍스트

  • 추적 ID
    • 전체 시스템에서 요청을 식별한다.
    • OpenTelemetry의 경우, 추적 ID를 128비트 정수형 값으로 표현한다. 다른 시스템의 경우 64비트 정수형 값으로 표현하고, 정수형 값을 16진수 문자를 포함하는 문자열로 인코딩한다.
  • 스팬 ID
    • 컨텍스트와 상호 작용한 최종 스팬과 연결된다.
    • 하위 스팬이 존재하는 경우, 상위 스팬의 스팬 ID는 부모 식별자로 불린다.
    • 64비트 정수형 값으로 표현된다.
  • 추적 플래그
    • 추적 수준, 샘플링 여부와 같이 추적 관련 추가 정보를 담고 있다.
  • 추적 상태
    • 벤더 특화 정보를 전달할 목적의 필드
    • 개별 벤더가 각자 시스템에 필요로 하는 정보를 전파하여 추적 데이터를 해석하는 것에 도움을 준다.
    • 각 벤더 간에도 추적을 공유할 수 있다.

스팬

  • 고유 식별자, 부모 스팬의 식별자, 기록된 작업의 이름, 시작/종료 시간을 담고 있는 데이터 구조체
  • 단일 메소드 호출 또는 메서드 내에서 호출되는 코드의 일부분
  • 추적 내에 존재하는 여러 스팬이 부모-자식 관계로 연결되어 있다.
  • 각 자식 스팬은 부모 스팬에 관한 정보를 가지고 있다.
  • 추적 내 첫 번째 스팬 = 루트 스팬
    • 부모 스팬에 관한 식별자를 가지고 있지 않다.
  • KV 형태로 메타 데이터를 포함할 수 있다. (예거. 집킨에서는 tag로 부르고, OpenTelemetry는 attribute로 부른다.)

추가 고려 사항

  • 추적 정보를 생성하는 것은 애플리케이션 관점에서 잠재적인 성능 부하가 발생할 수 있는 작업이다.
  • 정보의 수집/전송이 애플리케이션의 요청 처리 과정에 포함되어있는 경우, 추가적인 지연이 발생할 수 있다.
  • 정보 수집을 위해서는 필연적으로 리소스 할당이 필요하기 때문에 메모리가 과다하게 사용될 수 있다.
  • 데이터를 어떤 저장소로 보내는지에 따라 네트워크 대역폭이나 스토리지 용량과 같은 추가 비용이 발생할 수 있다는 점도 고려해야한다.
    • 필요한 만큼의 데이터를 샘플링해서 생성되는 데이터의 총량을 줄이면 된다.
  • 컨텍스트가 모든 서비스에 정확하게 전파되어야한다.
    • 시스템 전반에 추적 ID를 제대로 전파되지 않는다면 요청이 다수의 추적으로 쪼개져서 기록되고, 수집된 정보를 활용하기 어려워서 전혀 도움이 되지않을 수 있다.