다음은 뉴렐릭 분산 추적이 작동하는 방식에 대한 몇 가지 기술적인 세부 사항입니다.
트레이스 샘플링
트레이스 샘플링 방법은 설정과 사용 중인 뉴렐릭 추적 툴에 따라 다릅니다. 예를 들어, OpenTelemetry 같은 서드파티 텔레메트리 서비스를 사용해 데이터가 뉴렐릭에 도착하기 전에 트레이스 샘플링을 구현하고 있을 수 있고, Infinite Tracing을 사용해 모든 트레이스 데이터를 뉴렐릭으로 보내고 뉴렐릭이 샘플링을 하는 경우도 있습니다.
뉴렐릭의 다음과 같은 몇 가지 샘플링 전략을 제공합니다.
헤드 기반 샘플링 (표준 분산 추적)
Infinite Tracing 기능을 제외한 대부분의 추적 툴은 헤드 기반 샘플링 방식을 사용합니다. 이 방식은 트레이스의 모든 스팬이 도착하기 전에 개별 스팬에 필터를 적용합니다. 즉, 필터링 프로세스의 시작(‘헤드’)에서 스팬을 수락할지 여부에 대한 결정이 내려집니다. 뉴렐릭은 이 샘플링 전략을 사용하여 스토리지 및 성능 문제를 방지하고 활동의 대표적인 샘플을 캡처합니다.
트레이스에 첫 번째 스팬이 도착하면 세션이 열리고 90초 동안 유지됩니다. 이후에 해당 트레이스의 새 스팬이 도착할 때마다 만료 시간이 90초로 재설정됩니다. 지난 90초 동안 스팬을 받지 못한 트레이스는 자동으로 종료됩니다. 트레이스 요약과 스팬 데이터는 트레이스가 종료된 경우에만 기록됩니다.
다음은 표준 분산 추적 툴에서 헤드 기반 샘플링을 구현하는 방법에 대한 몇 가지 세부 정보입니다.
테일 기반 샘플링 (Infinite Tracing)
뉴렐릭의 Infinite Tracing 기능은 테일 기반 샘플링 접근 방식을 사용합니다. ‘테일 기반 샘플링’은 트레이스의 모든 스팬이 도착한 후 처리의 끝 부분에서 트레이스 보유 결정이 내려진다는 것을 의미합니다.
Infinite Tracing을 사용하면 애플리케이션 또는 서드파티 텔레메트리 서비스에서 트레이스 데이터를 100% 보낼 수 있으며, Infinite Tracing이 어떤 트레이스 데이터가 가장 중요한지 알아냅니다. 그리고 중요한 트레이스가 보유되도록 샘플링을 구성할 수 있습니다.
중요
Infinite Tracing은 애플리케이션 또는 서드파티 텔레메트리 서비스에서 더 많은 트레이스 데이터를 수집하고 전달할 수 있으므로 결과적으로 송신 비용이 증가할 수 있습니다. 이 솔루션이 귀사에 적합한지 확인할 수 있도록, Infinite Tracing을 구현할 때는 이 비용을 주시할 것을 권합니다.
샘플링 없음
일부 툴은 샘플링을 사용하지 않습니다. 이 툴에 대한 샘플링 세부정보는 다음과 같습니다.
트레이스 한도
뉴렐릭의 데이터 처리 시스템에는 예상치 못한 데이터 급증으로부터 인프라를 보호하기 위한 내부 한도(트레이스 API, 에이전트 스팬, 브라우저 스팬, 모바일 스팬 및 람다 스팬)가 포함되어 있습니다. 이 보호 계층은 플랫폼의 무결성을 유지할 뿐만 아니라 모든 고객들에게 신뢰할 수 있고 일관된 경험을 보장합니다. 한도는 다양한 조건에 따라 조정되지만 미래 지향적인 접근 방식으로 설정됩니다. 사용자와 데이터가 증가함에 따라 뉴렐릭은 인프라 용량을 확장하고 한도를 상향 조정합니다. 이를 통해 뉴렐릭은 전송된 모든 고객 데이터를 수집하고 트레이스 데이터에 대한 명확하고 중단 없는 뷰를 제공할 수 있습니다. 한도에 도달했는지 여부는 한도 UI에서 확인할 수 있습니다.
트레이스 데이터의 구성 방법
분산 트레이스의 구조를 이해하면 다음과 같은 이점이 있습니다.
분산 트레이스는 하나의 ‘상위’ 트레이스를 참조하는 ‘하위’ 트레이스가 있는 트리 모양의 구조를 가지고 있습니다. 이 다이어그램은 트레이스에서 몇 가지 중요한 스팬 관계를 보여줍니다.
이 다이어그램은 분산 추적의 스팬들이 서로 어떻게 관련되어 있는지 보여줍니다.
이 다이어그램은 몇 가지 중요한 개념을 보여줍니다.
Trace root. 트레이스의 첫 번째 서비스나 프로세스를 root 서비스 또는 프로세스라고 합니다.
Process boundaries. 프로세스는 논리적 코드 조각의 실행을 의미합니다. 프로세스의 예로는 백앤드 서비스 또는 Lambda 함수가 있습니다. 프로세스 내의 스팬은 다음 중 하나로 분류됩니다.
- Entry span: 프로세스의 첫 번째 스팬입니다.
- Exit span: a) entry 스팬의 상위 스팬이거나 b)
http.
또는db.
속성이 있어 외부 호출을 나타내는 경우 exit 스팬으로 간주됩니다. - In-process span: 내부 메서드 호출 또는 함수를 나타내며 exit 또는 entry 스팬이 아닌 스팬입니다.
Client spans. 클라이언트 스팬은 다른 엔터티 또는 외부 종속성에 대한 호출을 나타냅니다. 현재 클라이언트 스팬 유형은 두 가지가 있습니다.
- Datastore. 클라이언트 스팬에
db.
접두사가 붙은 속성(예:db.statement
)이 있는 경우 datastore 스팬으로 분류됩니다. - External. 클라이언트 스팬에
http.
접두사가 붙은 속성(예:http.url
)이 있거나 다른 프로세스에 하위 스팬이 있는 경우 external 스팬으로 분류됩니다. 데이터스토어 쿼리가 아닌 외부 호출에 대한 일반적인 카테고리입니다. 외부 스팬에http.url
또는net.peer.name
이 포함되어 있으면 외부 서비스 페이지에 색인이 생성됩니다.
- Datastore. 클라이언트 스팬에
Trace duration. 트레이스의 총 지속 시간을 말하며, 가장 빠른 스팬의 시작부터 마지막 스팬의 완료까지 걸린 시간입니다.
api.newrelic.com/graphiql에서 NerdGraph GraphiQL 탐색기를 사용하여 스팬 관계 데이터를 쿼리할 수 있습니다.
트레이스 데이터 저장 방법
트레이스 데이터가 저장되는 방법을 이해하면 트레이스 데이터를 쿼리하는 데 도움이 될 수 있습니다.
뉴렐릭은 트레이스 데이터 다음으로 저장합니다.
Span
: 스팬은 분산 트레이스의 일부인 연산을 나타냅니다. 스팬이 나타낼 수 있는 연산에는 브라우저 측 상호 작용, 데이터스토어 쿼리, 다른 서비스에 대한 호출, 메서드 레벨 타이밍 및 Lambda 함수가 포함됩니다. 예: HTTP 서비스에서 스팬은 HTTP 요청 시작 시 생성되고 HTTP 서버가 응답을 반환할 때 완료됩니다. 스팬 속성에는 트레이스-관계 세부 정보(예: traceId, guid)를 포함하여 해당 연산에 대한 중요한 정보(예: 기간, 호스트 데이터 등)가 포함되어 있습니다. 스팬 관련 데이터는 스팬 속성을 참조하세요.Transaction
:에이전트가 트레이스의 엔터티를 모니터링하는 경우 해당 엔터티에 대한 요청은 싱글Transaction
이벤트를 생성합니다. 트랜잭션을 통해 트레이스 데이터를 다른 뉴렐릭 기능에 연결할 수 있습니다. 트랜잭션 관련 데이터는 트랜잭션 속성을 참조하세요.- 컨텍스트 메타데이터. 트레이스에 대한 계산과 해당 스팬들 간의 관계를 보여주는 메타데이터를 저장합니다. 이 데이터를 쿼리하려면 NerdGraph GraphiQL 탐색기를 사용하십시오.
애플리케이션 간에 트레이스 컨텍스트가 전달되는 방법
뉴렐릭은 W3C 트레이스 컨텍스트 표준을 지원하므로 네트워크 및 서비스 전반에서 트랜잭션을 더 쉽게 추적할 수 있습니다. 분산 추적을 활성화하면 뉴렐릭 에이전트는 서비스의 아웃바운드 요청에 HTTP 헤더를 추가합니다. HTTP 헤더는 해외 여행 시 여권과 같은 역할을 합니다. HTTP 헤더는 소프트웨어 트레이스들을 식별하고 다양한 네트워크, 프로세스 및 보안 시스템을 통과할 때 중요한 정보를 전달합니다.
헤더에는 트레이스 ID, 스팬 ID, 뉴렐릭 계정 ID 및 샘플링 정보 같은 메타데이터 등 나중에 스팬들을 함께 연결하는 데 도움이 되는 정보도 포함되어 있습니다. 헤더에 대한 자세한 내용은 아래 표를 참조하세요.
항목 | 설명 |
---|---|
| 이것은 뉴렐릭 계정 ID입니다. 그러나 귀하의 계정에 포함된 사용자들과 뉴렐릭 관리자만이 이 ID를 귀하의 계정 정보와 어떤 식으로든 연결할 수 있습니다. |
| 이는 트레이스 헤더를 생성하는 애플리케이션의 애플리케이션 ID입니다. |
| 분산 추적을 사용하면 트레이스의 각 작업 세그먼트가 |
Parent type | 모바일, 브라우저, Ruby 앱 등에서 트레이스 헤더의 소스입니다. 이는 이 헤더가 연결된 요청에 의해 트리거된 트랜잭션의 |
Priority | 무작위로 생성된 우선순위 값으로 샘플링 한도에 도달할 때 샘플링되는 데이터를 결정하는 데 도움을 줍니다. 이는 요청의 일부인 첫 번째 뉴렐릭 에이전트가 설정한 부동 값이므로 트레이스의 모든 데이터는 동일한 우선순위 값을 가집니다. |
Sampled | 요청에 대해 추적 데이터를 수집해야 하는지 여부를 에이전트에 알리는 부울 값입니다. 이는 또한 수집된 모든 스팬 및 트랜잭션 데이터에 속성으로 추가됩니다. |
Timestamp | 페이로드가 생성된 Unix 타임스탬프(밀리초)입니다. |
| 프로세스 간 및 프로세스 내 경계를 넘는 단일 요청을 식별하는 데 사용되는 고유 ID(무작위로 생성된 문자열)입니다. 이 ID를 사용해 분산 트레이스에서 스팬들을 연결할 수 있습니다.이 ID는 또한 스팬 및 트랜잭션 데이터의 속성으로 추가됩니다. |
| 트랜잭션 이벤트의 고유 식별자입니다. |
Trusted account key | 이는 귀하의 계정과 연결된 다른 계정을 식별하는 데 도움이 되는 키입니다. 따라서 트레이스가 교차하는 하위 계정이 여러 개인 경우 트레이스에 포함된 모든 데이터가 신뢰할 수 있는 소스에서 온 것임을 확인할 수 있으며, 데이터에 액세스할 수 있는 사용자를 알려줍니다. |
Version and data key | 이는 주/부 버전을 식별하므로 에이전트가 현재 버전에서 주요 변경 사항이 있는 버전에서 트레이스 헤더를 수신하면 해당 헤더를 거부하고 거부 결정과 그 이유를 보고할 수 있습니다. |
이 헤더 정보는 헤더 형식을 인식하지 못하는 미들웨어나 에이전트에 의해 진행이 중지되지 않는 한 트레이스의 각 스팬을 따라 전달됩니다. (그림 1 참조)
그림 1
헤더 전파 문제를 해결하기 위해, 뉴렐릭은 두 개의 표준화된 헤더가 필요한 W3C 추적 컨텍스트 사양을 지원합니다. 최신 W3C 뉴렐릭 에이전트는 다음 두 가지 필수 헤더를 전송 및 수신하며, 기본적으로 이전 뉴렐릭 에이전트의 헤더도 전송 및 수신합니다.
- W3C(
traceparent
): 전체 트레이스(트레이스 ID) 및 호출 서비스(스팬 ID)를 식별하는 기본 헤더입니다. - W3C(
tracestate
): 공급업체별 정보를 전달하고 추적이 있었던 위치를 추적하는 필수 헤더입니다. - 뉴렐릭(
newrelic
): 이전 뉴렐릭 에이전트와의 역호환성을 유지하기 위해 여전히 전송되는 고유한 원본 헤더입니다.
이 세 가지 헤더의 조합을 통해, 다음 유형의 에이전트로 계측된 서비스 전반으로 트레이스를 전파할 수 있습니다.
- W3C 뉴렐릭 에이전트
- W3C가 아닌 뉴렐릭 에이전트
- W3C 트레이스 컨텍스트 호환 에이전트
중요
요청이 W3C 트레이스 컨텍스트 호환 에이전트에만 영향을 주는 경우 뉴렐릭 헤더를 끌 수 있습니다. newrelic
헤더 끄기에 대한 자세한 내용은 에이전트 구성 문서를 참조하세요.
아래 시나리오는 성공적인 헤더 전파의 다양한 유형을 보여줍니다.