15.2. 为 Kafka 客户端设置追踪
初始化 Jaeger tracer,以检测您的客户端应用程序以进行分布式追踪。
15.2.1. 为 Kafka 客户端初始化 Jaeger tracer 复制链接链接已复制到粘贴板!
使用一组 追踪环境变量 配置和初始化 Jaeger tracer。
流程
在每个客户端应用程序中:
将 Jaeger 的 Maven 依赖项添加到客户端应用程序的
pom.xml
文件中:<dependency> <groupId>io.jaegertracing</groupId> <artifactId>jaeger-client</artifactId> <version>1.5.0.redhat-00001</version> </dependency>
<dependency> <groupId>io.jaegertracing</groupId> <artifactId>jaeger-client</artifactId> <version>1.5.0.redhat-00001</version> </dependency>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 使用 追踪环境变量 定义 Jaeger tracer 的配置。
从您在第两个步骤中定义的环境变量创建 Jaeger tracer:
Tracer tracer = Configuration.fromEnv().getTracer();
Tracer tracer = Configuration.fromEnv().getTracer();
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意有关初始化 Jaeger tracer 的替代方法,请参阅 Java OpenTracing 库 文档。
将 Jaeger tracer 注册为全局 tracer:
GlobalTracer.register(tracer);
GlobalTracer.register(tracer);
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
现在,为要使用的客户端应用程序初始化 Jaeger tracer。
15.2.2. 提取制作者和消费者以进行追踪 复制链接链接已复制到粘贴板!
使用 Decorator 模式或 Interceptors 来检测您的 Java 制作者和消费者应用程序代码进行追踪。
流程
在每个制作者和消费者应用程序的应用程序代码中:
将 OpenTracing 的 Maven 依赖项添加到制作者或消费者的
pom.xml
文件。<dependency> <groupId>io.opentracing.contrib</groupId> <artifactId>opentracing-kafka-client</artifactId> <version>0.1.15.redhat-00006</version> </dependency>
<dependency> <groupId>io.opentracing.contrib</groupId> <artifactId>opentracing-kafka-client</artifactId> <version>0.1.15.redhat-00006</version> </dependency>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Decorator 模式或 Interceptors 检测您的客户端应用程序代码。
使用 Decorator 模式:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 使用 Interceptors:
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
在 Decorator 模式中的自定义 span 名称
span 是 Jaeger 中的逻辑工作单元,包括操作名称、开始时间和持续时间。
要使用 Decorator 模式检测您的制作者和消费者应用程序,请在创建 TracingKafkaProducer
和 TracingKafkaConsumer
对象时将 BiFunction
对象作为附加参数来定义自定义 span 名称。OpenTracing Apache Kafka Client Instrumentation 库包括几个内置范围名称。
示例:使用自定义 span 名称以 Decorator 模式检测客户端应用程序代码
内置范围名称
在定义自定义范围名称时,您可以在 ClientSpanNameProvider
类中使用以下 BiFunctions
。如果没有指定 spanNameProvider
,则使用 CONSUMER_OPERATION_NAME
和 PRODUCER_OPERATION_NAME
。
BiFunction | 描述 |
---|---|
|
返回 |
|
返回 |
|
以格式 |
|
返回 |
|
返回操作名称和主题名称:" |
|
返回 |
15.2.3. 用于追踪的 Kafka Streams 应用程序 复制链接链接已复制到粘贴板!
使用供应商接口检测 Kafka Streams 应用程序以进行分布式追踪。这会在应用程序中启用 Interceptors。
流程
在每个 Kafka Streams 应用程序中:
将
opentracing-kafka-streams
依赖项添加到 Kafka Streams 应用的pom.xml
文件中。<dependency> <groupId>io.opentracing.contrib</groupId> <artifactId>opentracing-kafka-streams</artifactId> <version>0.1.15.redhat-00006</version> </dependency>
<dependency> <groupId>io.opentracing.contrib</groupId> <artifactId>opentracing-kafka-streams</artifactId> <version>0.1.15.redhat-00006</version> </dependency>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 创建
TracingKafkaClientSupplier
供应商接口实例:KafkaClientSupplier supplier = new TracingKafkaClientSupplier(tracer);
KafkaClientSupplier supplier = new TracingKafkaClientSupplier(tracer);
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 为
KafkaStreams
提供供应商接口:KafkaStreams streams = new KafkaStreams(builder.build(), new StreamsConfig(config), supplier); streams.start();
KafkaStreams streams = new KafkaStreams(builder.build(), new StreamsConfig(config), supplier); streams.start();
Copy to Clipboard Copied! Toggle word wrap Toggle overflow