标签: spring-cloud-sleuth

添加依赖项后,spring-cloud-sleuth 在日志中不显示任何信息

我已将 sleuth 依赖项添加到我的 Spring boot 项目中。尽管存在依赖关系,但在日志中看不到任何跟踪信息。没有编译或运行时错误。

 <?xml version="1.0" encoding="UTF-8"?>
   <project xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
    http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>TestProject</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>TestProject</name>
    <description>Test Project.</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath />
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.RC2</spring-cloud.version>
    </properties>

    <repositories>
        <repository>
            <id>ccp-master</id>
            <url>https://maven.teamccp.com/content/groups/master</url>
        </repository>

        <repository>
            <id>spring-release</id>
            <url>http://repo.spring.io/libs-release</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>

        <repository>
            <id>spring-milestone</id>
            <url>http://repo.spring.io/libs-milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>

        <repository>
            <id>spring-snapshot</id>
            <url>http://repo.spring.io/libs-snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>

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

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jersey</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-sleuth</artifactId>
        </dependency>
        <dependency> …
Run Code Online (Sandbox Code Playgroud)

spring-boot spring-cloud spring-cloud-sleuth

6
推荐指数
1
解决办法
3286
查看次数

添加 sleuth 和 zipkin 后,应用程序无法启动

我有一个 Spring Boot 应用程序,我要更新到 1.5.1。效果很好,直到我将 Sleuth 和 Zipkin 添加到类路径

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

当这些行出现时,我得到

2017-02-22 22:33:05.331 ERROR [chathub-api,,,] 7581 --- [           main] o.s.boot.SpringApplication               : Application startup failed

java.lang.NoClassDefFoundError: org/springframework/boot/context/embedded/FilterRegistrationBean
Run Code Online (Sandbox Code Playgroud)

这是我的部门。管理

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Camden.SR4</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
Run Code Online (Sandbox Code Playgroud)

我试着改成达尔斯顿

<dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Dalston.BUILD-SNAPSHOT</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <repositories>
        <repository>
            <id>spring-snapshots</id>
            <name>Spring Snapshots</name>
            <url>https://repo.spring.io/libs-snapshot</url>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>
    </repositories>
Run Code Online (Sandbox Code Playgroud)

但错误变得更加奇怪

***************************
APPLICATION FAILED TO START
***************************

Description:

Parameter 0 of method …
Run Code Online (Sandbox Code Playgroud)

zipkin spring-boot spring-cloud spring-cloud-sleuth

5
推荐指数
1
解决办法
8468
查看次数

使用Spring Data JPA的Spring Cloud Sleuth

我们正在尝试在我们的项目中使用Zipkin实现Spring cloud sleuth,并想知道Spring cloud sleuth是否将支持Spring数据JPA的数据库调用。

我想跟踪数据库调用所花费的时间,就像服务调用一样

当我使用RestTemplate进行服务呼叫时,该呼叫被发送到zipkin,并且能够在仪表板上看到它

但是DB与Spring数据jpa的交互未在Zipkin中显示

cloud spring spring-boot spring-cloud-sleuth

5
推荐指数
1
解决办法
925
查看次数

如何使用 Feign.Builder 实现侦探追踪?

我正在尝试将 Sleuth 集成到我们的系统中。如果我使用带注释的接口@FeignClient,则一切正常。这些接口会自动检测,并且 Sleuth 标头会通过 REST 调用传播。

但是,我们有一些现有代码直接使用 Feign.Builder 和 Feign 注释接口(只是没有用 注释@FeignClient)。这段代码添加了一些自定义的请求拦截器、编码器、代理等。

例如:

// Feign REST interface
public interface MyService {

    @RequestMapping(method = RequestMethod.GET, value = "/version")
    String getVersion();
}

// Creating the builder
Feign.Builder builder = Feign.builder();
builder.requestInterceptor(new MyCustomInterceptor());
// + adding proxy, encoder, decoder, etc

// Using the builder
MyService myService = builder.target(MyService.class, "http://localhost:8080/myservice");
myService.getVersion();
Run Code Online (Sandbox Code Playgroud)

我希望这个旧代码传播 Sleuth 标头。有什么简单的方法来连接它吗?

(我想一种选择是重新设计我们的 Feign 接口以使用 @FeignClient 并重新设计所有自定义拦截器、编码器等的应用方式,但最终这可能需要大量工作并有很大风险。)

我是否需要做一个特殊的请求拦截器来手动注入这些(例如从自动装配的 Tracer)?有没有一种干净的方法(或现有的类)来做到这一点?

spring-boot spring-cloud feign spring-cloud-netflix spring-cloud-sleuth

5
推荐指数
1
解决办法
5403
查看次数

Spring Sleuth 和 Zipkin:Could not find artifact io.zipkin.brave:brave-bom:pom:4.16.3-SNAPSHOT

我有一个 Spring Boot 2.0.0 REST 服务,我正在尝试启用 Sleuth 和 Zipkin 将跟踪发送到我的本地主机 Zipkin 服务器。

该应用程序运行良好spring-cloud-starter-sleuthspring-cloud-sleuth-zipkin直到我将两个依赖项添加到我的 pom.xml 中。一旦我这样做了,我现在收到一个编译错误:

项目构建错误:不可解析的导入 POM:找不到工件 io.zipkin.brave:brave-bom:pom:4.16.3-SNAPSHOT

我通过删除我的 .m2 文件夹并更新(两次)来确保它不是损坏的 Maven 包问题。

为什么我会收到此错误,我该如何解决?

这是我的 pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>io.urig</groupId>
    <artifactId>inventory</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>jar</packaging>

    <name>inventory</name>
    <description>Demo project for Spring Boot</description>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.RELEASE</version>
        <relativePath /> <!-- lookup parent from repository -->
    </parent>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <spring-cloud.version>Finchley.M8</spring-cloud.version>
        <sleuth.version>2.0.0.M8</sleuth.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.retry</groupId> …
Run Code Online (Sandbox Code Playgroud)

java maven zipkin spring-cloud spring-cloud-sleuth

5
推荐指数
1
解决办法
2343
查看次数

Spring sleuth 生成自定义跟踪 ID

我需要自定义 spring sleuth 生成跟踪 ID 值的方式:在我的情况下,客户端使用查询参数发送相关 ID,我想使用该值作为跟踪 ID。那可能吗?如何?

提前致谢。

spring spring-cloud-sleuth

5
推荐指数
0
解决办法
488
查看次数

Spring Cloud Sleuth 如何在开箱即用的 Webflux 中传播 MDC 上下文,以便其内容可以记录在不同的线程中?

我想知道 Spring Cloud Sleuth 如何在线程之间传播 MDC 上下文,从而使 MDC 参数可用。

我读过这篇文章https://simonbasle.github.io/2018/02/contextual-logging-with-reactor-context-and-mdc/建议使用订阅者上下文在线程之间传播 MDC 状态。

我需要对某些请求标头中的其他参数执行类似操作,因此我创建了将其放入当前线程的 MDC 并将其存储在订阅者上下文中的操作。但是,恢复执行的下一个线程不可用。不知何故,我应该使用上下文中的值在新线程中再次调用 MDC,但是如何调用?

@Slf4j
@RequiredArgsConstructor
@Order(Ordered.HIGHEST_PRECEDENCE)
public class ReactiveRequestCorrelationFilter implements WebFilter {

    @Override
    public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
        String principal = exchange.getRequest().getHeaders().getFirst("principal-header");
        MDC.put("principal", principal);
        return chain.filter(exchange)
                .subscriberContext(Context.of("principal", principal))
                .doOnTerminate(MDC::clear);
    }

}
Run Code Online (Sandbox Code Playgroud)

看看这个控制器映射:

    @GetMapping(value = "/v1/departments", produces = MediaType.APPLICATION_JSON_VALUE)
    public Flux<Department> getDepartments() {
        log.info("getDepartaments");
        return webClient.get().uri("http://someService:8080/api/v1/departamentosFoo").retrieve().bodyToFlux(Departments.class)
                .doOnNext(dep -> log.info("found department {}", dep));
    }
Run Code Online (Sandbox Code Playgroud)

它生成此日志:

logging.pattern.console="%magenta([%thread]) [%X{traceId}] [%X{spanId}] [%X{principal}]  - %m%n"
Run Code Online (Sandbox Code Playgroud)
[boundedElastic-2] [d0a916db8be0cbf7] [d0a916db8be0cbf7] [] …
Run Code Online (Sandbox Code Playgroud)

spring-boot project-reactor spring-cloud spring-cloud-sleuth spring-webflux

5
推荐指数
3
解决办法
4292
查看次数

在尝试获取 Sleuth 的跟踪时,应用程序失败,并显示“需要一个‘brave.Tracer’类型的 bean,但无法找到”

我从另一个微服务调用我的 Springboot 应用程序来获取跟踪和跨度 ID,但在启动应用程序时出现错误。我想要做的是在app1中创建Trace & Span,然后调用app2并在app2中获取从app1传递的Trace id。在 app1 中,我能够获取跟踪和跨度,但在 app2 中,我想获取该跟踪,但它失败了。我曾尝试参考这一点

我得到的错误是:

描述:

com.test.demo1.filter.MyFilter 中构造函数的参数 0 需要一个类型为“brave.Tracer”的 bean,但无法找到。

行动:

考虑在您的配置中定义一个“brave.Tracer”类型的 bean。”我也尝试创建该 bean,但给出错误“构造函数 Tracer() 未定义”

下面是我的简单 RestController 和 pom.xml

package com.test.demo1.controller;

import java.util.logging.Logger;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import brave.Tracer;


@RestController
@Component
public class Greeting {

private static final Logger logger = Logger.getLogger(Greeting.class.getName());
    
    @Autowired
    Tracer tracer;

    @RequestMapping("/greeting")
    public String greeting() {
        logger.info("Hello info from from spring sleuth");
        logger.info("tracer is -----> "+tracer.currentSpan().context().traceIdString());
        System.out.println("tracer-id :"+ tracer.currentSpan().context().traceIdString());
        return "Hello"; …
Run Code Online (Sandbox Code Playgroud)

java spring trace spring-boot spring-cloud-sleuth

5
推荐指数
1
解决办法
1万
查看次数

使用 Feign 构建器请求不会向子客户端发送 Trace-id、span-id,但使用 Rest 模板会显示子客户端上的所有标头

我正在使用 Feign Builder 发出顺序请求。请求标题中没有 x-b3-traceid,x-b3-spanid .. 。这就是为什么我的最后一个客户的日志出现在 zipkin 上。

我使用 spring boot 2.4.2 、 spring cloud 2020.0.0 、 feign-core 10.10.1 、 feign-okhttp 10.10.1 。我尝试过 spring-cloud-openfeign 并取得了想要的结果。但我不想使用这个库。这里有使用 Feign Builder 和 Rest Template 时的请求。我在 zipkin 上没有看到相同的日志。

我的 Client1 应用程序。我正在发送请求 http://localhost:8082/

import feign.Client;
import feign.Feign;
import feign.RequestInterceptor;
import feign.codec.Decoder;
import feign.codec.Encoder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.sleuth.Span;
import org.springframework.cloud.sleuth.Tracer;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpMethod;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import sample.feign2.Client2Feign;

import javax.servlet.http.HttpServletRequest;
@RestController
public class SampleController {

    private Logger logger …
Run Code Online (Sandbox Code Playgroud)

zipkin spring-boot spring-cloud-sleuth openfeign

5
推荐指数
1
解决办法
2854
查看次数

Spring Cloud Sleuth 与 Elastic APM

是否可以向 Elastic APM 提供 Spring Cloud Sleuth(针对 Webflux 项目)的 Tracers 和 Spans?

我已经在 Spring Webflux 的上下文中看到了对该问题的讨论。这里是 Spring Cloud Sleuth 的背景

spring elasticsearch project-reactor spring-cloud-sleuth elastic-apm

5
推荐指数
0
解决办法
649
查看次数