>  기사  >  백엔드 개발  >  OpenTelemetry 및 Signoz를 사용하여 스팬 링크로 추적 분석 마스터하기(실용 가이드)

OpenTelemetry 및 Signoz를 사용하여 스팬 링크로 추적 분석 마스터하기(실용 가이드)

Barbara Streisand
Barbara Streisand원래의
2024-10-24 03:23:31200검색

이 튜토리얼의 목적

이 튜토리얼의 목적은 OpenTelemetry의 스팬 링크에 대한 실용적이고 이해하기 쉬운 가이드를 제공하는 것입니다.

개발자, 특히 복잡하고 비동기적인 시스템을 사용하는 개발자가 스팬 링크가 무엇인지, 추적 시 전통적인 상위-하위 관계와 어떻게 다른지, 더 나은 추적 상관 관계에 중요한 이유를 이해하도록 돕는 것이 목표입니다.

이 가이드를 마치면 스팬 링크를 효과적으로 사용하여 분산 시스템 내의 상호 작용을 추적하고 관찰 가능성과 디버깅을 향상시키는 데 필요한 기술을 습득하게 됩니다.

분산 추적에 대한 간략한 소개

과거 애플리케이션은 일반적으로 모놀리식이었습니다. 즉, 모든 프로세스나 기능이 하나의 서버에서 단일 단위로 실행된다는 의미입니다. 이러한 애플리케이션을 모니터링하는 것은 간단했습니다.

예: 문제가 발생한 경우 해당 서버의 로그를 보고 문제를 식별할 수 있습니다. 그러나 마이크로서비스의 등장으로 이러한 단순성이 바뀌었습니다.

이제 최신 애플리케이션은 함께 작동하는 수십 또는 수백 개의 소규모 독립 서비스로 구성되는 경우가 많습니다. 예를 들어 모바일 앱을 사용하여 주문하는 경우 사용자 인증 처리, 결제 처리, 재고 관리, 확인 이메일 전송을 위한 별도의 서비스가 있을 수 있습니다.

이러한 서비스는 항상 동일한 서버에 상주하지 않으며 인터넷을 통해 통신할 수도 있으므로 애플리케이션과 상호 작용할 때 발생하는 상황을 추적하는 것이 더 복잡해집니다.

여기서 분산 추적이 등장합니다. 분산 추적을 복잡한 애플리케이션의 다양한 서비스를 통해 이동할 때 단일 요청을 따르는 방법으로 생각하십시오. 복잡한 시스템을 통해 요청의 여정을 추적합니다.

최신 애플리케이션에서는 요청이 서로 다른 시스템에서 실행되는 여러 서비스를 통해 전달되는 경우가 많습니다. 분산 추적은 이 여정을 시각화하여 병목 현상과 오류를 더 쉽게 식별하는 데 도움이 됩니다.

프로세스의 각 단계 사이에 점을 연결하여 각 부분에 소요된 시간과 문제가 발생한 위치를 보여주는 탐정의 지도와 같습니다. 추적을 보면 요청이 다양한 서비스를 통해 어떻게 이동했는지에 대한 타임라인이 표시되므로 속도 저하, 오류 또는 실패를 더 쉽게 식별할 수 있습니다.

코드 저장소

이 튜토리얼의 코드 저장소는 다음과 같습니다.
[https://github.com/Noibisjunior/Span-Links-in-OpenTelemetry]

현대적인 관찰 가능성에서 OpenTelemetry의 역할

OpenTelemetry는 이러한 가시성을 구현하는 핵심 요소입니다. 이는 개발자가 애플리케이션에서 로그, 지표, 추적과 같은 데이터를 수집할 수 있는 오픈 소스 관찰 프레임워크입니다. 서비스 내부에서 발생하는 상황에 대한 자세한 정보를 캡처하기 위한 도구 세트 역할을 합니다.

현대적인 관찰 가능성의 세계에서 OpenTelemetry는 분산 애플리케이션의 성능과 상태를 이해하는 데 도움이 됩니다. 다양한 서비스에서 데이터를 수집하여 SigNoz와 같은 도구로 전송하여 무슨 일이 일어나고 있는지 시각화하는 다리 역할을 합니다. 따라서 병목 현상을 식별하고, 오류를 추적하고, 애플리케이션이 원활하게 실행되도록 보장하는 데 OpenTelemetry가 매우 중요합니다.

분산 추적 기능이 포함된 OpenTelemetry를 사용하면 애플리케이션의 작동 방식을 전체적으로 파악할 수 있으므로 문제를 더 쉽게 진단하고 사용자 경험을 개선할 수 있습니다.

OpenTelemetry에서 추적을 위한 구성 요소로서 범위의 중요성

소프트웨어, 특히 분산 시스템이 복잡해짐에 따라 내부 작동 방식을 이해하는 것이 어려운 작업이 되었습니다. 문제를 쉽게 해결하기 위해 OpenTelemetry의 범위가 필요합니다.

스팬이란 무엇입니까?

스팬은 OpenTelemetry 추적 시스템의 기본 작업 단위입니다. 이는 애플리케이션 내에서 발생하는 단일 작업 또는 이벤트입니다.

작업 중에 발생한 일, 소요 시간, 성공 여부 등 관련 세부정보를 캡처합니다.

예를 들어, 애플리케이션이 사용자 요청을 처리한다고 가정해 보세요.

  • 요청이 들어오면 OpenTelemetry는 수신되는 요청을 나타내는 범위를 생성합니다.
  • 요청이 데이터베이스 쿼리를 트리거하면 해당 데이터베이스 상호 작용을 나타내기 위해 또 다른 범위가 생성됩니다.
  • 앱이 다른 서비스를 호출하면 다른 서비스가 이를 추적합니다.

Mastering Trace Analysis with Span Links using OpenTelemetry and Signoz (A Practical Guide)

범위의 주요 속성:

  1. 이름: 작업을 설명하는 라벨(예: "사용자 데이터 가져오기")
  2. 시작 및 종료 타임스탬프: 작업이 시작되고 종료된 시간입니다.
  3. 상위 스팬: 이 작업을 시작한 스팬입니다.
  4. 태그: 추가 메타데이터(예: HTTP 상태 코드, 오류 메시지)

스팬이 함께 작동하여 Trace를 생성하는 방법

스팬은 개별적으로도 유용하지만 함께 작용하여 트레이스를 형성할 때 효과적입니다.

추적은 시스템을 통해 흐르는 요청 또는 작업의 전체 여정을 나타내는 범위 모음입니다.

사용자 요청 예시로 돌아가 보겠습니다.

요청이 시스템에 들어오면 추적이 시작되고 루트 스팬이 생성됩니다. 요청이 데이터베이스 쿼리를 트리거하면 데이터베이스 상호 작용 스팬이 루트 스팬에 연결되어 동일한 프로세스의 일부임을 보여줍니다.

다른 서비스를 호출하기 위한 추가 범위가 추적에 추가됩니다. 이 추적을 보면 요청이 시스템의 여러 부분을 통해 어떻게 이동했는지에 대한 큰 그림을 볼 수 있습니다. 발생한 일뿐만 아니라 애플리케이션의 다양한 부분이 어떻게 연결되어 있는지 이해하는 데 도움이 됩니다.

스팬이 중요한 이유는 무엇입니까?

  1. 문제 파악: 스팬은 문제가 발생한 부분을 확대하는 데 도움이 됩니다. 요청이 느린 경우, 스팬은 데이터베이스 쿼리, 네트워크 호출 또는 지연을 유발하는 프로세스의 다른 부분인지 여부를 알려줄 수 있습니다. 예상보다 오래 걸린 스팬을 확인할 수 있어 병목 현상을 더 쉽게 찾을 수 있습니다.

  2. 컨텍스트 구축: 각 범위에는 시작 시간, 종료 시간, 사용자 정의 라벨(속성)과 같은 컨텍스트 정보가 포함됩니다. 이 데이터는 요청과 관련된 특정 사용자 ID나 실행된 쿼리 등 시스템의 특정 순간에 무슨 일이 일어나고 있는지에 대한 통찰력을 제공합니다.

  3. 관계 만들기: 스팬은 종종 상위-하위 구조로 서로 관계를 갖습니다. 루트 범위는 상위 범위이고 후속 범위는 하위 범위입니다. 이 구조는 이벤트가 발생한 순서와 이벤트가 서로 어떻게 의존하는지 확인하는 데 도움이 됩니다. 이는 앱에서 운영의 가계도를 보는 것과 같습니다.

  4. 분산 시스템 디버깅: 마이크로서비스가 포함된 애플리케이션(서로 다른 서비스가 요청의 서로 다른 부분을 처리하는 경우)의 경우 범위는 특히 중요합니다. 서비스가 다른 서버나 다른 데이터 센터에서 실행되는 경우에도 서비스 간에 이동하는 요청을 추적하는 데 도움이 됩니다. 이는 서비스 간의 복잡한 상호 작용을 이해하는 데 핵심입니다.

OpenTelemetry의 스팬 링크 이해

스팬 링크란 무엇입니까?

여러 서비스가 함께 작동하여 사용자 요청을 처리하는 분산 시스템의 세계에서 추적은 탐정의 지도와 같으며 요청이 이러한 서비스를 통해 이동하는 경로를 보여줍니다. 이 여정의 각 활동을 스팬(span)이라고 하며, 전체 여정을 트레이스(trace)라고 합니다.

전통적으로 스팬은 상위-하위 관계를 사용하여 연결됩니다. 이를 가계도처럼 상상해 보세요. 상위 범위는 프로세스(예: 다른 서비스에 대한 요청)를 시작하고 하위 범위는 결과로 발생하는 활동(예: 요청을 처리하는 서비스)을 나타냅니다. 이는 요청의 흐름을 나타내는 간단한 방법입니다.

그러나 두 범위가 관련되어 있지만 상위-하위 계층 구조에 완벽하게 맞지 않으면 어떻게 될까요? 여기가 스팬 링크가 들어오는 곳입니다.

스팬 링크를 사용하면 관련되어 있지만 직접적인 상위-하위 관계가 없는 두 스팬을 연결할 수 있습니다. 이는 분산 시스템의 두 활동 간의 "참조" 또는 "바로 가기"와 같습니다.

예를 들어, 이메일 보내기, 데이터베이스 쓰기 등 여러 독립적인 프로세스를 트리거하는 요청을 하는 사용자가 있다고 가정해 보겠습니다. 이러한 프로세스는 서로의 하위 활동이 아닙니다. 그들은 나란히 일어난다. 스팬 링크를 이용하면 이메일 전송 스팬과 데이터베이스 쓰기 스팬이 부모-자식 개념으로 직접 연결되지는 않더라도 동일한 초기 사용자 요청과 관련되어 있음을 나타낼 수 있습니다.

스팬 링크와 상위-하위 관계의 차이점

부모-자녀 관계: 이는 일련의 간단한 이벤트입니다. 사용자가 데이터베이스(하위)에 레코드 생성을 트리거하는 요청(상위)을 보냅니다. 하위 범위는 상위 범위 없이는 존재하지 않으므로 직접적인 결과가 됩니다.

스팬 링크: 이는 어떤 맥락에서 관련되어 있지만 직접적인 일련의 작업을 따르지 않는 활동 사이에 점선을 그리는 것과 비슷합니다. 그들은 "하나가 다른 하나를 직접적으로 유발하지는 않았지만 이러한 것들은 서로 관련되어 있습니다"라고 말할 수 있는 방법을 제공합니다. 스팬 링크는 상호 작용하지만 엄격하게 계층적이지는 않은 병렬 활동이나 이벤트를 나타내는 데 이상적입니다.

복잡한 비동기 시스템에서 스팬 링크의 중요성

스팬 링크는 이벤트 흐름이 항상 명확한 상위-하위 경로를 따르지 않는 복잡하고 비동기적인 시스템에서 특히 중요합니다. 실제로 어떻게 사용할 수 있는지에 대한 몇 가지 시나리오는 다음과 같습니다.

비동기식 워크플로:

백그라운드 작업(예: 보고서 생성)으로 시작하는 사용자 요청을 상상해 보세요. 초기 요청은 완료되지만 보고서 생성은 백그라운드에서 계속됩니다.

스팬 링크를 구현하면 직접적인 상위-하위 패턴을 따르지 않더라도 초기 요청 범위를 백그라운드 작업 범위와 연결할 수 있습니다.

마이크로서비스 통신:

마이크로서비스 아키텍처에서 서비스는 엄격히 계층적이지 않은 방식으로 서로 통신하는 경우가 많습니다.

예를 들어 사용자 작업으로 인해 여러 서비스가 트리거되어 데이터의 여러 부분을 동시에 처리할 수 있습니다. 스팬 링크를 사용하면 더 넓은 워크플로우의 일부로 이러한 독립적이고 관련된 스팬을 추적할 수 있습니다.

일괄 처리: 배치의 각 항목이 자체 범위를 생성하는 데이터 배치를 처리하는 경우 범위 링크를 사용하여 이러한 범위를 원래 일괄 프로세스에 다시 연결할 수 있습니다.

이를 통해 배치의 전체 수명 주기를 더 쉽게 추적하고 개별 항목이 기본 프로세스와 어떻게 연관되는지 이해할 수 있습니다.

전제 조건: OpenTelemetry 및 Signoz를 사용하여 스팬 링크를 구성하는 데 필요한 도구 및 라이브러리

  1. OpenTelemetry SDK: OpenTelemetry SDK(소프트웨어 개발 키트)는 애플리케이션에서 추적, 지표, 로그와 같은 관찰 가능성 데이터를 수집하기 위한 툴킷입니다.
  • 코드와 관찰 시스템 사이의 가교 역할을 하여 애플리케이션이 어떻게 실행되는지에 대한 자세한 정보를 수집할 수 있습니다.

  • OpenTelemetry를 애플리케이션 작업의 스냅샷을 캡처하는 "카메라"로 상상해 보십시오. SDK를 앱에 통합하면 이 카메라를 배치하여 뒤에서 일어나는 일을 기록하게 됩니다.

  • 애플리케이션의 프로그래밍 언어(예: Python, Java, JavaScript)로 SDK를 설치해야 합니다.

(2) SigNoz 설정: SigNoz는 OpenTelemetry로 수집한 데이터를 시각화하고 분석할 수 있는 오픈 소스 관찰 도구입니다.

  • SigNoz를 OpenTelemetry 설정으로 캡처한 영상을 볼 수 있는 "제어실"로 생각해보세요. 여기에서 애플리케이션의 추적 및 측정항목을 명확하게 파악할 수 있습니다.

  • SigNoz 인스턴스를 설정해야 하며, 일반적으로 Docker 또는 Kubernetes를 사용하여 로컬 시스템이나 서버에 배포해야 합니다.

  • SigNoz는 원시 데이터를 그래프 및 차트와 같은 시각화로 변환하여 애플리케이션 내부에서 일어나는 일을 더 쉽게 이해할 수 있도록 도와줍니다.

추적, 범위 및 계측 코드에 대한 기본 지식:

추적:

간단히 말하면 추적은 사용자 또는 요청이 애플리케이션과 상호 작용할 때 발생하는 "스토리"와 같습니다. 초기 요청부터 관련될 수 있는 모든 서비스 및 데이터베이스에 이르기까지 해당 상호 작용의 결과로 발생하는 모든 작업을 캡처합니다.

사용자가 웹사이트의 버튼을 클릭한다고 상상해 보세요. 추적은 다음에 일어날 일의 모든 단계를 기록합니다.

범위:

스팬은 트레이스 스토리 내의 '챕터'입니다. 각 범위는 추적의 일부로 발생하는 특정 작업을 나타냅니다.

예를 들어 추적이 사용자 요청의 전체 프로세스를 캡처하는 경우 범위는 데이터베이스 쿼리 또는 외부 API 호출과 같은 단일 단계를 나타낼 수 있습니다.

각 기간에는 시작 및 종료 시간이 있어 각 단계에 소요된 시간에 대한 정확한 세부정보를 제공합니다. 이렇게 하면 속도 저하나 오류를 더 쉽게 찾아낼 수 있습니다.

OpenTelemetry로 코드 계측:

계측은 관측 가능성 데이터를 수집하기 위해 애플리케이션에 코드를 추가하는 프로세스입니다. OpenTelemetry로 코드를 계측하면 일반적으로 추적 및 범위를 생성하려는 위치에 몇 줄의 코드를 추가하는 작업이 포함됩니다.

예를 들어 데이터베이스 쿼리를 계측하여 소요 시간을 확인하거나 사용자 로그인 프로세스를 계측하여 성능을 추적할 수 있습니다.

OpenTelemetry SDK는 코드에 직접 통합할 수 있는 라이브러리와 기능을 제공하여 이를 더 쉽게 만듭니다. 기계 부품에 추적기를 부착하여 부품이 어떻게 함께 작동하는지 모니터링하는 것과 같다고 생각하세요.

Python에서 스팬 링크 생성: 단계별 예

파이썬의 기본 예제를 살펴보겠습니다. OpenTelemetry SDK를 사용하여 두 개의 스팬을 생성하고 서로 연결하겠습니다.

from opentelemetry import trace
from opentelemetry.trace import Link
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import SimpleSpanProcessor, ConsoleSpanExporter

# Set up the tracer provider and span exporter

trace.set_tracer_provider(TracerProvider())
tracer = trace.get_tracer(__name__)
span_processor = SimpleSpanProcessor(ConsoleSpanExporter())
trace.get_tracer_provider().add_span_processor(span_processor)

# Create the first span, simulating some work being done 

with tracer.start_as_current_span("span_one") as span_one:
    span_one.add_event("Processing order")
 order_id = "12345" # Imagine this as an order ID we're processing

# Create a second span with a link to the first span 

with tracer.start_as_current_span("span_two", links=[Link(span_one.get_span_context())]) as span_two:
        span_two.add_event("Updating order status")

# Simulate some additional work here

  print("Order ID: {order_id} has been updated.")

print("Tracing complete")

위 Python 코드 조각 설명

  • 추적 공급자 설정:
    위의 코드 조각은 범위 생성을 관리하는 추적 프로그램 공급자로 시작됩니다.

  • 이는 OpenTelemetry가 범위를 처리하는 방법을 아는 데 필수적입니다. 또한 범위 데이터를 콘솔에 인쇄하도록 SimpleSpanProcessor 및 ConsoleSpanExporter를 구성합니다. 이는 생성되는 범위 유형과 연결 방법을 확인하는 데 도움이 됩니다
    .

(2) 첫 번째 스팬(span_one) 생성:

tracer.start_as_current_span 메소드를 사용하여span_one이라는 범위를 생성합니다. 이는 주문 처리와 같은 모든 작업을 나타낼 수 있습니다.

이 범위 내에 특정 시점에 무슨 일이 일어나고 있는지 나타내는 이벤트 처리 명령을 추가합니다.

다음 범위에서 사용될 주문 ID(order_id = "12345")도 시뮬레이션합니다.

(3) 링크를 사용하여 두 번째 범위 생성(span_two):

여기서는 주문 상태 업데이트와 같이 다르지만 관련된 작업을 나타내기 위해span_two라는 또 다른 범위를 시작했습니다.
link 매개변수를 확인하세요. Link(span_one.get_span_context())를 사용하여span_two와span_one사이에링크를만듭니다.

이것은 OpenTelemetry에 "이러한 작업은 상위-하위 작업은 아니지만 서로 관련되어 있습니다"라고 알려줍니다.

span_two 내부에는 주문 상태 업데이트라는 또 다른 이벤트를 추가하고 데이터베이스에서 주문 상태 업데이트와 같은 일부 작업을 시뮬레이션했습니다.

(4) 출력:

이 코드를 실행하면 두 범위 사이의 링크와 함께 두 범위를 모두 보여주는 ConsoleSpanExporter의 출력이 콘솔에 표시됩니다. 이는 추적에서 두 범위가 서로 어떻게 관련되어 있는지 시각화하는 데 도움이 됩니다.

주의해야 할 일반적인 오류 및 오류 해결 방법.

(1) 누락된 범위 컨텍스트:

오류:span_one.get_span_context()를 호출하지 않고 링크를 생성하려고 하면 OpenTelemetry에서 링크를 생성하기 위해 유효한 범위 컨텍스트가 필요하기 때문에 오류가 발생합니다.

해결책: 링크를 생성할 때 항상 범위 컨텍스트를 전달하고 있는지 확인하세요. 활성 범위의 .get_span_context() 메서드를 사용하세요.

(2) 시작되지 않거나 종료된 스팬 연결:

오류: 시작되지 않았거나 이미 종료된 범위에 대한 링크를 생성하려고 하면 링크가 인식되지 않는 문제가 발생할 수 있습니다.

해결책: 링크를 생성할 때 연결하려는 범위가 활성화되어 있는지 확인하세요. 이미 종료된 범위로 링크를 생성하면 추적 표시 방식에 예상치 못한 동작이 발생할 수 있습니다.

(3) 성능 고려 사항:

성능 문제: 스팬을 너무 많이 연결하면 추적 데이터의 오버헤드가 증가하여 트래픽이 많은 시스템에서 성능이 저하될 수 있습니다.

해결책: 링크를 선택적으로 사용하세요. 시각화하거나 분석해야 하는 의미 있는 관계가 있는 경우에만 링크 범위가 사용됩니다. 트래픽이 많은 환경에서는 OpenTelemetry의 샘플링 옵션을 사용하여 캡처되는 추적 데이터의 양을 줄일 수 있습니다.

스팬 링크 시각화를 위한 SigNoz 구성

분산 시스템으로 작업할 때는 시스템의 다양한 부분이 어떻게 통신하는지 이해하는 것이 중요합니다. OpenTelemetry의 스팬 링크는 직접적인 상위-하위 관계가 없을 수 있는 추적을 연결하는 데 중요한 역할을 하며 서비스를 통해 요청이 어떻게 흐르는지 더 명확하게 보여줍니다.

Mastering Trace Analysis with Span Links using OpenTelemetry and Signoz (A Practical Guide)

스팬 링크 시각화가 중요한 이유

결제가 성공하면 알림 서비스를 실행하는 결제 서비스가 애플리케이션에 있다고 상상해 보세요. 이러한 서비스는 상호 작용하는 동안 직접적인 상위-하위 관계를 공유하지 않을 수 있습니다.

스팬 링크를 사용하면 이러한 상호 작용을 연결하여 결제로 인해 알림이 실행되었음을 표시할 수 있습니다. 이러한 링크를 시각화하면 독립적인 서비스가 실시간으로 어떻게 상호 연관되는지 더 큰 그림으로 볼 수 있습니다.

이러한 스팬 링크를 시각화하도록 SigNoz를 설정하면 애플리케이션 동작에 대한 더 깊은 통찰력을 얻을 수 있습니다.

스팬 링크를 캡처하고 볼 수 있도록 SigNoz를 구성하는 방법은 다음과 같습니다

1단계: SigNoz가 제대로 설치되었는지 확인

  • 시작하려면 로컬 환경이나 클라우드 설정에서 SigNoz가 설치되어 실행되고 있는지 확인하세요. SignNoz는 Docker를 사용하여 배포하여 쉽게 설정할 수 있습니다.
  • 아직 설치하지 않았다면 운영 체제에 맞는 공식 SigNoz 설치 가이드를 따르세요. [https://signoz.io/docs/introduction]
  • 설치가 완료되면 웹 브라우저에서 http://localhost:3301로 이동하여 SigNoz UI에 액세스하세요. 이 인터페이스에서는 설정을 구성하고 스팬 링크를 포함한 추적 데이터를 시각화할 수 있습니다.

2단계: 스팬 링크를 포함하도록 OpenTelemetry SDK 구성

다음 단계는 OpenTelemetry SDK가 범위 링크 데이터를 SigNoz로 전송하도록 구성하는 것입니다. 애플리케이션 코드에서 추적 논리의 일부로 범위 링크를 추가해야 합니다.

다음은 Python 프로그래밍 언어로 작성된 코드 조각입니다.

from opentelemetry import trace
from opentelemetry.trace import Link
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import SimpleSpanProcessor, ConsoleSpanExporter

# Set up the tracer provider and span exporter

trace.set_tracer_provider(TracerProvider())
tracer = trace.get_tracer(__name__)
span_processor = SimpleSpanProcessor(ConsoleSpanExporter())
trace.get_tracer_provider().add_span_processor(span_processor)

# Create the first span, simulating some work being done 

with tracer.start_as_current_span("span_one") as span_one:
    span_one.add_event("Processing order")
 order_id = "12345" # Imagine this as an order ID we're processing

# Create a second span with a link to the first span 

with tracer.start_as_current_span("span_two", links=[Link(span_one.get_span_context())]) as span_two:
        span_two.add_event("Updating order status")

# Simulate some additional work here

  print("Order ID: {order_id} has been updated.")

print("Tracing complete")

위 Python 코드 스니펫에 대한 설명

애플리케이션에서 추적을 처리하고 스팬 프로세서를 설정하도록 TracerProvider를 구성하는 것부터 시작했습니다.

OTLPSpanExporter는 OTLP 프로토콜

을 사용하여 SigNoz의 백엔드로 스팬을 보내는 데 사용됩니다.

SigNoz를 로컬에서 실행하지 않는 경우 http://localhost:4317을 적절한 SigNoz 엔드포인트로 바꾸세요.

두 번째, 스팬 및 링크 생성:

초기 작업(예: 사용자 요청)을 나타내는 parent_span이 먼저 생성됩니다. get_span_context()를 사용하여 parent_span의 컨텍스트를 추출합니다. 이를 통해 다른 범위를 여기에 연결할 수 있습니다.

linked_span이 생성되고 parent_span의 컨텍스트를 참조하기 위해 Link가 추가됩니다. 이는 linked_span이 parent_span의 직계 하위가 아니지만 관련이 있음을 의미합니다.

마지막으로 SigNoz로 데이터 전송:

스팬 데이터는 BatchSpanProcessor를 사용하여 처리되며, 이를 통해 스팬 데이터가 SigNoz로 효율적으로 전송됩니다.

trace.get_tracer_provider().shutdown()은 프로그램이 종료되기 전에 나머지 범위가 모두 플러시되고 내보내졌는지 확인하기 위해 마지막에 호출됩니다.

3단계: 추적 데이터를 위한 SigNoz 구성 업데이트

  • SigNoz가 스팬 링크를 캡처하도록 하려면 SigNoz 수집기 구성 파일에서 일부 설정을 변경해야 할 수도 있습니다.
  • 컬렉터는 OpenTelemetry에서 추적 데이터를 받아 SigNoz의 백엔드로 보내는 중개자 역할을 합니다.
  • 종종 otel-collector-config.yaml이라는 이름의 OpenTelemetry Collector 구성 파일을 찾습니다.
  • 추적 데이터가 올바르게 전달되도록 프로세서 및 내보내기 섹션을 추가하거나 업데이트하세요. 예를 들어:
from opentelemetry import trace
from opentelemetry.trace import SpanKind, Link
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor, ConsoleSpanExporter
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter

# Set up the tracer provider and add a span processor

trace.set_tracer_provider(TracerProvider())
tracer = trace.get_tracer(__name__)

# Configure the exporter to send spans to SigNoz using the OTLP exporter

otlp_exporter = OTLPSpanExporter(endpoint="http://localhost:4317", insecure=True)
span_processor = BatchSpanProcessor(otlp_exporter)
trace.get_tracer_provider().add_span_processor(span_processor)

# Create two spans, linking the second span to the context of the first

with tracer.start_as_current_span("parent_span") as parent_span:

# Simulate some logic for the parent_span
    print("Parent span is active")

# Get the context of the parent span
parent_context = parent_span.get_span_context()

# Create a linked span and add a link to the parent span's context

with tracer.start_as_current_span(
        "linked_span",
        links=[Link(parent_context)]
    ) as linked_span:

 # Simulate some logic for the linked_span
        print("Linked span is active")

# Ensure all spans are flushed before exiting the application

trace.get_tracer_provider().shutdown()

4단계: SigNoz에서 스팬 링크 시각화

애플리케이션이 스팬 링크와 함께 추적 데이터를 SigNoz에 전송하면 다음을 통해 이러한 링크를 시각화할 수 있습니다.

  • SigNoz UI에서 Trace Explorer 열기.
  • 모니터링하고 있는 서비스(결제 서비스, 알림 서비스 등)와 관련된 흔적을 검색해 보세요.
  • 추적 세부정보 보기에는 범위 간의 링크를 포함하여 범위의 그래픽 표현이 표시됩니다. 연결된 스팬은 직접적인 상위-하위 라인을 공유하지 않는 노드 간의 추가 연결로 나타납니다.
  • 이 시각화는 서비스가 엄격한 계층 관계를 갖고 있지 않은 경우에도 요청이 시스템을 통해 어떻게 흐르는지 확인하는 데 도움이 됩니다.

5단계: 명확성을 위해 보기 조정

완벽한 시각화를 위해서는 다음 사항에 유의해야 합니다.

  • SigNoz의 필터를 사용하여 추적 데이터의 범위를 특정 서비스나 기간으로 좁힐 수 있습니다.
  • 특정 상호 작용을 자주 모니터링하는 경우 특정 범위 링크를 추적하는 사용자 정의 대시보드를 만드세요.
  • 연결된 범위가 관련 서비스 간의 지연과 같은 잠재적인 문제를 나타낼 때 이를 알리도록 SigNoz에서 경고를 설정합니다.

다음 단계
이 튜토리얼에서는 스팬 링크를 사용하여 분산 시스템 내 상호 작용을 추적하는 방법을 배웠습니다

다음 튜토리얼에서는 스팬 링크 사용 모범 사례 및 고급 사용 사례를 학습합니다

위 내용은 OpenTelemetry 및 Signoz를 사용하여 스팬 링크로 추적 분석 마스터하기(실용 가이드)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.