계측 범위

계측 범위(instrumentation scope)는 발생한 텔레메트리가 연결되는 소프트웨어의 논리적 단위다. 모듈, 패키지, 클래스, 라이브러리 또는 프레임워크를 나타낼 수 있으며, 개발자가 텔레메트리의 출처를 서로 구분하기 위해 선택한 의미 있는 경계라면 무엇이든 될 수 있다.

계측 범위를 정의하는 방법

계측 범위는 (name, version, schema_url, attributes) 튜플로 식별되며, version, schema_url, attributes는 선택 사항이다. name은 소프트웨어의 논리적 단위를 고유하게 식별해야 한다. 예를 들어, 라이브러리, 클래스 또는 모듈의 정규화된 이름을 사용할 수 있다.

프로바이더에서 트레이서, 미터 또는 로거를 가져올 때 계측 범위를 지정한다. 이후 해당 인스턴스에서 생성되는 모든 스팬, 메트릭, 로그 레코드에는 해당 계측 범위가 태그로 지정된다.

  • 라이브러리와 프레임워크의 경우: 라이브러리의 정규화된 이름과 버전을 계측 범위로 사용한다. 오픈텔레메트리(OpenTelemetry) 지원이 내장되어 있지 않은 라이브러리를 위한 계측 라이브러리를 작성하는 경우, 계측 라이브러리 자체의 이름과 버전을 사용한다.
  • 애플리케이션 코드의 경우: 일반적으로 CheckoutService와 같은 클래스나 모듈의 이름을 사용한다.

계측 범위가 중요한 이유

옵저버빌리티(observability) 백엔드에서는 계측 범위별로 텔레메트리를 필터링하고, 그룹화하고, 비교할 수 있다. 이를 통해 어떤 라이브러리 버전이 지연을 유발하는지 파악하거나, 특정 모듈의 시그널만 분리해서 살펴보거나, 동일한 컴포넌트의 버전별 동작을 비교할 수 있다.

트레이스 내의 계측 범위

다음 다이어그램은 서로 다른 여섯 개의 계측 범위에서 생성된 스팬으로 이루어진 트레이스를 보여주며, 각 계측 범위는 색상과 범례로 구분된다.

  • http-framework 계측 범위는 루트 스팬인 /api/placeOrder를 생성한다.
  • CheckoutService 계측 범위는 CheckoutService::placeOrder, CheckoutService::prepareOrderItems, CheckoutService::checkout을 생성한다. 세 스팬 모두 CheckoutService라는 이름으로 가져온 동일한 트레이서 인스턴스에서 생성되므로 같은 계측 범위를 공유한다.
  • CartService와 ProductService 계측 범위는 각각 해당 애플리케이션 컴포넌트에서 스팬을 생성한다.
  • Cache library와 DB library 계측 범위는 라이브러리 코드에서 스팬을 생성하며, 이 스팬들은 라이브러리 이름과 버전별로 그룹화된다.
계측 범위별로 스팬의 색상을 구분한 트레이스 워터폴. 하단 범례는 각 색상에 해당하는 계측 범위 이름을 보여준다.