簡體   English   中英

Jaeger,logback和Sleuth一起工作時出現問題

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

我正在開發一個Spring Boot應用程序,該應用程序中的日志記錄是通過logback完成的,並且Jaeger已集成到儀器中。

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

<?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

<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>

Jeager已正確連接到服務器並獲取了跟蹤。 問題出在logback日志上。 traceId和spanId不會在日志中打印。

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

但是我自己找到了解決方案。 我在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>

現在,所有的跟蹤信息都可以在logback日志中找到。 但是問題是Jaeger停止將跟蹤記錄注冊到Jaeger服務器。

我嘗試使用Zipkin代替Jaeger,但是發生了同樣的事情。 我的申請有什么問題? 依賴性有問題嗎?

您正在使用帶有引導2.0和Sleuth 2.0 Camden發布火車。 那是完全不兼容的。 請從頭開始從start.spring.io生成一個項目,請不要為Spring Cloud項目手動放置任何版本,請重試。 嘗試使用Finchley發行列車代替Camden

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM