728x90

https://www.jaegertracing.io/

 

Jaeger ?

Jaeger, inspired by Dapper and OpenZipkin, is a distributed tracing platform created by Uber Technologies and donated to Cloud Native Computing Foundation. It can be used for monitoring microservices-based distributed systems:

  • Distributed context propagation
  • Distributed transaction monitoring
  • Root cause analysis
  • Service dependency analysis
  • Performance / latency optimization

ref. https://github.com/jaegertracing/jaeger

  • Jaeger는 마이크로 서비스라는 상호 연결된 소프트웨어 구성 요소를 모니터링하고 문제를 해결하는 데 사용할 수 있는 소프트웨어

 

Distributed Tracing(분산 추적)의 기본 아이디어

  • 실행되는 컨포넌트마다 실행 시간과 추가 정보 수립
  • 수집한 정보를 DB에 저장
  • DB에 저장된 정보를 가지고 컨포넌트간의 연관관계를 재조합해서 Visualization 도구로 표시함

 

Distributed Tracing Specification

OpenTracing

  • CNCF project로 현재 deprecated 됨
  • OpenTracing Observability 백엔드 서버에 telemetry data (metrics, log, traces)를 전송하기 위해 vendor-netural 표준화된 API를 제공함
  • 개발자는 OpenTracing API 표준화에 맞게 직접 라이브러리를 구현해야 함

OpenCensus

  • Google의 오픈 소스 커뮤니티 프로젝트
  • OpenCensus는 개발자가 자기 어플리케이션을 계측해서 백엔드로 telemetry data를 전송할 수 있도록 언어별 라이브러리 세트를 제공함

OpenTelemetry (OTel)

  • OpenTracing + OpenCensus 프로젝트가 하나로 merge됨
  • 2019년에 CNCF Incubation 프로젝트로 채택됨
  • Trace, metric, log 와 같은 원격 측정 데이터를 기기, 생성, 수집 및 내보내기 위한 공급 업체-중립 오픈 소스 관찰 프레임워크

 

MSA 환경과 OpenTracing이란

모놀리식(monolithic)과 MSA(Micro Service Architecture)에 대해서 간단하게 설명하겠습니다. 모놀리식의 경우 하나의 서버가 서비스의 전반적인 기능을 모두 제공합니다. 그로 인해 복잡도가 증가하고 역할을 나누기 어려운 등 많은 문제가 발생하지만, 클라이언트의 요청을 받으면 하나의 스레드에서 모든 요청을 실행하므로 로그를 확인하기 쉽다는 장점이 있습니다. 그에 반해 MSA의 경우에는 각 서비스의 복잡도가 낮아지고 역할 분담이 용이하지만 클라이언트의 요청을 받았을 때 여러 개의 마이크로 서비스 간에 통신이 발생해 로그를 확인하기 어려운 문제가 있습니다.

이런 문제를 해결하기 위한 방법으로 OpenTracing이 알려져 있습니다.

ref. https://engineering.linecorp.com/ko/blog/line-ads-msa-opentracing-zipkin/

  • 마이크로서비스의 복잡한 동작으로 인해, 분산 시스템에서는 문제를 조사하기가 어려움
    • 요청은 독립적으로 동시에 발생할 수 있으며 꼭 순차적으로 발생하지 않음
  • 문제가 생기면, 개발자들은 어떤 마이크로서비스가 그 문제를 야기했는지 확인해야 함
    • 기존의 문제 추적 방식은 요청의 일부에 대한 정보만 제공하므로 마이크로서비스 문제를 해결하는 데 시간이 많이 걸림
  • 마이크로서비스 상호 작용 내의 요청 경로를 따라가거나 추적하기 위한 도구가 필요함

 

Distributed Tracing vs Open Tracing

Distributed Tracing

a method of tracking application requests as they flow from frontend devices to backend services and databases.

  • 프론트 엔드 장치에서 백엔드 서비스 및 데이터베이스로 이동하는 응용 프로그램 요청을 추적하는 방법

Open Tracing

an open-source project aimed at providing vendor-neutral APIs and instrumentation for distributed tracing.

  • 분산 추적을 위한 특정 오픈 소스 프로젝트를 칭함

 

 

Jaeger 주요 개념 및 용어(Terminology)

Span

A span represents a logical unit of work in Jaeger that has an operation name, the start time of the operation, and the duration. Spans may be nested and ordered to model causal relationships.

  • 작업 이름, 작업 시작 시간 및 기간을 가진 논리적 작업 단위
  • 관계를 모형화하기 위해 범위를 내포하고 순서를 지정

Trace

A trace is a data/execution path through the system, and can be thought of as a directed acyclic graph of spans.

  • 시스템을 통과하는 데이터/실행 경로를 나타내는 그래프

 

Jaeger 구성 요소(Components)

Jaeger client libraries: OpenTelemetry Distro (SDK)

  • Jaeger는 Go, JavaScript, Java, Python 등 다양한 프로그래밍 언어로 클라이언트를 제공
  • 개발자는 분산 추적을 위한 소스 코드를 작성하지 않고, SDK에서 제공하는 API를 사용하여 Jaeger Span을 생성

Agent

  • Jaeger Agent는 요청에 대한 추적을 위해 백그라운드에서 실행되는 네트워크 데몬 또는 프로세스
  • UDP를 통해 클라이언트가 전송하는 Span을 수신
  • Agent는 Amazon EKS와 같은 컨테이너 환경에서 클라이언트에 연결을 지원하고, 에이전트 그룹은 Span을 배치 단위로 생성하여 Collector로 trace 정보를 전송

Collector

  • Jaeger Collector는 추적 정보를 검색하기 위한 구성 요소로, trace 정보를 확인 및 처리 그리고 저장함

Storage

  • Collector를 통해 수집한 추적 정보를 저장하기 위한 저장소 (e.g. ES)

Ingester

  • Jaeger는 Kafka를 통해 trace 정보를 전송할 수도 있음
  • 이 때 Ingester를 통해 Kafka에서 trace 정보를 읽고 별도로 저장할 수 있음

Query

  • Query component를 통해 스토리지에 저장된 trace 정보를 쿼리를 통해 조회할 수 있음

Console

 

 

References

728x90

+ Recent posts