在Spring应用程序中配置Jaeger

在Spring应用程序中配置Jaeger,spring,opentracing,jaeger,Spring,Opentracing,Jaeger,我想在Spring应用程序中配置Jaeger。不知怎的,我找不到一个合适的方法来做这件事。几乎所有与SpringJaeger相关的文档都是针对SpringBoot的,其中大多数属性都是自动配置的。这是我的方法。 Maven依赖项: <dependency> <groupId>io.opentracing.contrib</groupId> <artifactId>opentracing-spring-jaeg

我想在Spring应用程序中配置Jaeger。不知怎的,我找不到一个合适的方法来做这件事。几乎所有与SpringJaeger相关的文档都是针对SpringBoot的,其中大多数属性都是自动配置的。这是我的方法。 Maven依赖项:

    <dependency>
        <groupId>io.opentracing.contrib</groupId>
        <artifactId>opentracing-spring-jaeger-cloud-starter</artifactId>
        <version>1.0.3</version>
    </dependency>
一旦我的应用程序启动,我注意到应用程序的速度明显减慢,我认为这是因为LoggingReporter大量地将度量记录到控制台


但是,我的Spring应用程序没有显示在Jaeger UI中。开始时,我希望跟踪我的REST端点。有人能告诉我为什么我的应用程序在UI中丢失,以及我如何正确配置Jaeger吗?是否有一个Spring+Jaeger示例项目不依赖过时的Jaeger

如果其他任何人想在spring项目中建立Jaeger,下面是我所做的:

向pom添加依赖项:

<properties>
    <opentracing.spring.web.version>0.3.4</opentracing.spring.web.version>
    <opentracing.jdbc.version>0.0.12</opentracing.jdbc.version>
    <opentracing.spring.configuration.starter.version>0.1.0</opentracing.spring.configuration.starter.version>
    <opentracing.spring.jaeger.starter.version>0.2.2</opentracing.spring.jaeger.starter.version>
</properties>

<dependency>
    <groupId>io.opentracing.contrib</groupId>
    <artifactId>opentracing-spring-web-starter</artifactId>
    <version>${opentracing.spring.web.version}</version>
</dependency>
<dependency>
    <groupId>io.opentracing.contrib</groupId>
    <artifactId>opentracing-jdbc</artifactId>
    <version>${opentracing.jdbc.version}</version>
</dependency>
<dependency>
    <groupId>io.opentracing.contrib</groupId>
    <artifactId>opentracing-spring-tracer-configuration-starter</artifactId>
    <version>${opentracing.spring.configuration.starter.version}</version>
</dependency>
<dependency>
    <groupId>io.opentracing.contrib</groupId>
    <artifactId>opentracing-spring-jaeger-starter</artifactId>
    <version>${opentracing.spring.jaeger.starter.version}</version>
</dependency>
最后定义jaeger跟踪器弹簧配置:

import io.jaegertracing.internal.JaegerTracer;
import io.jaegertracing.internal.metrics.NoopMetricsFactory;
import io.jaegertracing.internal.reporters.RemoteReporter;
import io.jaegertracing.internal.reporters.RemoteReporter.Builder;
import io.jaegertracing.internal.samplers.ProbabilisticSampler;
import io.jaegertracing.thrift.internal.senders.UdpSender;
import io.opentracing.Tracer;
import io.opentracing.util.GlobalTracer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.event.ContextRefreshedEvent;


@Configuration
public class JaegerConfiguration implements ApplicationListener<ContextRefreshedEvent> {


    private static final int JAEGER_PORT = 6831;
    private static final String JAEGER_HOST = "localhost";
    private static final String JAEGER_SERVICE_NAME = "my-awesome-jaeger";
    private static final double SAMPLING_RATE = 0.5;
    @Autowired
    private Tracer tracer;

    @Bean
    @Primary
    public Tracer jaegerTracer(RemoteReporter remoteReporter) {
        return new JaegerTracer.Builder(JAEGER_SERVICE_NAME)
                .withReporter(remoteReporter)
                .withMetricsFactory(new NoopMetricsFactory()).withSampler(new ProbabilisticSampler(SAMPLING_RATE))
                .build();
    }

    @Bean
    public RemoteReporter remoteReporter() {
        return new Builder().withSender(new UdpSender(JAEGER_HOST, JAEGER_PORT, 0)).build();
    }

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        if (!GlobalTracer.isRegistered()) {
            GlobalTracer.register(tracer);
        }
    }
}
导入io.jaegertracing.internal.JaegerTracer;
导入io.jaegertracing.internal.metrics.noopmetrics工厂;
导入io.jaegertracing.internal.reporters.RemoteReporter;
导入io.jaegertracing.internal.reporters.RemoteReporter.Builder;
进口io.jaegertracing.internal.samplers.ProbabilisticSampler;
导入io.jaegertracing.thrift.internal.senders.UdpSender;
导入io.opentracing.Tracer;
导入io.opentracing.util.GlobalTracer;
导入org.springframework.beans.factory.annotation.Autowired;
导入org.springframework.context.ApplicationListener;
导入org.springframework.context.annotation.Bean;
导入org.springframework.context.annotation.Configuration;
导入org.springframework.context.annotation.Primary;
导入org.springframework.context.event.ContextRefreshedEvent;
@配置
公共类JaegerConfiguration实现ApplicationListener{
专用静态最终int JAEGER_端口=6831;
私有静态最终字符串JAEGER_HOST=“localhost”;
私有静态最终字符串JAEGER_SERVICE_NAME=“my awesome JAEGER”;
私人静态最终双采样率=0.5;
@自动连线
私人示踪剂;
@豆子
@初级的
公共追踪器jaegerTracer(RemoteReporter RemoteReporter){
返回新的JaegerTracer.Builder(JAEGER_服务_名称)
.withReporter(remoteReporter)
.withMetricsFactory(new NoopMetricsFactory())。withSampler(new ProbabilisticSampler(采样率))
.build();
}
@豆子
公共RemoteReporter RemoteReporter(){
返回新的Builder().withSender(新的UdpSender(JAEGER_主机,JAEGER_端口,0)).build();
}
@凌驾
ApplicationEvent(ContextRefreshedEvent事件)上的公共无效{
如果(!GlobalTracer.isRegistered()){
GlobalTracer.寄存器(跟踪器);
}
}
}

我有以下gradle依赖项在工作

    implementation "io.opentracing.contrib:opentracing-spring-cloud-starter:0.1.13"
    implementation "io.jaegertracing:jaeger-client:0.31.0"

跟踪bean配置之后

  @Bean
    public io.opentracing.Tracer initTracer() {
        Configuration.SamplerConfiguration samplerConfig = new Configuration.SamplerConfiguration().withType("const").withParam(1);
        return Configuration.fromEnv("sprint-service").withSampler(samplerConfig).getTracer();
    }
然后跨度可以记录为

Span sprintSpan = tracer.buildSpan("my-span-name").withTag("player", player).start();

// some business functionality

sprintSpan.finish();

以下是您可以参考的工作示例

您是否看到通过您的日志记录设备记录的跨度?您可能想查看这篇博文,以帮助解决问题:是否有任何示例应用程序详细显示了此实现?您使用的是Opentracing中的示例项目:问题是关于spring应用程序的,而不是spring引导。感谢您的支持,但我认为这不会对spring应用程序产生太大影响。提供的示例是一个spring引导应用程序,但上面的配置也适用于vanila spring应用程序。
import io.opentracing.Tracer;
import io.opentracing.contrib.web.servlet.filter.TracingFilter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;


@Configuration
public class JaegerFilterConfiguration {

    @Bean
    public TracingFilter tracingFilter(Tracer tracer) {
        return new TracingFilter(tracer);
    }
}
import io.jaegertracing.internal.JaegerTracer;
import io.jaegertracing.internal.metrics.NoopMetricsFactory;
import io.jaegertracing.internal.reporters.RemoteReporter;
import io.jaegertracing.internal.reporters.RemoteReporter.Builder;
import io.jaegertracing.internal.samplers.ProbabilisticSampler;
import io.jaegertracing.thrift.internal.senders.UdpSender;
import io.opentracing.Tracer;
import io.opentracing.util.GlobalTracer;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.context.event.ContextRefreshedEvent;


@Configuration
public class JaegerConfiguration implements ApplicationListener<ContextRefreshedEvent> {


    private static final int JAEGER_PORT = 6831;
    private static final String JAEGER_HOST = "localhost";
    private static final String JAEGER_SERVICE_NAME = "my-awesome-jaeger";
    private static final double SAMPLING_RATE = 0.5;
    @Autowired
    private Tracer tracer;

    @Bean
    @Primary
    public Tracer jaegerTracer(RemoteReporter remoteReporter) {
        return new JaegerTracer.Builder(JAEGER_SERVICE_NAME)
                .withReporter(remoteReporter)
                .withMetricsFactory(new NoopMetricsFactory()).withSampler(new ProbabilisticSampler(SAMPLING_RATE))
                .build();
    }

    @Bean
    public RemoteReporter remoteReporter() {
        return new Builder().withSender(new UdpSender(JAEGER_HOST, JAEGER_PORT, 0)).build();
    }

    @Override
    public void onApplicationEvent(ContextRefreshedEvent event) {
        if (!GlobalTracer.isRegistered()) {
            GlobalTracer.register(tracer);
        }
    }
}
    implementation "io.opentracing.contrib:opentracing-spring-cloud-starter:0.1.13"
    implementation "io.jaegertracing:jaeger-client:0.31.0"

  @Bean
    public io.opentracing.Tracer initTracer() {
        Configuration.SamplerConfiguration samplerConfig = new Configuration.SamplerConfiguration().withType("const").withParam(1);
        return Configuration.fromEnv("sprint-service").withSampler(samplerConfig).getTracer();
    }
Span sprintSpan = tracer.buildSpan("my-span-name").withTag("player", player).start();

// some business functionality

sprintSpan.finish();