2장. 분산 추적 아키텍처
2.1. 분산 추적 아키텍처
사용자가 애플리케이션에서 작업을 수행할 때마다 응답을 생성하기 위해 참여하도록 다양한 서비스를 필요로 할 수 있는 아키텍처에 의해 요청이 실행됩니다. Red Hat OpenShift 분산 추적 플랫폼을 사용하면 애플리케이션을 구성하는 다양한 마이크로 서비스를 통해 요청 경로를 기록하는 분산 추적을 수행할 수 있습니다.
분산 추적은 분산 트랜잭션에 있는 전체 이벤트 체인을 이해하기 위해 일반적으로 다양한 프로세스 또는 호스트에서 실행되는 다양한 작업 단위에 대한 정보를 결합하는 데 사용되는 기술입니다. 개발자는 분산 추적을 사용하여 대규모 마이크로 서비스 아키텍처에서 호출 흐름을 시각화할 수 있습니다. 직렬화, 병렬 처리 및 대기 시간 소스를 이해하는 데 유용합니다.
Red Hat OpenShift 분산 추적 플랫폼은 마이크로 서비스의 전체 스택에서 개별 요청 실행을 기록하고 이를 추적으로 제공합니다. 추적은 시스템을 통한 데이터/실행 경로입니다. 엔드 투 엔드 추적은 하나 이상의 기간으로 구성됩니다.
기간은 작업 이름, 작업 시작 시간, 기간 및 잠재적으로 태그 및 로그가 있는 Red Hat OpenShift 분산 추적 플랫폼의 논리적 작업 단위를 나타냅니다. 기간은 중첩되어 인과 관계를 모델링하도록 주문될 수 있습니다.
2.1.1. 분산 추적 개요
서비스 소유자로서 분산 추적을 사용하여 서비스 아키텍처에 대한 정보를 수집하도록 서비스를 조정할 수 있습니다. Red Hat OpenShift 분산 추적 플랫폼을 사용하여 최신 클라우드 네이티브, 마이크로서비스 기반 애플리케이션의 구성 요소 간의 상호 작용을 모니터링, 네트워크 프로파일링 및 문제 해결에 사용할 수 있습니다.
분산 추적 플랫폼을 사용하면 다음 기능을 수행할 수 있습니다.
- 분산 트랜잭션 모니터링
- 성능 및 대기 시간 최적화
- 근본 원인 분석 수행
2.1.2. Red Hat OpenShift 분산 추적 플랫폼 기능
Red Hat OpenShift 분산 추적 플랫폼은 다음과 같은 기능을 제공합니다.
- Kiali와의 통합 - 올바르게 구성된 경우 Kiali 콘솔에서 분산 추적 플랫폼 데이터를 볼 수 있습니다.
- 높은 확장성 - 분산 추적 플랫폼 백엔드는 단일 장애 지점이 없으며 비즈니스 요구 사항에 따라 확장할 수 있도록 설계되었습니다.
- 분산 컨텍스트 전파 - 다양한 구성 요소의 데이터를 함께 연결하여 완전한 엔드 투 엔드 추적을 만들 수 있습니다.
- Zipkin과의 역호환성 - Red Hat OpenShift 분산 추적 플랫폼에는 Zipkin의 드롭인 대체 기능으로 사용할 수 있는 API가 있지만 Red Hat은 이 릴리스에서 Zipkin 호환성을 지원하지 않습니다.
2.1.3. Red Hat OpenShift 분산 추적 플랫폼 아키텍처
Red Hat OpenShift 분산 추적 플랫폼은 함께 작동하여 추적 데이터를 수집, 저장 및 표시하는 여러 구성 요소로 구성됩니다.
Red Hat OpenShift 분산 추적 플랫폼 (Tempo) - 이 구성 요소는 오픈 소스 Grafana Tempo 프로젝트를 기반으로 합니다.
- 게이트웨이는 인증, 권한 부여 및 요청을 배포 또는 쿼리 프런트 엔드 서비스로 처리합니다.
-
배포자 - 배포자는 Jaeger, OpenTelemetry 및 Zipkin을 비롯한 여러 형식으로 기간을 허용합니다. 이 경로는
traceID
를 해시하고 분산 일관된 해시 링을 사용하여 Ingesters로 구성됩니다. - Ingester - Ingester는 추적을 블록으로 배치하고, bloom 필터와 인덱스를 생성한 다음 모두 백엔드로 플러시합니다.
- 쿼리 프런트 엔드 - 쿼리 프런트 엔드는 들어오는 쿼리에 대한 검색 공간을 분할합니다. 그런 다음 검색 쿼리가 Queriers로 전송됩니다. 쿼리 프런트 엔드 배포는 Tempo 쿼리 사이드카를 통해 Jaeger UI를 노출합니다.
- Querier - Querier는 Ingesters 또는 백엔드 스토리지에서 요청된 추적 ID를 찾을 책임이 있습니다. 매개변수에 따라 Ingesters를 쿼리하고 백엔드에서 오브젝트 스토리지의 검색 블록으로 Ingesters를 가져올 수 있습니다.
- Cryo stator - 백엔드 스토리지로 또는 백엔드 스토리지에서 차단하여 총 블록 수를 줄입니다.
Red Hat build of OpenTelemetry - 이 구성 요소는 오픈 소스 OpenTelemetry 프로젝트를 기반으로 합니다.
- OpenTelemetry Collector - OpenTelemetry 수집기는 원격 분석 데이터를 수신, 처리 및 내보내는 벤더와 무관한 방법입니다. OpenTelemetry 수집기는 오픈 소스 관찰 기능 데이터 형식(예: Jaeger 및 Prometheus)을 지원하여 하나 이상의 오픈 소스 또는 상용 백엔드로 전송합니다. 수집기는 원격 분석 데이터를 내보내는 기본 위치 조정 라이브러리입니다.
Red Hat OpenShift 분산 추적 플랫폼 (Jaeger) - 이 구성 요소는 오픈 소스 Jaeger 프로젝트를 기반으로 합니다.
- 클라이언트 (Jaeger 클라이언트, Tracer, Reporter, 조정된 애플리케이션, 클라이언트 라이브러리)- 분산 추적 플랫폼(Jaeger) 클라이언트는 OpenTracing API의 언어별 구현입니다. 수동으로 또는 이미 OpenTracing과 통합된 Camel(Fuse), Spring Boot(RHOAR), MicroProfile(RHOAR/T©tail), Wildfly(EAP) 등의 다양한 기존 오픈 소스 프레임워크를 사용하여 분산 추적에 대해 애플리케이션을 조정하는 데 사용할 수 있습니다.
- 에이전트 (Jaeger agent, Server Queue, Processor Workers) - 분산 추적 플랫폼(Jaeger) 에이전트는 UDP(User Datagram Protocol)를 통해 전송되는 기간을 수신 대기하는 네트워크 데몬입니다. 에이전트는 조정된 애플리케이션과 동일한 호스트에 배치되어야 합니다. 일반적으로 Kubernetes와 같은 컨테이너 환경에서 사이드카를 보유하여 수행됩니다.
- Jaeger 수집기 (Collector, Queue, Workers) - Jaeger 에이전트와 유사하게 Jaeger 수집기는 기간을 수신하여 처리를 위해 내부 큐에 배치합니다. 이를 통해 Jaeger 수집기는 기간이 스토리지로 이동할 때까지 기다리지 않고 클라이언트/에이전트로 즉시 돌아갈 수 있습니다.
- 스토리지(데이터 저장소) - 수집기에는 영구 스토리지 백엔드가 필요합니다. Red Hat OpenShift 분산 추적 플랫폼 (Jaeger)에는 스토리지 범위를 위한 플러그형 메커니즘이 있습니다. Red Hat OpenShift distributed tracing platform(Jaeger)은 Elasticsearch 스토리지를 지원합니다.
- 쿼리(쿼리 서비스) - 쿼리는 스토리지에서 추적을 검색하는 서비스입니다.
- Ingester (Ingester Service) - Red Hat OpenShift 분산 추적 플랫폼은 수집기와 실제 Elasticsearch 백업 스토리지 간의 버퍼로 Apache Kafka를 사용할 수 있습니다. Ingester는 Kafka에서 데이터를 읽고 Elasticsearch 스토리지 백엔드에 쓰는 서비스입니다.
- Jaeger 콘솔 - Red Hat OpenShift 분산 추적 플랫폼 (Jaeger) 사용자 인터페이스를 사용하면 분산 추적 데이터를 시각화할 수 있습니다. 검색 페이지에서 추적을 찾고 개별 추적을 구성하는 기간의 세부 사항을 확인할 수 있습니다.