• 로그인

사용자의 편의를 위해 제공되는 기계 번역입니다.

영문본과 번역본이 일치하지 않는 경우 영문본이 우선합니다. 보다 자세한 내용은 이 페이지를 방문하시기 바랍니다.

문제 신고

기술 분산 추적 세부정보

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

트레이스 샘플링

추적이 샘플링되는 방법은 사용 중인 새 릴릭 추적 도구 및 설정에 따라 다릅니다. 예를 들어, 써드파티 텔레메트리 서비스 (예: 오픈텔레메트리) 를 사용하여 데이터가 우리에게 도달하기 전에 추적 샘플링을 구현할 수 있습니다. 또는 무한 추적을 사용하는 경우, 추적 데이터를 모두 보내서 샘플링에 의존할 수 있습니다.

몇 가지 샘플링 전략을 사용할 수 있습니다.

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

무한 추적 기능을 제외하고 대부분의 추적 도구는 헤드 기반 샘플링 접근법을 사용합니다. 이는 추적이 도달하기 전에 개별 범위에 대한 필터를 적용하며, 이는 필터링 프로세스의 시작 ( "헤드") 에서 범위를 허용할지 여부에 대한 결정을 의미합니다. 이 샘플링 전략을 사용하여 스토리지 및 성능 문제를 방지하면서 활동의 대표적인 샘플을 캡처합니다.

다음은 표준 분산 추적 도구에서 헤드 기반 샘플링이 구현되는 방법에 대한 세부사항입니다.

Tail 기반 샘플링 (무한 추적)

무한 추적 기능은 테일 기반 샘플링 접근법을 사용합니다. "Tail 기반 샘플링" 은 추적의 모든 범위가 도달한 후 추적 보존 결정이 처리의 끝에서 수행됨을 의미합니다.

무한 추적 기능을 사용하면 애플리케이션 또는 써드파티 텔레메트리 서비스에서 추적 데이터의 100% 를 전송할 수 있으며, 무한 추적이 가장 중요한 추적 데이터를 파악할 수 있습니다. 또한 중요한 추적이 유지되도록 샘플링을 구성할 수 있습니다.

중요

Infinite Tracing은 애플리케이션 또는 타사 원격 분석 서비스에서 더 많은 추적 데이터를 수집하고 전달할 수 있으므로 결과적으로 송신 비용이 증가할 수 있습니다.이 솔루션이 귀하에게 적합한지 확인하기 위해 무한 추적을 출시할 때 이러한 비용을 주시하는 것이 좋습니다.

샘플링 없음

우리 도구 중 일부는 샘플링을 사용하지 않는다. 이러한 도구에 대한 샘플링 세부사항:

추적 데이터가 구조화되는 방법

분산 추적의 구조를 이해하면 다음을 수행할 수 있습니다.

분배 추적에는 하나의 "상위" 범위를 참조하는 "개의 하위" 이 있는 트리 모양의 구조가 있습니다. 이 다이어그램은 추적에서 몇 가지 중요한 범위 관계를 표시합니다.

이 다이어그램은 분산 추적의 범위가 서로 관련되는 방법을 보여줍니다.

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

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

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

    • 항목 범위: 프로세스의 첫 번째 범위입니다.
    • 종료 범위 : a) 진입 범위의 상위이거나 b) http. 또는 db. 속성이 있어 외부 호출을 나타내는 경우 범위는 종료 범위로 간주됩니다.
    • 인프로세스 범위: 내부 메소드 호출 또는 함수를 나타내며 종료 또는 항목 범위가 아닌 범위입니다.
  • 클라이언트 범위. 클라이언트 범위는 다른 엔티티 또는 외부 종속성에 대한 호출을 나타냅니다. 현재 두 개의 클라이언트 범위 유형이 있습니다.

    • 데이터 저장소 . 클라이언트 범위에 db. 접두사가 있는 속성이 있는 경우(예: db.statement ) 데이터 저장소 범위로 분류됩니다.
    • 외부 . 클라이언트 범위에 http. 접두사가 붙은 속성(예: http.url )이 있거나 다른 프로세스에 하위 범위가 있는 경우 외부 범위로 분류됩니다. 데이터 저장소 쿼리가 아닌 모든 외부 호출에 대한 일반 범주입니다.
  • 추적 지속 기간. 추적의 총 지속 기간은 가장 이른 기간의 시작부터 마지막 범위의 완료까지의 시간에 의해 결정됩니다.

api.newrelic.com/graphiql에서 NerdGraph GraphiQL 탐색기 를 사용하여 범위 관계 데이터를 조회할 수 있습니다.

추적 데이터가 저장되는 방법

추적 데이터를 저장하는 방법을 이해하면 추적 데이터를 조회하는 데 도움이 됩니다.

다음과 같이 추적 데이터를 저장합니다.

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

애플리케이션 간에 추적 컨텍스트가 전달되는 방식

우리는 W3C 추적 컨텍스트 표준을 지원하므로 네트워크와 서비스 간의 트랜잭션을 쉽게 추적할 수 있다. 분산 추적을 사용 할 때 새 에이전트는 서비스의 아웃바운드 요청에 HTTP 헤더를 추가합니다. HTTP 헤더는 다양한 네트워크, 프로세스 및 보안 시스템을 통해 이동할 때 소프트웨어 추적을 식별하고 중요한 정보를 전달한다.

헤더에는 추적 ID, 범위 ID, New Relic 계정 ID, 샘플링 정보와 같은 메타데이터를 나중에 함께 연결하는 데 도움이 되는 정보가 포함되어 있다. 헤더에 대한 자세한 내용은 아래 표를 참조하십시오.

항목

설명

accountId

이것은 당신의 새로운 레릭 계정 ID입니다. 그러나 계정의 사용자 및 새 릴릭 관리만 이 ID를 계정 정보와 어떤 방식으로 연관시킬 수 있습니다.

appId

이것은 추적 헤더를 생성하는 애플리케이션의 애플리케이션 ID입니다. accountId 과 마찬가지로 이 식별자는 해당 계정의 사용자가 아닌 한 정보를 제공하지 않습니다.

guid

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

상위 유형

모바일, 브라우저, Ruby 앱 등에서와 같이 추적 헤더의 소스입니다. 이것은 이 헤더가 첨부된 요청에 의해 트리거된 트랜잭션의 parent.type 속성이 됩니다.

우선순위

샘플링 한계에 도달할 때 샘플링되는 데이터를 판별하는 데 도움이 되는 무작위로 생성된 우선순위 순위 값입니다. 이 값은 요청의 일부인 첫 번째 새 Relic 에이전트에 의해 설정된 부동 소수점 값이므로 추적의 모든 데이터가 동일한 우선순위 값을 갖게 된다.

샘플러

요청에 대해 추적된 데이터를 수집해야 하는지 여부를 에이전트에 알리는 부울 값입니다. 이것은 또한 모든 범위 및 수집된 트랜잭션 데이터 속성으로 추가됩니다. 이 샘플링 프로세스에 대해 더 알고 싶다면 이 가이드에서 더 자세히 설명합니다 .

시간소인

페이로드가 작성된 시간 (밀리초) 입니다.

traceId

단일 요청을 식별하는 데 사용되는 고유 ID (무작위로 생성된 문자열). 이 ID는 상호 및 프로세스 내 경계를 교차합니다. 이 ID를 사용하면 분산 추적에서 범위를 연결할 수 있습니다. 이는 또한 범위 및 트랜잭션 데이터에 대한 속성으로 추가됩니다.

transactionId

트랜잭션 이벤트에 대한 고유 ID 입니다.

신뢰할 수 있는 마운트 키

이는 사용자의 계정과 연관된 다른 계정을 식별하는 데 도움이 되는 키입니다. 따라서 추적이 교차하는 여러 개의 하위 계정이 있는 경우 추적에 포함된 데이터가 신뢰할 수 있는 소스에서 제공되는지 확인하고 사용자가 데이터에 액세스해야 하는 항목을 알려줍니다.

버전 및 데이터 키

이는 주/부 버전을 식별하므로 에이전트가 설정된 변경사항이 있는 버전에서 추적 헤더를 수신하는 경우 해당 헤더를 거부하고 거부 및 이유를 보고할 수 있습니다.

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

도 1

헤더 전파 문제점을 해결하기 위해 두 개의 표준화된 헤더가 필요한 W3C 추적 컨텍스트 스펙을 지원한다. 최신 W3C New Relic 에이전트는 이러한 두 개의 필수 헤더를 보내고 수신하며, 기본적으로 이전 New Relic 에이전트의 헤더를 보내고 받기도 한다.

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

이러한 세 개의 헤더 조합을 사용하면 다음과 같은 유형의 에이전트를 사용하여 인스트루먼트된 서비스 간에 추적을 전파할 수 있습니다.

  • W3C New Relic 에이전트
  • 비W3C New Relic 에이전트
  • W3C 추적 컨텍스트 호환 에이전트

중요

요청이 W3C Trace Context 호환 에이전트에만 해당하는 경우 New Relic 헤더를 끄도록 선택할 수 있습니다. newrelic 헤더 끄기에 대한 자세한 내용은 에이전트 구성 문서를 참조하세요.

아래 시나리오는 다양한 유형의 성공적인 헤더 전파를 표시합니다.

추적 한계

다음은 몇 가지 추적 관련 제한 사항입니다.

제한된 측면

한계

스팬 타임스탬프 값의 최대 기간

20 분. 타임스탬프는 수집 시 현재 시간의 20분 이내이거나 동일한 trace.id 이 있는 마지막 범위가 New Relic에 의해 수신된 시간으로부터 20분 이내여야 합니다.

추적당 최대 스팬

50K

범위당 최대 속성

200

APM 에이전트 인스턴스당 분당 최대 스팬

이동: 1000.

다른 모든 에이전트는 구성할 수 있지만 기본값은 2000입니다.

Trace API 사용과 관련된 추가 규칙은 Trace API 요구 사항 및 제한 을 참조하십시오.

다른 New Relic 제한에 대해서는 Limits 를 참조하십시오.

추적 제한 초과

스팬 속도 제한을 초과하면 NrIntegrationError 이벤트 가 생성됩니다. 이 NRQL 쿼리로 속도 제한 메시지를 얻을 수 있습니다.

SELECT * FROM NrIntegrationError WHERE newRelicFeature = 'Distributed Tracing' AND category = 'RateLimit' AND rateLimitType = 'SpansPerMinute'

제한을 초과할 때 알림을 받으려면 NRQL 경고 를 설정할 수 있습니다.

Copyright © 2022 New Relic Inc.

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