Jaeger 与 Spring 引导
Jaeger with Spring Boot
在一个 spring 引导应用程序(目前只有一个)中,我通过添加依赖项 opentracing-spring-jaeger-web-starter
和下面的 beans
来包含 jaeger
@Bean
public static JaegerTracer getTracer() {
io.jaegertracing.Configuration.SamplerConfiguration samplerConfig =
io.jaegertracing.Configuration.SamplerConfiguration.fromEnv().withType("const").withParam(1);
io.jaegertracing.Configuration.ReporterConfiguration reporterConfig =
io.jaegertracing.Configuration.ReporterConfiguration.fromEnv().withLogSpans(true);
io.jaegertracing.Configuration config = new io.jaegertracing.Configuration("fooService").withSampler(samplerConfig).withReporter(reporterConfig);
return config.getTracer();
}
@PostConstruct
public void setProperty() {
System.setProperty("JAEGER_REPORTER_LOG_SPANS", "true");
}
在 docker 中启动 Jaeger 后 docker run -d --name jaeger -p 16686:16686 -p 6831:6831/udp jaegertracing/all-in-one:1.9
我得到了痕迹。
我现在发现了另一个依赖项并阅读了不同的教程,这让我不知何故不确定在 spring 引导下使用 Jaeger 的正确方法是什么。
我会使用哪个依赖项?
https://github.com/opentracing-contrib/java-spring-cloud
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-cloud-starter</artifactId>
</dependency>
https://github.com/signalfx/tracing-examples/tree/master/jaeger-java-spring-boot-web
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-jaeger-web-starter</artifactId>
</dependency>
<dependency>
<groupId>io.jaegertracing</groupId>
<artifactId>jaeger-client</artifactId>
<version>$jaegerVersion</version>
</dependency>
够不够!?
在尝试 Jaeger 之前,我使用了 Zipkin,它很容易集成到 Spring 中,因为有一个侦探启动器。日志在单独的字段中包含跟踪和跨度 ID,因此可以搜索它们,例如在基巴纳。 Jaeger not.
可以自定义吗?如果可以 - 如何自定义?
是否可以将 Jaeger 与 Brave 一起用于检测。该项目例如包括 spring-cloud-starter-sleuth
作为依赖项。与已经存在的 bean 存在一些冲突。 Jaeger 可以和 brave 一起使用吗?
此 link (https://objectpartners.com/2019/04/25/distributed-tracing-with-apache-kafka-and-jaeger/) 提供了有关如何启用 jaeger 跟踪的详细信息。
启用 jaeger 以 spring 引导应用程序的最简单方法是添加依赖项和所需的属性。
依赖关系:
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-jaeger-web-starter</artifactId>
<version>3.2.0</version>
</dependency>
示例属性
opentracing.jaeger.udp-sender.host=localhost
opentracing.jaeger.udp-sender.port=6831
opentracing.jaeger.const-sampler.decision=true
opentracing.jaeger.enabled=true
opentracing.jaeger.log-spans=true
opentracing.jaeger.service-name=ms-name
回答您关于依赖项的问题,在依赖项部分 (https://github.com/opentracing-contrib/java-spring-jaeger) 中进行了解释:
The opentracing-spring-jaeger-web-starter starter is convenience starter that includes both opentracing-spring-jaeger-starter and opentracing-spring-web-starter This means that by including it, simple web Spring Boot microservices include all the necessary dependencies to instrument Web requests / responses and send traces to Jaeger.
The opentracing-spring-jaeger-cloud-starter starter is convenience starter that includes both opentracing-spring-jaeger-starter and opentracing-spring-cloud-starter This means that by including it, all parts of the Spring Cloud stack supported by Opentracing will be instrumented
顺便说一句:
- opentracing.jaeger.log-spans 默认为真
同于:
- opentracing.jaeger.udp-sender.host=localhost
- opentracing.jaeger.udp-sender.port=6831
- opentracing.jaeger.const-sampler.decision=真
- opentracing.jaeger.enabled=真
要配置 Jaeger,我们需要在每个服务中添加 Jaeger Client 的依赖项(在 pom.xml 中)。
Jaeger 客户端依赖:
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-jaeger-web-starter</artifactId>
<version>3.2.0</version>
</dependency>
添加依赖后我们需要在每个服务上添加Jaeger Client配置。
@Configuration
public class JaegerConfig {
@Bean
public JaegerTracer jaegerTracer() {
return new io.jaegertracing.Configuration("jaeger-client")
.withSampler(new io.jaegertracing.Configuration.SamplerConfiguration().withType(ConstSampler.TYPE)
.withParam(1))
.withReporter(new io.jaegertracing.Configuration.ReporterConfiguration().withLogSpans(true))
.getTracer();
}
}
我们还可以根据我们在 Jaeger 中使用的采样策略更改配置。
您可以参考官方文档了解抽样策略。
[1]: https://www.jaegertracing.io/docs/1.22/sampling/
设置 Jaeger 后 运行
docker run -d --name jaeger -p 16686:16686 -p 6831:6831/udp
jaegertracing/all-in-one:1.9
运行 Jaeger UI 在端口 16686 上。
在一个 spring 引导应用程序(目前只有一个)中,我通过添加依赖项 opentracing-spring-jaeger-web-starter
和下面的 beans
@Bean
public static JaegerTracer getTracer() {
io.jaegertracing.Configuration.SamplerConfiguration samplerConfig =
io.jaegertracing.Configuration.SamplerConfiguration.fromEnv().withType("const").withParam(1);
io.jaegertracing.Configuration.ReporterConfiguration reporterConfig =
io.jaegertracing.Configuration.ReporterConfiguration.fromEnv().withLogSpans(true);
io.jaegertracing.Configuration config = new io.jaegertracing.Configuration("fooService").withSampler(samplerConfig).withReporter(reporterConfig);
return config.getTracer();
}
@PostConstruct
public void setProperty() {
System.setProperty("JAEGER_REPORTER_LOG_SPANS", "true");
}
在 docker 中启动 Jaeger 后 docker run -d --name jaeger -p 16686:16686 -p 6831:6831/udp jaegertracing/all-in-one:1.9
我得到了痕迹。
我现在发现了另一个依赖项并阅读了不同的教程,这让我不知何故不确定在 spring 引导下使用 Jaeger 的正确方法是什么。
我会使用哪个依赖项?
https://github.com/opentracing-contrib/java-spring-cloud
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-cloud-starter</artifactId>
</dependency>
https://github.com/signalfx/tracing-examples/tree/master/jaeger-java-spring-boot-web
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-jaeger-web-starter</artifactId>
</dependency>
<dependency>
<groupId>io.jaegertracing</groupId>
<artifactId>jaeger-client</artifactId>
<version>$jaegerVersion</version>
</dependency>
够不够!?
在尝试 Jaeger 之前,我使用了 Zipkin,它很容易集成到 Spring 中,因为有一个侦探启动器。日志在单独的字段中包含跟踪和跨度 ID,因此可以搜索它们,例如在基巴纳。 Jaeger not.
可以自定义吗?如果可以 - 如何自定义?
是否可以将 Jaeger 与 Brave 一起用于检测。该项目例如包括 spring-cloud-starter-sleuth
作为依赖项。与已经存在的 bean 存在一些冲突。 Jaeger 可以和 brave 一起使用吗?
此 link (https://objectpartners.com/2019/04/25/distributed-tracing-with-apache-kafka-and-jaeger/) 提供了有关如何启用 jaeger 跟踪的详细信息。
启用 jaeger 以 spring 引导应用程序的最简单方法是添加依赖项和所需的属性。
依赖关系:
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-jaeger-web-starter</artifactId>
<version>3.2.0</version>
</dependency>
示例属性
opentracing.jaeger.udp-sender.host=localhost
opentracing.jaeger.udp-sender.port=6831
opentracing.jaeger.const-sampler.decision=true
opentracing.jaeger.enabled=true
opentracing.jaeger.log-spans=true
opentracing.jaeger.service-name=ms-name
回答您关于依赖项的问题,在依赖项部分 (https://github.com/opentracing-contrib/java-spring-jaeger) 中进行了解释:
The opentracing-spring-jaeger-web-starter starter is convenience starter that includes both opentracing-spring-jaeger-starter and opentracing-spring-web-starter This means that by including it, simple web Spring Boot microservices include all the necessary dependencies to instrument Web requests / responses and send traces to Jaeger.
The opentracing-spring-jaeger-cloud-starter starter is convenience starter that includes both opentracing-spring-jaeger-starter and opentracing-spring-cloud-starter This means that by including it, all parts of the Spring Cloud stack supported by Opentracing will be instrumented
顺便说一句:
- opentracing.jaeger.log-spans 默认为真
同于:
- opentracing.jaeger.udp-sender.host=localhost
- opentracing.jaeger.udp-sender.port=6831
- opentracing.jaeger.const-sampler.decision=真
- opentracing.jaeger.enabled=真
要配置 Jaeger,我们需要在每个服务中添加 Jaeger Client 的依赖项(在 pom.xml 中)。
Jaeger 客户端依赖:
<dependency>
<groupId>io.opentracing.contrib</groupId>
<artifactId>opentracing-spring-jaeger-web-starter</artifactId>
<version>3.2.0</version>
</dependency>
添加依赖后我们需要在每个服务上添加Jaeger Client配置。
@Configuration
public class JaegerConfig {
@Bean
public JaegerTracer jaegerTracer() {
return new io.jaegertracing.Configuration("jaeger-client")
.withSampler(new io.jaegertracing.Configuration.SamplerConfiguration().withType(ConstSampler.TYPE)
.withParam(1))
.withReporter(new io.jaegertracing.Configuration.ReporterConfiguration().withLogSpans(true))
.getTracer();
}
}
我们还可以根据我们在 Jaeger 中使用的采样策略更改配置。 您可以参考官方文档了解抽样策略。 [1]: https://www.jaegertracing.io/docs/1.22/sampling/
设置 Jaeger 后 运行
docker run -d --name jaeger -p 16686:16686 -p 6831:6831/udp jaegertracing/all-in-one:1.9
运行 Jaeger UI 在端口 16686 上。