• 로그인지금 시작하세요

기술 분산 추적 세부정보

다음은 뉴렐릭 분산 추적이 작동하는 방식에 대한 몇 가지 기술적인 세부 사항입니다.

트레이스 샘플링

트레이스 샘플링 방법은 설정과 사용 중인 뉴렐릭 추적 툴에 따라 다릅니다. 예를 들어, OpenTelemetry 같은 서드파티 텔레메트리 서비스를 사용해 데이터가 뉴렐릭에 도착하기 전에 트레이스 샘플링을 구현하고 있을 수 있고, Infinite Tracing을 사용해 모든 트레이스 데이터를 뉴렐릭으로 보내고 뉴렐릭이 샘플링을 하는 경우도 있습니다.

뉴렐릭의 다음과 같은 몇 가지 샘플링 전략을 제공합니다.

헤드 기반 샘플링 (표준 분산 추적)

Infinite Tracing 기능을 제외한 대부분의 추적 툴은 헤드 기반 샘플링 방식을 사용합니다. 이 방식은 트레이스의 모든 스팬이 도착하기 전에 개별 스팬에 필터를 적용합니다. 즉, 필터링 프로세스의 시작(‘헤드’)에서 스팬을 수락할지 여부에 대한 결정이 내려집니다. 뉴렐릭은 이 샘플링 전략을 사용하여 스토리지 및 성능 문제를 방지하고 활동의 대표적인 샘플을 캡처합니다.

다음은 표준 분산 추적 툴에서 헤드 기반 샘플링을 구현하는 방법에 대한 몇 가지 세부 정보입니다.

테일 기반 샘플링 (Infinite Tracing)

뉴렐릭의 Infinite Tracing 기능은 테일 기반 샘플링 접근 방식을 사용합니다. ‘테일 기반 샘플링’은 트레이스의 모든 스팬이 도착한 후 처리의 끝 부분에서 트레이스 보유 결정이 내려진다는 것을 의미합니다.

Infinite Tracing을 사용하면 애플리케이션 또는 서드파티 텔레메트리 서비스에서 트레이스 데이터를 100% 보낼 수 있으며, Infinite Tracing이 어떤 트레이스 데이터가 가장 중요한지 알아냅니다. 그리고 중요한 트레이스가 보유되도록 샘플링을 구성할 수 있습니다.

중요

Infinite Tracing은 애플리케이션 또는 서드파티 텔레메트리 서비스에서 더 많은 트레이스 데이터를 수집하고 전달할 수 있으므로 결과적으로 송신 비용이 증가할 수 있습니다. 이 솔루션이 귀사에 적합한지 확인할 수 있도록, Infinite Tracing을 구현할 때는 이 비용을 주시할 것을 권합니다.

샘플링 없음

일부 툴은 샘플링을 사용하지 않습니다. 이 툴에 대한 샘플링 세부정보는 다음과 같습니다.

트레이스 데이터의 구성 방법

분산 트레이스의 구조를 이해하면 다음과 같은 이점이 있습니다.

분산 트레이스는 하나의 ‘상위’ 트레이스를 참조하는 ‘하위’ 트레이스가 있는 트리 모양의 구조를 가지고 있습니다. 이 다이어그램은 트레이스에서 몇 가지 중요한 스팬 관계를 보여줍니다.

이 다이어그램은 분산 추적의 스팬들이 서로 어떻게 관련되어 있는지 보여줍니다.

이 다이어그램은 몇 가지 중요한 개념을 보여줍니다.

  • 트레이스 루트: 트레이스의 첫 번째 서비스 또는 프로세스를 루트 서비스 또는 프로세스라고 합니다.

  • 프로세스 경계: 프로세스는 논리적 코드 조각의 실행을 나타냅니다. 프로세스의 예로는 백엔드 서비스 또는 Lambda 함수가 있습니다. 프로세스 내의 스팬은 다음 중 하나로 분류됩니다.

    • Entry 스팬: 프로세스의 첫 번째 스팬입니다.
    • Exit 스팬: a) Entry 스팬의 상위 스팬이거나 b) http. 또는 db. 속성이 있어 외부 호출을 나타내는 경우, Exit 스팬으로 간주됩니다.
    • In-process 스팬: 내부 메서드 호출 또는 함수를 나타내며 Exit 또는 Entry 스팬이 아닌 스팬입니다.
  • Client 스팬: Client 스팬은 다른 엔터티 또는 외부 종속성에 대한 호출을 나타냅니다. 현재 두 가지 Client 스팬 유형이 있습니다.

    • Datastore. If a client span has attributes prefixed with db. (like db.statement), it's categorized as a datastore span.
    • External. If a client span has attributes prefixed with http. (like http.url) or has a child span in another process, it's categorized as an external span. This is a general category for any external calls that aren't datastore queries. If an external span contains http.url or net.peer.name, it's indexed on the External services page.
  • 트레이스 기간: 트레이의 총 지속 시간은 가장 빠른 스팬의 시작부터 마지막 스팬의 완료까지 걸린 시간에 의해 결정됩니다.

api.newrelic.com/graphiql에서 NerdGraph GraphiQL 탐색기를 사용하여 스팬 관계 데이터를 쿼리할 수 있습니다.

트레이스 데이터 저장 방법

트레이스 데이터가 저장되는 방법을 이해하면 트레이스 데이터를 쿼리하는 데 도움이 될 수 있습니다.

뉴렐릭은 트레이스 데이터 다음으로 저장합니다.

  • Span: 스팬은 분산 트레이스의 일부인 연산을 나타냅니다. 스팬이 나타낼 수 있는 연산에는 브라우저 측 상호 작용, 데이터스토어 쿼리, 다른 서비스에 대한 호출, 메서드 레벨 타이밍 및 Lambda 함수가 포함됩니다. 예: HTTP 서비스에서 스팬은 HTTP 요청 시작 시 생성되고 HTTP 서버가 응답을 반환할 때 완료됩니다. 스팬 속성에는 트레이스-관계 세부 정보(예: traceId, guid)를 포함하여 해당 연산에 대한 중요한 정보(예: 기간, 호스트 데이터 등)가 포함되어 있습니다. 스팬 관련 데이터는 스팬 속성을 참조하세요.
  • Transaction:에이전트가 트레이스의 엔터티를 모니터링하는 경우 해당 엔터티에 대한 요청은 싱글 Transaction 이벤트를 생성합니다. 트랜잭션을 통해 트레이스 데이터를 다른 뉴렐릭 기능에 연결할 수 있습니다. 트랜잭션 관련 데이터는 트랜잭션 속성을 참조하세요.
  • 컨텍스트 메타데이터. 트레이스에 대한 계산과 해당 스팬들 간의 관계를 보여주는 메타데이터를 저장합니다. 이 데이터를 쿼리하려면 NerdGraph GraphiQL 탐색기를 사용하십시오.

애플리케이션 간에 트레이스 컨텍스트가 전달되는 방법

뉴렐릭은 W3C 트레이스 컨텍스트 표준을 지원하므로 네트워크 및 서비스 전반에서 트랜잭션을 더 쉽게 추적할 수 있습니다. 분산 추적을 활성화하면 뉴렐릭 에이전트는 서비스의 아웃바운드 요청에 HTTP 헤더를 추가합니다. HTTP 헤더는 해외 여행 시 여권과 같은 역할을 합니다. HTTP 헤더는 소프트웨어 트레이스들을 식별하고 다양한 네트워크, 프로세스 및 보안 시스템을 통과할 때 중요한 정보를 전달합니다.

헤더에는 트레이스 ID, 스팬 ID, 뉴렐릭 계정 ID 및 샘플링 정보 같은 메타데이터 등 나중에 스팬들을 함께 연결하는 데 도움이 되는 정보도 포함되어 있습니다. 헤더에 대한 자세한 내용은 아래 표를 참조하세요.

항목

설명

accountId

이것은 뉴렐릭 계정 ID입니다. 그러나 귀하의 계정에 포함된 사용자들과 뉴렐릭 관리자만이 이 ID를 귀하의 계정 정보와 어떤 식으로든 연결할 수 있습니다.

appId

이는 트레이스 헤더를 생성하는 애플리케이션의 애플리케이션 ID입니다. accountId와 마찬가지로 이 식별자는 해당 계정의 사용자에게만 정보를 제공합니다.

guid

분산 추적을 사용하면 트레이스의 각 작업 세그먼트가 span으로 표시되며, 각 스팬에는 guid 속성이 있습니다. 프로세스 내 마지막 스팬의 guid는 나가는 요청과 함께 전송되므로 수신 서비스의 첫 번째 작업 세그먼트는 이 guid를 추적 내 데이터를 연결하는 parentId 속성으로 추가할 수 있습니다.

Parent type

모바일, 브라우저, Ruby 앱 등에서 트레이스 헤더의 소스입니다. 이는 이 헤더가 연결된 요청에 의해 트리거된 트랜잭션의 parent.type 속성이 됩니다.

Priority

무작위로 생성된 우선순위 값으로 샘플링 한도에 도달할 때 샘플링되는 데이터를 결정하는 데 도움을 줍니다. 이는 요청의 일부인 첫 번째 뉴렐릭 에이전트가 설정한 부동 값이므로 트레이스의 모든 데이터는 동일한 우선순위 값을 가집니다.

Sampled

요청에 대해 트레이스 데이터를 수집해야 하는지 여부를 에이전트에 알리는 boolean 값입니다. 이는 또한 수집된 모든 스팬과 트랜잭션 데이터에 대한 속성으로 추가됩니다. 이 가이드에서 이 샘플링 프로세스에 대한 보다 자세한 내용을 설명합니다.

Timestamp

페이로드가 생성된 Unix 타임스탬프(밀리초)입니다.

traceId

프로세스 간 및 프로세스 내 경계를 넘는 단일 요청을 식별하는 데 사용되는 고유 ID(무작위로 생성된 문자열)입니다. 이 ID를 사용해 분산 트레이스에서 스팬들을 연결할 수 있습니다.이 ID는 또한 스팬 및 트랜잭션 데이터의 속성으로 추가됩니다.

transactionId

트랜잭션 이벤트의 고유 식별자입니다.

Trusted account key

이는 귀하의 계정과 연결된 다른 계정을 식별하는 데 도움이 되는 키입니다. 따라서 트레이스가 교차하는 하위 계정이 여러 개인 경우 트레이스에 포함된 모든 데이터가 신뢰할 수 있는 소스에서 온 것임을 확인할 수 있으며, 데이터에 액세스할 수 있는 사용자를 알려줍니다.

Version and data key

이는 주/부 버전을 식별하므로 에이전트가 현재 버전에서 주요 변경 사항이 있는 버전에서 트레이스 헤더를 수신하면 해당 헤더를 거부하고 거부 결정과 그 이유를 보고할 수 있습니다.

이 헤더 정보는 헤더 형식을 인식하지 못하는 미들웨어나 에이전트에 의해 진행이 중지되지 않는 한 트레이스의 각 스팬을 따라 전달됩니다. (그림 1 참조)

그림 1

헤더 전파 문제를 해결하기 위해, 뉴렐릭은 두 개의 표준화된 헤더가 필요한 W3C 추적 컨텍스트 사양을 지원합니다. 최신 W3C 뉴렐릭 에이전트는 다음 두 가지 필수 헤더를 전송 및 수신하며, 기본적으로 이전 뉴렐릭 에이전트의 헤더도 전송 및 수신합니다.

  • W3C(traceparent): 전체 트레이스(트레이스 ID) 및 호출 서비스(스팬 ID)를 식별하는 기본 헤더입니다.
  • W3C(tracestate): 공급업체별 정보를 전달하고 추적이 있었던 위치를 추적하는 필수 헤더입니다.
  • 뉴렐릭(newrelic): 이전 뉴렐릭 에이전트와의 역호환성을 유지하기 위해 여전히 전송되는 고유한 원본 헤더입니다.

이 세 가지 헤더의 조합을 통해, 다음 유형의 에이전트로 계측된 서비스 전반으로 트레이스를 전파할 수 있습니다.

  • W3C 뉴렐릭 에이전트
  • W3C가 아닌 뉴렐릭 에이전트
  • W3C 트레이스 컨텍스트 호환 에이전트

중요

요청이 W3C 트레이스 컨텍스트 호환 에이전트에만 영향을 주는 경우 뉴렐릭 헤더를 끌 수 있습니다. newrelic 헤더 끄기에 대한 자세한 내용은 에이전트 구성 문서를 참조하세요.

아래 시나리오는 성공적인 헤더 전파의 다양한 유형을 보여줍니다.

Copyright © 2022 New Relic Inc.

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.