Jaeger란 무엇인가요?

Jaeger는 마이크로서비스라는 상호 연결된 소프트웨어 구성 요소를 모니터링하고 문제를 해결하는 데 사용할 수 있는 소프트웨어입니다. 몇 가지 마이크로서비스가 하나의 소프트웨어 기능을 완료하기 위해 서로 통신합니다. 문제가 발생한 경우 문제의 원인을 파악할 수 있도록 개발자는 Jaeger를 사용해 해당 마이크로서비스 상호 작용에서 일련의 이벤트를 시각화할 수 있습니다. Jaeger는 일련의 마이크로서비스 상호 작용 내의 요청 경로를 따라가거나 추적하기 때문에 Jaeger Tracing이라고도 불립니다.   

Jaeger가 중요한 이유는 무엇인가요?

과거에는 단일 코드 기반에 여러 기능이 한데 번들화된 모놀리스 구조로 소프트웨어가 설계되었습니다. 예를 들어 음식 주문 앱을 설계하기 위해 음식 메뉴, 식당 및 결제 시스템을 모두 단일 소프트웨어 단위로 번들화했다고 가정해보겠습니다. 이러한 유형의 소프트웨어 설계로 인해 솔루션이 복잡해지고 유지 관리하기가 어렵게 되었습니다. 개발자가 특정 영역에서 코드를 변경하면 전체 시스템에 영향을 미쳐 변경 사항을 관리하기가 번거롭고 시간이 많이 걸립니다. 이러한 문제를 해결하기 위해, 아키텍처 설계는 더욱 모듈화되었습니다.

마이크로서비스

현대적 애플리케이션은 마이크로서비스라는 작은 독립된 단위의 모음으로 기능합니다. 예를 들어 현대적 음식 주문 앱은 다음과 같은 부분으로 구성될 수 있습니다.

  • 고객의 위치를 감지하는 지리적 위치 서비스 
  • 주문을 받아 음식점에 보내는 서비스  
  • 여러 결제 옵션이 있는 결제 게이트웨이

 

각 마이크로서비스는 독립적인 애플리케이션으로 작동하며, 자체 데이터베이스와 로직에 액세스할 수 있습니다. 마이크로서비스는 웹 애플리케이션처럼 요청과 응답을 사용하여 서로 통신합니다. 마이크로서비스 기반 시스템을 분산 시스템이라고도 합니다.

마이크로서비스 아키텍처 문제 해결

마이크로서비스의 복잡한 동작으로 인해, 분산 시스템에서는 문제를 조사하기가 어렵습니다. 예를 들어 모듈식 앱에서 음식을 주문하면 여러 마이크로서비스에 대한 여러 개의 요청이 트리거될 수 있습니다. 이러한 요청은 독립적으로 동시에 발생할 수 있으며 꼭 순차적으로 발생하지는 않습니다. 음식 주문에 문제가 생기면, 개발자들은 어떤 마이크로서비스가 그 문제를 야기했는지 확인해야 합니다. 기존의 문제 추적 방식은 요청의 일부에 대한 정보만 제공하므로 마이크로서비스 문제를 해결하는 데 시간이 많이 걸립니다.

 

Jaeger는 IT 팀이 일련의 이벤트 전반에 대한 가시성과 명확성을 확보하기 위해 사용하는 소프트웨어 도구로, 문제를 더 빨리 해결하고 고객 경험을 개선할 수 있도록 해줍니다.

Jaeger는 어디에 사용되나요?

개발자는 몇 가지 방법으로 분산 시스템 성능을 높이는 데 Jaeger를 사용합니다. 다음은 몇 가지 예입니다.

분산 트랜잭션 모니터링

Jaeger에는 마이크로서비스 간의 데이터 이동을 모니터링하는 기능이 있습니다. 개발자는 사용자 경험에 영향을 미치기 전에 문제를 감지하고 해결하기 위해 사전 예방적 접근 방식을 취할 수 있습니다.

지연 시간 최적화

Jaeger 분석을 통해 애플리케이션 속도를 저해하는 마이크로서비스의 병목 지점을 찾을 수 있습니다. 개발자는 마이크로서비스의 동작을 검사하고 속도를 높이는 방법을 찾기 위해 Jaeger를 사용합니다.

근본 원인 분석

마이크로서비스 아키텍처에서는 하나의 문제가 다른 문제로 이어질 수 있습니다. 개발자는 Jaeger를 사용하여 애플리케이션에서 일련의 관련 문제의 시작점을 찾을 수 있습니다.

서비스 종속성 분석

서비스 종속성이란 애플리케이션이 몇 가지 구성 요소의 실행에 의존한다는 것을 의미합니다. 예를 들어 내비게이션 앱은 모바일 앱의 위치 서비스에 의존합니다. 개발자는 여러 마이크로서비스 간의 복잡한 관계를 이해하기 위해 Jaeger를 사용합니다. 

분산 컨텍스트 전파

분산 컨텍스트 전파는 애플리케이션이 설명 정보를 데이터와 함께 전달하는 방법입니다. 이를 통해 개발자는 마이크로서비스 성능을 전반적으로 평가할 수 있습니다. 예를 들어 Jaeger는 주문 요청에 고객 이름을 태깅하여 개발자가 요청 경로를 특정 고객과 연관 지을 수 있도록 합니다. 

Jaeger는 어떻게 작동하나요?

Jaeger는 분산 추적의 원리에 따라 작동하고 OpenTracing 프레임워크를 사용합니다.

분산 추적

분산 추적은 마이크로서비스 간의 이벤트 시퀀스를 모니터링하는 소프트웨어 기술입니다. 이 기술은 모든 연결을 추적하고 애플리케이션의 요청 경로를 시각화하는 차트와 그래프를 제공합니다. 분산 추적 도구인 Jaeger는 각 요청마다 고유 식별자를 할당하고 특정 서비스가 요청을 처리할 때 정보를 수집하여 요청의 이동을 추적합니다. 

OpenTracing 

OpenTracing은 다양한 현대적 소프트웨어 시스템에서 정확한 턴키 분산 추적을 실현할 수 있는 표준을 제공하는, 오픈 소스 또는 무료로 제공되는 프레임워크입니다. 예를 들어 마이크로서비스 간에 이동하는 모니터링 대상 정보의 구조를 정의하기 위한 공통 표준을 제공합니다. Jaeger는 OpenTracing을 사용하여 마이크로서비스 데이터를 수집, 저장, 관리, 분석 및 시각화하는 완전한 솔루션을 제공합니다.  

OpenTracing 데이터 모델

OpenTracing 데이터 모델은 여러 구성 요소의 데이터를 연결하는 기본 정의를 제공합니다. 이 모델에 사용되는 두 가지 주요 용어는 스팬트레이스입니다.

스팬 

스팬은 분산 추적 시스템에서 수행되는 작업의 단일 논리적 단위입니다. 각 스팬에는 다음과 같은 구성 요소가 있습니다.

  • 작업 이름
  • 시작 시간과 중지 시간
  • 개발자가 스팬을 분석하는 데 도움이 되는 태그 또는 값
  • 마이크로서비스가 생성하는 메시지를 저장하는 로그
  • 스팬 컨텍스트 또는 스팬에 대한 추가 설명

트레이스

트레이스는 동일한 프로세스에 속하는 하나 이상의 스팬의 모음으로, 특정 시간 동안 발생하는 이벤트를 나타냅니다. 동일한 트레이스에 속하는 스팬은 동일한 트레이스 ID를 공유합니다. 예를 들어 고객이 음식을 주문할 때 생성되는 트레이스에는 다음과 같은 스팬이 포함됩니다. 

  • 고객이 주문 제출
  • 결제가 처리됨
  • 주문 목록이 식당에 제출됨
  • 음식 수령
  • 음식 제공

Jaeger의 구성 요소에는 무엇이 있나요?

Jaeger 분산 추적 플랫폼은 다음 구성 요소로 구성됩니다. 

Jaeger 클라이언트 

Jaeger 클라이언트에는 Go, JavaScript, Java, Python, Ruby 및 PHP와 같은 프로그래밍 언어로 작성된 OpenTracing API의 언어별 구현이 포함되어 있습니다.

개발자는 분산 추적을 위한 소스 코드를 작성하지 않고, 이러한 API를 사용하여 Jaeger 스팬을 만듭니다. 

Jaeger 에이전트

Jaeger 에이전트는 다른 프로세스에 필요한 기능을 수행하기 위해 백그라운드에서 지속적으로 실행되는 네트워크 데몬 또는 프로세스입니다. 네트워크를 통해 메시지를 교환할 수 있는 통신 방법의 일종인 사용자 데이터그램 프로토콜(UDP)을 통해 클라이언트가 전송하는 스팬을 수신합니다.  

에이전트는 Amazon Elastic Kubernetes Service와 같은 컨테이너 환경에서 클라이언트에 연결합니다. 에이전트 그룹은 스팬을 배치 단위로 생성하여 수집기로 보냅니다. 이렇게 하면 트레이스 정보를 Jaeger 백엔드로 능동적으로 보내지 않고도 애플리케이션을 실행할 수 있습니다. 

Jaeger 수집기

Jaeger 수집기는 Jaeger 수집기에서 트레이스를 검색하는 소프트웨어 구성 요소로, 트레이스를 확인하고 처리하며 데이터베이스에 저장합니다.

스토리지

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

인제스터

Jaeger를 배포하는 방법 중 하나는 애플리케이션이 정보 스트림을 저장하고 검색하는 분산 시스템인 Kafka에 트레이스 데이터를 전송하는 것입니다. 인제스터는 Kafka에서 트레이스 데이터를 읽고 별도로 저장하는 모듈입니다. 

쿼리

쿼리 서비스는 데이터베이스에서 트레이스 정보를 검색합니다. 개발자는 쿼리를 사용하여 특정 시간, 태그, 기간 및 작업이 포함된 트레이스를 찾습니다. 

Jaeger Console

Jaeger Console은 트레이스를 보고 분석하는 데 사용할 수 있는 사용자 인터페이스를 제공하는 소프트웨어 프로그램으로, 트레이스 데이터를 그래프와 차트로 표시합니다. 

개발자들은 Jaeger를 어떻게 사용하나요?

개발자는 애플리케이션을 만들 때 Jaeger 클라이언트 라이브러리를 사용하여 스팬을 생성합니다. 프로그램에 코드를 추가하여 트레이스 데이터를 생성하는 식으로 계측된 애플리케이션이라는 것을 만듭니다. 계측된 애플리케이션은 다음을 자동으로 생성합니다.

 

  1. 스팬 ID, 트레이스 ID, 태그, 로그 및 스팬 컨텍스트를 포함하는 스팬 
  2. 모든 요청의 트레이스

 

개발자는 Jaeger Console을 사용하여 이 분산 추적 데이터를 검색하고, 필터링하고, 시각화하고 분석합니다. Jaeger UI 소프트웨어를 사용하여 마이크로서비스의 프로세스 기간, 오류 및 로그와 같은 자세한 정보를 볼 수 있습니다. 

Jaeger 샘플링 전략은 무엇인가요?

계측된 애플리케이션은 애플리케이션이 실행될 때마다 추적 데이터를 자동으로 전송합니다. 이 추적 데이터를 사용하여 애플리케이션 성능을 측정할 수 있습니다. 이를 원격 측정 데이터라고도 합니다. 과도한 원격 측정 데이터로 인해 Jaeger 백엔드에 과부하가 발생하는 것을 방지하기 위해, Jaeger 구현에 샘플링 전략을 구성하여 이 데이터를 필터링하거나 샘플링할 수 있습니다. 다음은 몇 가지 샘플링 전략입니다.

  • 상수 샘플링은 모든 유형의 트레이스에 대해 동일한 수의 샘플을 수집합니다.
  • 확률적 샘플링은 특정 백분율에 도달할 때까지 표본을 무작위로 수집합니다.
  • 속도 제한 샘플링은 정해진 초당 샘플 수를 검색합니다.
  • 적응형 샘플링은 일정 기간 동안 일정 수의 트레이스를 달성하기 위해 샘플링 속도를 자동으로 조정합니다.

AWS App Mesh란 무엇인가요?

AWS App Mesh는 무거운 작업을 수행하여 마이크로 서비스 기반 분산 시스템을 보다 쉽게 관리할 수 있도록 하는 서비스 메시 또는 소프트웨어 인프라입니다. AWS App Mesh는 다음을 수행합니다. 

  • 애플리케이션에 대한 일관된 엔드 투 엔드 가시성과 고가용성을 제공합니다.
  • 텔레메트리 데이터를 내보내도록 각 서비스를 구성하고, 애플리케이션 전반에 일관된 통신 제어 로직을 구현합니다. 
  • 개발자가 안전한 클라우드 애플리케이션을 구축할 수 있도록 네트워크 트래픽 제어를 제공합니다. 

분산 추적 요구 사항을 위한 독립형 솔루션으로 AWS App Mesh를 사용할 수 있습니다. 또한 마이크로 서비스 통신을 모니터링, 로그 또는 추적하는 데 사용할 수 있는 Jaeger와 같은 몇 가지 AWS가 아닌 타사 도구를 지원합니다.

지금 AWS 계정을 생성하여 App Mesh에서 Jaeger를 시작하세요.

AWS에서 Jaeger 다음 단계

제품 관련 추가 리소스 확인
AWS App Mesh에 대해 자세히 알아보기 
무료 계정에 가입

AWS 프리 티어에 즉시 액세스할 수 있습니다. 

가입 
콘솔에서 구축 시작

AWS 관리 콘솔에서 AWS로 구축을 시작하세요.

로그인