2023-06-01 00:59:55

요즘 jaeger 추적 시스템이 수신한 span을 AWS opensearch에 저장하려고 하는데 관련하여 기반 지식이 부족한 것 같아서 공부하면서 정리해보려고 합니다. 

 

Jaeger 추적 시스템은 스팬을 수신하여 영구 스토리지 백엔드 또는 데이터베이스에 저장합니다. 영구 스토리지란 컴퓨터의 전원이 꺼진 경우에도 저장된 데이터가 그대로 유지되는 것을 의미합니다. 예를 들어 개발자는 스팬을 저장하고 수용하는 영구 스토리지로서 AWS OpenSearch Service를 사용합니다. [4]

OpenTelemetry란? 

OpenTelemetry는 traces, logs, metrics 수집하여 시스템을 관찰 가능하게 만들고자 하는 프로젝트입니다. 한 마디로 Observability를 높이기 위한 것입니다. 내부 동작 상황을 알 수 없는 시스템에 대하여 traces, logs, metrics를 수집하여 이해할 수 있도록 돕는 것입니다. 

 

traces(추적)는 앱에 요청이 들어왔을 때 어떤 일이 일어나는지에 대한 큰 그림을 제공합니다. 애플리케이션이 단일 데이터베이스가 있는 모놀리식이든 정교한 서비스 메시이든 관계없이 애플리케이션에서 요청이 취하는 전체 "경로"를 이해하려면 trace가 필수적입니다.

 

logs는 시간(timestamp)이 찍힌 텍스트 기록을 의미합니다. 로그는 독립적인 데이터 소스이지만 Span에 연결될 수도 있습니다. OpenTelemetry에서 trace 또는 metric이 아닌 모든 데이터는 log입니다. 

 

metrics는 앱의 상태 및 동작을 측정하는 수치 데이터입니다. 예를 들어, CPU 사용률, Memory 사용률, 요청 처리량, 응답 시간 등이 metric으로 측정될 수 있습니다. metric은 시간에 따른 추세를 파악하고 성능 모니터링, 자원 사용 추적 등에 사용됩니다. 

 

추가 용어 설명

Span

Span은 OpenTelemetry의 기본 빌딩 블럭입니다. 원자(atom)라고 볼 수 있습니다. Span은 GET/POST 요청 또는 DB insert 작업과 같이 우리의 시스템에서 발생하는 하나의 action입니다. 

 

Trace

Trace(추적)는 앱의 여러 서비스에서 처리되는 단일 요청의 진행을 나타내는 Span들의 트리입니다. 

 

Exporter

Span을 생성했다면 이것을 백엔드로 보낼 필요가 있습니다. 인메모리, Jaeger 또는 콘솔 아웃풋이 될 수도 있습니다. Exporter는 백엔드로 데이터 전송을 처리합니다.

 

 

참고자료

[1] https://www.aspecto.io/blog/getting-started-with-opentelemetry-python/   

[2] https://opentelemetry.io/docs/what-is-opentelemetry/ 

[3] https://binux.tistory.com/150  

[4] https://aws.amazon.com/ko/what-is/jaeger/