22.3. 분산 추적 설정
사용자 정의 리소스에 추적 유형을 지정하여 Kafka 구성 요소에서 분산 추적을 활성화합니다. 메시지 엔드 투 엔드 추적을 위한 Kafka 클라이언트의 장치 추적기.
분산 추적을 설정하려면 다음 절차를 순서대로 수행합니다.
- MirrorMaker, Kafka Connect 및 Kafka 브리지의 추적을 활성화합니다.
클라이언트의 추적을 설정합니다.
추적기가 있는 장비 클라이언트:
22.3.1. 사전 요구 사항 링크 복사링크가 클립보드에 복사되었습니다!
분산 추적을 설정하기 전에 Jaeger 백엔드 구성 요소가 OpenShift 클러스터에 배포되었는지 확인합니다. OpenShift 클러스터에 Jaeger를 배포하기 위해 Jaeger Operator를 사용하는 것이 좋습니다.
배포 지침은 Jaeger 설명서 를 참조하십시오.
Streams for Apache Kafka 이외의 애플리케이션 및 시스템에 대한 추적을 설정하는 것은 이 콘텐츠의 범위를 벗어납니다.
22.3.2. MirrorMaker, Kafka Connect 및 Kafka Bridge 리소스에서 추적 활성화 링크 복사링크가 클립보드에 복사되었습니다!
분산 추적은 MirrorMaker, MirrorMaker 2, Kafka Connect 및 Apache Kafka Bridge용 Streams에서 지원됩니다. 추적기 서비스를 지정하고 활성화하도록 구성 요소의 사용자 지정 리소스를 구성합니다.
리소스에서 추적을 활성화하면 다음 이벤트가 트리거됩니다.
- 인터셉터 클래스는 구성 요소의 통합 소비자 및 생산자에서 업데이트됩니다.
- MirrorMaker, MirrorMaker 2 및 Kafka Connect의 경우 추적 에이전트는 리소스에 정의된 추적 구성을 기반으로 추적기를 초기화합니다.
- Kafka 브리지의 경우 리소스에 정의된 추적 구성을 기반으로 하는 추적기가 Kafka Bridge 자체에 의해 초기화됩니다.
OpenTelemetry를 사용하는 추적을 활성화할 수 있습니다.
MirrorMaker 및 MirrorMaker 2의 추적
MirrorMaker 및 MirrorMaker 2의 경우 소스 클러스터에서 대상 클러스터로 메시지가 추적됩니다. 추적 데이터는 MirrorMaker 또는 MirrorMaker 2 구성 요소를 입력하고 남겨진 메시지를 기록합니다.
Kafka Connect의 추적
Kafka Connect의 경우 Kafka Connect에서 생성하고 사용하는 메시지만 추적됩니다. Kafka Connect와 외부 시스템 간에 전송된 메시지를 추적하려면 해당 시스템의 커넥터에서 추적을 구성해야 합니다.
Kafka 브리지의 추적
Kafka 브리지의 경우 Kafka 브리지에서 생성하고 사용하는 메시지가 추적됩니다. Kafka 브리지를 통해 메시지를 보내고 수신하기 위해 클라이언트 애플리케이션에서 들어오는 HTTP 요청도 추적됩니다. 엔드 투 엔드 추적을 사용하려면 HTTP 클라이언트에서 추적을 구성해야 합니다.
프로세스
각 KafkaMirrorMaker,KafkaMirrorMaker2,KafkaConnect 및 KafkaBridge 리소스에 대해 다음 단계를 수행합니다.
spec.template속성에서 tracer 서비스를 구성합니다.- 추적 환경 변수를 템플릿 구성 속성으로 사용합니다.
-
OpenTelemetry의 경우
spec.tracing.type속성을opentelemetry로 설정합니다.
OpenTelemetry를 사용한 Kafka Connect의 추적 구성 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenTelemetry를 사용한 MirrorMaker의 추적 구성 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenTelemetry를 사용한 MirrorMaker 2의 추적 구성 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow OpenTelemetry를 사용한 Kafka 브리지의 추적 구성 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 리소스를 생성하거나 업데이트합니다.
oc apply -f <resource_configuration_file>
oc apply -f <resource_configuration_file>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
22.3.3. Kafka 클라이언트의 추적 초기화 링크 복사링크가 클립보드에 복사되었습니다!
OpenTelemetry에 대한 추적기를 초기화한 다음 분산 추적을 위해 클라이언트 애플리케이션을 측정합니다. Kafka 생산자 및 소비자 클라이언트 및 Kafka Streams API 애플리케이션을 계측할 수 있습니다.
추적 환경 변수 세트를 사용하여 추적기를 구성하고 초기화합니다.
프로세스
각 클라이언트 애플리케이션에서 추적기에 대한 종속성을 추가합니다.
클라이언트 애플리케이션의
pom.xml파일에 Maven 종속성을 추가합니다.OpenTelemetry 종속 항목
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 추적 환경 변수를 사용하여 추적 프로그램의 구성을 정의합니다.
환경 변수로 초기화되는 추적기를 생성합니다.
OpenTelemetry용 추적기 생성
OpenTelemetry ot = GlobalOpenTelemetry.get();
OpenTelemetry ot = GlobalOpenTelemetry.get();Copy to Clipboard Copied! Toggle word wrap Toggle overflow 추적기를 글로벌 추적기로 등록합니다.
GlobalTracer.register(tracer);
GlobalTracer.register(tracer);Copy to Clipboard Copied! Toggle word wrap Toggle overflow 클라이언트를 계측합니다.
22.3.4. 추적을 위한 생산자 및 소비자 처리 링크 복사링크가 클립보드에 복사되었습니다!
Kafka 생산자 및 소비자에서 추적을 활성화하는 애플리케이션 코드입니다. 데코레이터 패턴 또는 인터셉터를 사용하여 추적을 위해 Java 생산자 및 소비자 애플리케이션 코드를 계측합니다. 그런 다음 메시지가 생성되거나 주제에서 검색될 때 추적을 기록할 수 있습니다.
OpenTelemetry 계측 프로젝트는 생산자 및 소비자의 계측을 지원하는 클래스를 제공합니다.
- 데코레이터 계측
- 데코레이터 계측을 위해 추적을 위해 수정된 생산자 또는 소비자 인스턴스를 생성합니다.
- 인터셉터 계측
- 인터셉터 계측의 경우 소비자 또는 생산자 구성에 추적 기능을 추가합니다.
사전 요구 사항
추적 JAR을 프로젝트에 종속 항목으로 추가하여 생산자 및 소비자 애플리케이션에서 계측을 활성화합니다.
프로세스
각 생산자 및 소비자 애플리케이션의 애플리케이션 코드에서 다음 단계를 수행합니다. 데코레이터 패턴 또는 인터셉터를 사용하여 클라이언트 애플리케이션 코드를 측정합니다.
데코레이터 패턴을 사용하려면 수정된 생산자 또는 소비자 인스턴스를 생성하여 메시지를 보내거나 받습니다.
원래
KafkaProducer또는KafkaConsumer클래스를 전달합니다.OpenTelemetry에 대한 데코레이터 계측 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 인터셉터를 사용하려면 생산자 또는 소비자 구성에서 interceptor 클래스를 설정합니다.
일반적인 방식으로
KafkaProducer및KafkaConsumer클래스를 사용합니다.TracingProducerInterceptor및TracingConsumerInterceptor클래스는 추적 기능을 처리합니다.인터셉터를 사용한 생산자 구성 예
senderProps.put(ProducerConfig.INTERCEPTOR_CLASSES_CONFIG, TracingProducerInterceptor.class.getName()); KafkaProducer<Integer, String> producer = new KafkaProducer<>(senderProps); producer.send(...);senderProps.put(ProducerConfig.INTERCEPTOR_CLASSES_CONFIG, TracingProducerInterceptor.class.getName()); KafkaProducer<Integer, String> producer = new KafkaProducer<>(senderProps); producer.send(...);Copy to Clipboard Copied! Toggle word wrap Toggle overflow 인터셉터를 사용한 소비자 구성 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
22.3.5. 추적을 위한 Kafka Streams 애플리케이션 조정 링크 복사링크가 클립보드에 복사되었습니다!
Kafka Streams API 애플리케이션에서 추적을 활성화하는 애플리케이션 코드입니다. 데코레이터 패턴 또는 인터셉터를 사용하여 추적을 위해 Kafka Streams API 애플리케이션을 계측합니다. 그런 다음 메시지가 생성되거나 주제에서 검색될 때 추적을 기록할 수 있습니다.
- 데코레이터 계측
-
데코레이터 계측을 위해 추적을 위해 수정된 Kafka Streams 인스턴스를 생성합니다. OpenTelemetry의 경우 Kafka Streams에 추적 계측을 제공하기 위해 사용자 정의
TracingKafkaClientSupplier클래스를 생성해야 합니다. - 인터셉터 계측
- 인터셉터 계측의 경우 Kafka Streams 생산자 및 소비자 구성에 추적 기능을 추가합니다.
사전 요구 사항
추적 JAR을 프로젝트에 종속 항목으로 추가하여 Kafka Streams 애플리케이션에서 계측을 활성화합니다.
-
OpenTelemetry를 사용하여 Kafka Streams를 조정하려면 사용자 정의
TracingKafkaClientSupplier를 작성해야 합니다. 사용자 정의
TracingKafkaClientSupplier는 Kafka의DefaultKafkaClientSupplier를 확장하여 생산자 및 소비자 생성 방법을 재정의하여 Telemetry 관련 코드로 인스턴스를 래핑할 수 있습니다.사용자 정의
TracingKafkaClientSupplier의 예Copy to Clipboard Copied! Toggle word wrap Toggle overflow
프로세스
각 Kafka Streams API 애플리케이션에 대해 다음 단계를 수행합니다.
데코레이터 패턴을 사용하려면
TracingKafkaClientSupplier공급자 인터페이스 인스턴스를 생성한 다음 공급자 인터페이스를KafkaStreams에 제공합니다.데코레이터 계측 예
KafkaClientSupplier supplier = new TracingKafkaClientSupplier(tracer); KafkaStreams streams = new KafkaStreams(builder.build(), new StreamsConfig(config), supplier); streams.start();
KafkaClientSupplier supplier = new TracingKafkaClientSupplier(tracer); KafkaStreams streams = new KafkaStreams(builder.build(), new StreamsConfig(config), supplier); streams.start();Copy to Clipboard Copied! Toggle word wrap Toggle overflow 인터셉터를 사용하려면 Kafka Streams 생산자 및 소비자 구성에서 interceptor 클래스를 설정합니다.
TracingProducerInterceptor및TracingConsumerInterceptor클래스는 추적 기능을 처리합니다.인터셉터를 사용한 생산자 및 소비자 구성의 예
props.put(StreamsConfig.PRODUCER_PREFIX + ProducerConfig.INTERCEPTOR_CLASSES_CONFIG, TracingProducerInterceptor.class.getName()); props.put(StreamsConfig.CONSUMER_PREFIX + ConsumerConfig.INTERCEPTOR_CLASSES_CONFIG, TracingConsumerInterceptor.class.getName());
props.put(StreamsConfig.PRODUCER_PREFIX + ProducerConfig.INTERCEPTOR_CLASSES_CONFIG, TracingProducerInterceptor.class.getName()); props.put(StreamsConfig.CONSUMER_PREFIX + ConsumerConfig.INTERCEPTOR_CLASSES_CONFIG, TracingConsumerInterceptor.class.getName());Copy to Clipboard Copied! Toggle word wrap Toggle overflow
22.3.6. 다른 OpenTelemetry 추적 시스템 도입 링크 복사링크가 클립보드에 복사되었습니다!
기본 OTLP 시스템 대신 OpenTelemetry에서 지원하는 다른 추적 시스템을 지정할 수 있습니다. Apache Kafka용 Streams와 함께 제공된 Kafka 이미지에 필요한 아티팩트를 추가하여 이 작업을 수행합니다. 필요한 구현별 환경 변수도 설정해야 합니다. 그런 다음 OTEL_TRACES_EXPORTER 환경 변수를 사용하여 새 추적 구현을 활성화합니다.
다음 절차에서는 Zipkin 추적을 구현하는 방법을 설명합니다.
프로세스
Apache Kafka 이미지의 Streams의
/opt/kafka/libs/디렉터리에 추적 아티팩트를 추가합니다.Red Hat Ecosystem Catalog 에서 Kafka 컨테이너 이미지를 새 사용자 정의 이미지를 생성하기 위한 기본 이미지로 사용할 수 있습니다.
Zipkin의 OpenTelemetry 아티팩트
io.opentelemetry:opentelemetry-exporter-zipkin
io.opentelemetry:opentelemetry-exporter-zipkinCopy to Clipboard Copied! Toggle word wrap Toggle overflow 새 추적 구현에 대해 추적 내보내기 및 끝점을 설정합니다.
Zikpin 추적기 구성의 예
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
22.3.7. OpenTelemetry에 대한 사용자 정의 범위 이름 지정 링크 복사링크가 클립보드에 복사되었습니다!
추적 범위는 작업 이름, 시작 시간 및 기간이 있는 Jaeger의 논리적 작업 단위입니다. 범위에는 이름이 내장되어 있지만 Kafka 클라이언트 계측에 사용자 정의 범위 이름을 지정할 수 있습니다.
사용자 지정 범위 이름을 지정하는 것은 선택 사항이며 생산자 및 소비자 클라이언트 계측 또는 Kafka 스트림 조정에서 데코레이터 패턴을 사용하는 경우에만 적용됩니다.
사용자 지정 범위 이름은 OpenTelemetry로 직접 지정할 수 없습니다. 대신 클라이언트 애플리케이션에 코드를 추가하여 추가 태그 및 속성을 추출하여 범위 이름을 검색합니다.
특성을 추출하는 코드 예