标签: spring-cloud-sleuth

Spring Cloud Sleuth 不同的跟踪 ID 与 Kafka 集成

我在微服务之间使用 Kafka 进行异步调用,我正在使用 Spring Sleuth 进行日志记录。日志没问题,但是当有消息从微服务1到微服务2时,日志的消息有不同的Trace-ID。他们不是必须具有相同的 trace-Id 但具有不同的 SpanId 吗?有什么特别的配置吗?

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

3
推荐指数
1
解决办法
3639
查看次数

Spring Cloud sleuth 是如何工作的?

Spring Cloud sleuth 如何在幕后工作?它还能跟踪库调用吗?。我有一个使用库 B 的 Spring Boot 项目 A。对项目 A 中端点的任何命中都由侦探跟踪,但是当我尝试命中库 B 上的休息控制器时,侦探无法跟踪请求。有没有办法告诉侦探跟踪库调用?

spring-boot spring-cloud spring-cloud-sleuth

3
推荐指数
1
解决办法
1413
查看次数

Spring boot 2.0.5.RELEASE - sleuth 和mockito

我已经尝试解决这个问题一周了,但一点运气都没有。问题出在单元测试上。

这是我要测试的课程:

import brave.Span;
import brave.Tracer;

@Service
public class InternetBackEndRestClient {

    @Autowired
    private Tracer tracer;

  public PasswordJwtResponse generatePassworJwt(PasswordJwtRequest passwordJwtRequest, String traceId) throws LogonProxyException {
      log.info("{\"Starting method\": \"generatePassworJwt\", \"input\": {} }", passwordJwtRequest);

    Span newSpan = tracer.nextSpan().name("spanPasswordJwtResponse");
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能进行单元测试?Brave.Tracer 是最后一堂课,因此我无法嘲笑它。无论如何要设置上下文吗?或模拟追踪器?

@RunWith(MockitoJUnitRunner.class)
public class InternetBackEndRestClientTest {

   @InjectMocks
   private InternetBackEndRestClient internetBackEndRestClient; 

   @Mock
   private Tracer tracer; 

   @Test
   public void generatePassworJwt_test() { 
      internetBackEndRestClient.generatePassworJwt(...);
      ....
   }
}
Run Code Online (Sandbox Code Playgroud)

有人可以帮我吗?

mockito spring-boot spring-cloud-sleuth spring-boot-test

3
推荐指数
1
解决办法
8122
查看次数

spring-boot/spring cloud 升级后,Spring Cloud Sleuth 停止将 X-B3-TraceId 推送到 MDC

我已将 Spring boot 依赖项从2.1to2.4.5和 spring cloud升级到2020.0.2. 升级后,我的 MDC 上下文未填充。

关于这里应该做什么有什么想法吗?

spring-boot spring-cloud spring-cloud-sleuth

3
推荐指数
1
解决办法
7255
查看次数

Spring Sleuth 坚持向 Zipkin 发送 10% 的请求

默认情况下,Spring Sleuth 只向 Zipkin 发送 10% 的请求。通过设置,spring.sleuth.sampler.percentage您可以增加百分比。不幸的是,无论我将其设置为什么值,它都停留在 10%。我试过 1.0、0.5、1、100。

输出来自 /env

            "spring.sleuth.sampler.percentage": {
                "value": 1,
                "origin": "class path resource [application.yml]:77:19"
            }
Run Code Online (Sandbox Code Playgroud)

不管价值如何,当我提出多个请求时,只有 10% 的请求到达 Zipkin。

我们使用的是 Spring Cloud 的 Finchley.M8 版本和 Spring Boot 的 2.0.0.RELEASE 版本。

下面是相关的 POM 设置。

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

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

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

这可能是一个错误吗?

zipkin spring-cloud spring-cloud-sleuth

2
推荐指数
1
解决办法
2633
查看次数

春季侦探行李传播未传播/工作

我们目前使用的是 sleuth 2.2.3.RELEASE,我们看不到 http 标头中传递的 userId 字段没有传播。下面是我们的代码。

BaggageField REQUEST_ID = BaggageField.create("x-vcap-request-id");
    BaggageField USER_ID = BaggageField.create("userId");
    
    Tracing.newBuilder().propagationFactory(
            BaggagePropagation.newFactoryBuilder(B3Propagation.FACTORY)
            .add(SingleBaggageField.remote(REQUEST_ID))
            .add(SingleBaggageField.newBuilder(USER_ID).addKeyName("baggage-user-id").build())
            .build());
Run Code Online (Sandbox Code Playgroud)

我们怀疑 YML 文件中存在某些问题。我们尝试了以下所有选项,但没有一个有效。

#1 baggage-keys: baggage-user-id 
#2 propagation-keys: baggage-user-id
#3 baggage-keys: user-id 
Run Code Online (Sandbox Code Playgroud)

在日志中:

%X{行李用户 ID:-}

我们在 http 标头中传递 userId。

spring spring-cloud-sleuth

2
推荐指数
1
解决办法
5902
查看次数

在 Sleuth 日志中看不到 TraceId 和 spanId

我已经开始学习 Sleuth,但我陷入了日志配置。

\n

我有这个配置:

\n
    <?xml version="1.0" encoding="UTF-8"?>\n<configuration>\n    <include resource="org/springframework/boot/logging/logback/defaults.xml"/>\n    \xe2\x80\x8b\n    <springProperty scope="context" name="springAppName" source="spring.application.name"/>\n    <!-- Example for logging into the build folder of your project -->\n    <property name="LOG_FILE" value="C://tmp//test"/>\xe2\x80\x8b\n\n    <property name="CONSOLE_LOG_PATTERN"\n              value="%clr(%d{yyyy-MM-dd HH:mm:ss.SSS}){faint} %clr(${LOG_LEVEL_PATTERN:-%5p}) %clr([${springAppName:-},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}]){yellow} %clr(${PID:- }){magenta} %clr(---){faint} %clr([%15.15t]){faint} %clr(%-40.40logger{39}){cyan} %clr(:){faint} %m%n${LOG_EXCEPTION_CONVERSION_WORD:-%wEx}"/>\n\n    <!-- Appender to log to console -->\n    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">\n        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">\n            <level>INFO</level>\n        </filter>\n        <encoder>\n            <pattern>${CONSOLE_LOG_PATTERN}</pattern>\n            <charset>utf8</charset>\n        </encoder>\n    </appender>\n    \xe2\x80\x8b\n    <!-- Appender to log to file in a JSON format -->\n    <appender name="logstash" class="ch.qos.logback.core.rolling.RollingFileAppender">\n        <file>${LOG_FILE}.json</file>\n        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">\n …
Run Code Online (Sandbox Code Playgroud)

java logging spring-boot spring-cloud-sleuth

2
推荐指数
1
解决办法
6557
查看次数

spring cloud sleuth 如何将跟踪信息添加到 logback 日志行

我有基于 Spring Boot 的 Web 应用程序,它使用 logback 进行日志记录。

我还使用以下命令从 Spring Boot 继承了一些 logback 默认值:

<include resource="org/springframework/boot/logging/logback/base.xml"/>
Run Code Online (Sandbox Code Playgroud)

我想开始记录跟踪信息,所以我补充道:

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

Sleuth 将跟踪信息添加到日志行,但我找不到任何%X%mdc模式:https : //github.com/spring-projects/spring-boot/blob/2.3.x/spring-boot-project/spring-boot /src/main/resources/org/springframework/boot/logging/logback/defaults.xml

Sleuth 如何将跟踪信息添加到日志行中?

我使用spring-cloud-starter-parent Hoxton.SR9父母带来Spring Boot 2.3.5.RELEASEspring-cloud-starter-sleuth 2.2.6.RELEASE

logback spring-boot spring-cloud-sleuth

2
推荐指数
1
解决办法
1290
查看次数

在 Spring Cloud Sleuth 中保持 CompletableFuture 的跟踪/跨度

我正在将 Sleuth 与CompletableFuture.handle. 例子:

log.info("first");
apnsClient.sendNotification(...).handle((response, cause) -> {
     log.info("second");
});
Run Code Online (Sandbox Code Playgroud)

我希望second日志具有与first日志相同的跟踪 ID。然而,事实并非如此。因此我想知道该怎么办?谢谢!

PS 我无法控制如何apnsClient.sendNotification管理线程(因为它来自Pushy),因此无法使用LazyTraceExecutor之类的东西。

java spring spring-cloud completable-future spring-cloud-sleuth

2
推荐指数
1
解决办法
2570
查看次数

如何在SpringBoot 3中配置zipkin的baseUrl

我们将 Jaeger 设置为主要跟踪 istio 代理之间的调用。我尝试在应用程序内部使用跟踪,在日志中包含任何traceId/spanId,并向 Jaeger 收集器报告应用程序中创建的任何跨度。

我们的大多数微服务仍然运行 Spring Boot 2。有些已经升级到 Spring Boot 3。

我已经让它在 Spring Boot2 中工作得令人满意。

我包含以下依赖项:

<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>
<dependency>
  <groupId>io.opentracing.brave</groupId>
  <artifactId>brave-opentracing</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

并在application.yaml中设置以下内容

spring:
  application:
    name: our-service
  sleuth:
    propagation:
      type: B3,W3C
    opentracing:
      enabled: true
  zipkin:
    base-url: <url to our jaeger collector>:9411
Run Code Online (Sandbox Code Playgroud)

对于我们的 Spring Boot 3 应用程序,我添加了以下依赖项,而不是上面的依赖项:

<dependency>
  <groupId>io.micrometer</groupId>
  <artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>
<dependency>
  <groupId>io.zipkin.reporter2</groupId>
  <artifactId>zipkin-reporter-brave</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

并在 application.yaml 中添加与上面相同的配置,但还添加了:

logging:
  pattern:
    level: "%5p [${spring.application.name},%X{traceId:-},%X{spanId:-}]"
Run Code Online (Sandbox Code Playgroud)

当我在测试环境中运行两个应用程序时,我可以看到两个应用程序的日志中都显示了traceId,并且我也可以在 jaeger UI 中找到这些traceId,包括在 SpringBoot 2 应用程序中创建的跨度。除了应该来自 SpringBoot 3 …

zipkin spring-boot spring-cloud-sleuth jaeger micrometer-tracing

2
推荐指数
1
解决办法
5578
查看次数