티스토리 뷰

카테고리 없음

Jaeger Tracing 이란

미니대왕님 2023. 10. 23. 10:55

1탄 Istio Kiali 사용법 알아봅시다.

2탄 Jaeger Tracing: 초보자를 위한 친절한 가이드

Jaeger Tracing 란

Jaeger는 분산형 추적 장치이자 추적 시각화를 위한 선도적인 오픈 소스 입니다.

 
  • Index 

1. Jaeger  사용법
2. Jaeger 추적이 무엇인가?
3. Jaeger 분산추적이 무엇인가?
4. Jaeger 아키텍처
5. Jaeger 추적 및 OpenTelemetry
6. 에피소드 모음(영상강의)

 

1. Jaeger  사용법

Jaeger UI는 분산 서비스를 더 잘 디버깅하고 이해할 수 있는 강력한 도구입니다. 

 

 

검색 결과 섹션:

 

이 예에서는 jaeger-query 서비스를 쿼리하기로 선택했습니다. 내 흔적을 타임라인이나 목록으로 볼 수 있어요. 

원하는 추적을 클릭하여 드릴다운합니다.특정 추적 보기:문제가 있을 수 있다고 생각되는 특정 추적을 찾아 클릭하면 다음과 같은 화면이 표시됩니다.

여기서는 실행 시간, 호출된 호출, 지속 시간, http 상태 코드와 같은 특정 속성, 경로 경로(http 호출의 경우) 등에 대한 특정 정보를 찾을 수 있습니다.

 

실제 데이터를 가지고 자유롭게 실험하고 조사해 보세요.

 

고급 개념: 샘플링

샘플링은 그 자체로 복잡한 주제입니다. Jaeger에서 샘플링 결정은 항상 SDK에서 헤드 기반 샘플링을 통해 이루어집니다.

SDK의 샘플링 전략

(더 이상 사용되지 않는) Jaeger SDK에는 4가지 샘플링 모드가 있습니다.

  • 원격: 기본값이며 샘플링 전략이 Jaeger 백엔드에 의해 제어됨을 Jaeger SDK에 알리는 데 사용됩니다.
  • 상수: 모든 추적을 취하거나 아무것도 취하지 않습니다. 그 사이에는 아무것도 없습니다. 모두에 대해 1을 받고 없음에 대해 0을 받습니다.
  • 속도 제한: 초당 샘플링할 트레이스 수를 선택합니다.
  • 확률: 샘플링할 트레이스의 백분율을 선택합니다. 예를 들어, 샘플링할 트레이스 10개 중 1개를 선택하려면 0.1을 선택합니다.

 

OpenTelemetry 분산 추적 영삭으로 익히기

 

OpenTelemetry를 시작하기 위해 샘플을 준비했습니다. 참고하시길 바랍니다. OpenTelemetry Bootcamp

  • 에피소드 1: OpenTelemetry 기초
  • 에피소드 2: 코드 통합(로그, 측정항목, 추적)
  • 에피소드 3: 프로덕션 + 수집기에 배포
  • 에피소드 4: 대량 샘플링 및 처리
  • 에피소드 5: 맞춤형 계측
  • 에피소드 6: OpenTelemetry를 사용한 테스트

 

질문이 있으시면 언제든지 Twitter @thetomzach 로 연락하시고 #OpenTelemetry-Bootcamp 슬랙 채널에 참여하여 관찰 가능성에 대한 최신 정보를 얻으세요.

 

 

2. Jaeger 추적이란 무엇입니까?

 

스팬은 애플리케이션(HTTP 요청, DB 호출 등)의 작업 단위를 나타내며 Jaeger의 가장 기본적인 작업 단위범위에는 작업 이름, 시작 시간, 기간이 필요함추적은 상위/하위 관계로 연결된 범위의 컬렉션/목록입니다(범위의 방향성 비순환 그래프로도 생각할 수 있음). 추적은 서비스 및 기타 구성 요소를 통해 요청이 전파되는 방식을 지정합니다.

 

 

3.분산 추적이란 무엇입니까? 

소개: Jaeger가 속한 포괄적인 용어인 분산 추적을 이해가 중요

 

분산 아키텍처(모놀리스와 반대)는 문제의 근본 원인을 찾기가 훨씬 더 어렵습니다. 이러한 문제를 해결하려면 어떤 서비스가 어떤 매개변수를 다른 서비스나 구성 요소(DB, 큐 등)에 보냈는지 확인해야 합니다.분산 추적은 시스템의 다양한 부분에서 데이터를 수집하고 시스템에 대해 원하는 관찰 기능을 활성화함으로써 이를 달성하는 데 도움이 됩니다. 

분산 서비스에 대한 '콜스택'이라고 생각하면 됩니다. 또한 추적은 시각적 도구이므로 시스템을 시각화하여 서비스 간의 관계를 더 잘 이해할 수 있으므로 문제를 더 쉽게 조사하고 찾아낼 수 있습니다.

4. Jaeger  아키텍처

 

이는 몇 가지 부분으로 구성되어 있으며, 아래에서 모든 내용을 설명합니다.

  • 계측 SDK: 추적 데이터를 캡처하기 위해 애플리케이션 및 프레임워크에 통합된 라이브러리입니다. 

  • Jaeger 에이전트: Jaeger 에이전트는 UDP를 통해 Jaeger 클라이언트로부터 수신된 스팬을 수신 대기하는 네트워크 데몬

  • Jaeger 수집기: Jaeger 수집기는 Jaeger 에이전트로부터 추적을 수신하고 검증 및 변환을 수행하며 선택한 스토리지 백엔드에 저장

  • 스토리지 백엔드: Jaeger는 범위를 저장하기 위해 다양한 스토리지 백엔드를 지원합니다. 
    ( 지원 : In-Memory, Cassandra, Elasticsearch 및 Badger 단일 인스턴스 수집기 배포용 )

  • Jaeger 쿼리: Jaeger 스토리지 백엔드에서 추적을 검색하고 Jaeger UI에 액세스할 수 있도록 하는 서비스

  • Jaeger UI: 추적을 시각화하고 분석할 수 있는 React 애플리케이션입니다. (시스템 디버깅)

  • 수집기: 수집기는 수집기와 스토리지 백엔드 사이의 버퍼로 Kafka를 사용하는 경우에만 관련이 있습니다. 
     Kafka로부터 데이터를 수신하고 이를 스토리지 백엔드로 수집하는 역할을 담당( 자세한 내용은 공식 Jaeger Tracing 문서)

5. Jaeger 추적 및 OpenTelemetry

OpenTracing과 OpenCensus가 병합되어 OpenTelemetry를 형성 되었으며, OpenTelemetry가 무엇인지,

해당 구성요소가 무엇인지, 어떻게 사용할 수 있는지에 대해 완전히 이해하려면 이 가이드를 읽어보세요 .

예제) Jaeger 추적 Python 

다음은 범위를 생성하여 Jaeger로 보내는 Python 예제입니다. 자동 계측을 사용하고 Jaeger 내보내기를 계속 사용할 수도 있습니다(위에 표시된 것처럼 Jaeger를 로컬로 실행한다고 가정).

# jaeger_tracing.py
from opentelemetry.exporter.jaeger.thrift
import JaegerExporter
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessorTrace.set_tracer_provider(
   TracerProvider(
       자원=Resource.create({SERVICE_NAME: "my-hello-service"})
   )
)jaeger_exporter = JaegerExporter(
   에이전트_호스트_이름="localhost",
   에이전트_포트=6831,
)Trace.get_tracer_provider().add_span_processor(
   BatchSpanProcessor(jaeger_exporter)
)추적자 = 추적.get_tracer(__name__)Tracer.start_as_current_span("rootSpan") 사용:
   Tracer.start_as_current_span("childSpan") 사용:
           print("Hello world!")
 
 

Jaeger UI에서는 다음과 같이 표시됩니다.

Python에서 OpenTelemetry를 처음부터 직접 사용하는 방법을 알아보려면 이 가이드를 읽어보세요 .

Jaeger tracing 용어

범                   위 : 시스템에서 발생하는 작업 단위(작업/작업)를 나타냅니다. 시간에 따라 지속되는 HTTP 요청 또는
                             데이터베이스 작업(X에서 시작하고 Y밀리초의 지속 시간을 가짐) 일반적으로 이는 다른 범위의 상위
                             및/또는 하위 범위가 됩니다.

추                  적 :  시스템의 다양한 서비스 및 구성 요소에 의해 처리되는 요청의 진행 상황을 나타내는 범위의 트리/
                             목록입니다.  예를 들어 user-service에 API 호출을 보내면 users-db에 대한 DB 쿼리가 발생했습니다. 
                             분산 서비스를 위한 '호출 스택'입니다.


Observability    :
외부 출력을 기반으로 시스템의 내부 상태를 얼마나 잘 이해할 수 있는지를 나타내는
                            척도입니다. 로그, 측정항목, 추적이 있으면 '관찰 가능성의 3가지 기둥'이 있습니다.


OpenTelemetry
: OpenTelemetry는 도구, API 및 SDK 모음을 제공하는 CNCF(Cloud Native Computing Function)의
                             오픈  소스 프로젝트입니다. OpenTelemetry를 사용하면 단일 사양으로 추적, 로그, 지표를 자동으로
                             수집하고 생성할 수 있습니다.

OpenTracing     : 분산 추적을 위한 오픈 소스 프로젝트입니다. 더 이상 사용되지 않으며 OpenTelemetry에 "병합"
                             되었습니다. OpenTelemetry는 OpenTracing에 대한 이전 버전과의 호환성을 제공합니다.

댓글