简体   繁体   English

Jaeger,logback和Sleuth一起工作时出现问题

[英]Problem with Jaeger, logback and Sleuth working together

I was developing a Spring Boot application in which the loging is done by logback and Jaeger is integrated for instrumentation. 我正在开发一个Spring Boot应用程序,该应用程序中的日志记录是通过logback完成的,并且Jaeger已集成到仪器中。

Myservice.java Myservice.java

@SpringBootApplication
public class Myservice{


public static void main(String[] args) {
    SpringApplication.run(Myservice.class, args);
}

@Bean
public RestTemplate restTemplate(RestTemplateBuilder restTemplateBuilder) {
    return restTemplateBuilder.build();
}

 @Bean
  public io.opentracing.Tracer jaegerTracer() {
    Builder builder = new Builder("Myservice",
        new RemoteReporter(new HttpSender(http://192.168.1.20:14268/api/traces), 10,
        65000, new Metrics(new StatsFactoryImpl(new NullStatsReporter()))),
        new ConstSampler(true))
        .registerInjector(Builtin.HTTP_HEADERS, new B3TextMapCodec())
        .registerExtractor(Builtin.HTTP_HEADERS, new B3TextMapCodec());
    return builder.build();
  }
}

logback.xml logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration >
 <include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<springProperty scope="context" name="springAppName"
    source="spring.application.name" />
<appender name="consoleAppender" 
class="ch.qos.logback.core.ConsoleAppender">
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            Minimum logging level to be presented in the console logs
            <level>INFO</level>
        </filter>
    <encoder 
class="net.logstash.logback.encoder.LoggingEventCompositeJsonEncoder">
        <providers>
            <pattern>
                <pattern>
                    {
                    "service": "${springAppName:-}",
                    "trace": "%X{X-B3-TraceId:-}",
                    "span": "%X{X-B3-SpanId:-}"
                    }
                </pattern>
            </pattern>
         </providers>
    </encoder>
</appender>

<root level="INFO">
    <appender-ref ref="consoleAppender" />
</root>
</configuration>

pom.xml 的pom.xml

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.4.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>
<dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>io.projectreactor</groupId>
        <artifactId>reactor-core</artifactId>
        <version>3.1.5.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-validation</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <optional>true</optional>
    </dependency>

    <!-- JPA Data Dependency -->

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>

    <!-- Oracle driver Dependency -->

    <dependency>
        <groupId>com.oracle</groupId>
        <artifactId>ojdbc6</artifactId>
        <version>11.2.0.3</version>
    </dependency>
<!-- Opentracing with Jaeger Dependency -->

    <dependency>
        <groupId>io.opentracing</groupId>
        <artifactId>opentracing-api</artifactId>
        <version>0.31.0</version>
    </dependency>
    <dependency>
        <groupId>io.opentracing.contrib</groupId>
        <artifactId>opentracing-spring-cloud-starter</artifactId>
        <version>0.1.4</version>
    </dependency>
    <dependency>
        <groupId>com.uber.jaeger</groupId>
        <artifactId>jaeger-core</artifactId>
        <version>0.24.0</version>
    </dependency>
    <dependency>
        <groupId>com.uber.jaeger</groupId>
        <artifactId>jaeger-b3</artifactId>
        <version>0.24.0</version>
    </dependency>

    <!-- Logback Dependency -->

    <dependency>
        <groupId>ch.qos.logback</groupId>
        <artifactId>logback-classic</artifactId>
        <version>1.2.3</version>
    </dependency>
    <dependency>
        <groupId>net.logstash.logback</groupId>
        <artifactId>logstash-logback-encoder</artifactId>
        <version>4.10</version>
    </dependency>

The Jeager is properly connected to server and its getting the traces. Jeager已正确连接到服务器并获取了跟踪。 The problem is with the logback logs. 问题出在logback日志上。 The traceId and spanId are not getting printed in the logs. traceId和spanId不会在日志中打印。

{"service" : "Myservice", "trace": "", "span":""}

But I myself found a solution for that. 但是我自己找到了解决方案。 I added Spring Cloud Sleuth with my Spring Boot application. 我在Spring Boot应用程序中添加了Spring Cloud Sleuth。

    <!-- spring-cloud-sleuth dependency -->

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-dependencies</artifactId>
        <version>Camden.SR1</version>
        <type>pom</type>
        <scope>import</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
        <version>2.0.1.RELEASE</version>
    </dependency>

Now all the trace information was available in the logback log. 现在,所有的跟踪信息都可以在logback日志中找到。 But the problem is that Jaeger stopped registering traces to Jaeger server. 但是问题是Jaeger停止将跟踪记录注册到Jaeger服务器。

I tried Zipkin instead of Jaeger, but the same thing happened. 我尝试使用Zipkin代替Jaeger,但是发生了同样的事情。 What's wrong with my application? 我的申请有什么问题? Is something wrong with the dependencies? 依赖性有问题吗?

You're using Camden release train with boot 2.0 and Sleuth 2.0 . 您正在使用带有引导2.0和Sleuth 2.0 Camden发布火车。 That's completely incompatible. 那是完全不兼容的。 Please generate a project from start.spring.io from scratch, please don't put any versions manually for spring cloud projects, and please try again. 请从头开始从start.spring.io生成一个项目,请不要为Spring Cloud项目手动放置任何版本,请重试。 Try using Finchley release train instead of Camden 尝试使用Finchley发行列车代替Camden

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM