![](/img/trans.png)
[英]Sleuth traceId and spanId are not propagated to parallelStream worker threads
[英]Sleuth log traceId not propagated to another service
我嘗試在我的微服務中添加分布式跟蹤(在Azure的Kubernetes下)。
我在父pom.xml中添加了依賴項:
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.1.RELEASE</version>
<relativePath/>
</parent>
<dependencies>
{...}
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-core</artifactId>
<version>1.1.3.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
<version>1.1.3.RELEASE</version>
</dependency>
</dependencies>
<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>
我使用1.4.1和CAMDEN.SR4,因為fabric8 kubeflix不支持較新的版本。 我強迫1.1.3.RELEASE嘗試最新版本的偵探,以查看它是否是較早版本的偵探中的錯誤。
我使用logback-spring.xml的此配置:
<configuration>
<include resource="org/springframework/boot/logging/logback/defaults.xml"/>
<springProperty scope="context" name="springAppName" source="spring.application.name"/>
<jmxConfigurator/>
<property name="CONSOLE_LOG_PATTERN"
value="%d{yyyy-MM-dd HH:mm:ss.SSS} [${springAppName},%X{X-B3-TraceId:-},%X{X-B3-SpanId:-},%X{X-Span-Export:-}] [%thread] %-5level %logger{35} - %msg%n"/>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
</root>
<logger name="org.springframework" level="ERROR"/>
<logger name="com.netflix" level="ERROR"/>
<logger name="io.fabric8" level="ERROR"/>
<logger name="org.apache" level="ERROR"/>
</configuration>
這是我的application.yml:
spring:
zipkin:
baseUrl: http://zipkin:8080
sleuth:
sampler:
percentage: 1.0
server:
port: 8080
zipkin URL是一個Kubernetes服務,用於公開Zipkin服務器(帶有@EnableZipkinServer的Spring boot應用)
然后,我用以下代碼調用第一個服務(services-1):
private RestTemplate template = new RestTemplate();
@GetMapping("/{key}/{language}")
public String getLabel(@PathVariable String key, @PathVariable String language) throws UnknownHostException {
log.info("Entering getLabel");
String testResponse = template.getForObject("http://services-i18n-2/test", String.class);
String s = labelService.getLabel(key, language) + " " + message + " " + InetAddress.getLocalHost().getHostName() + ", response=" + testResponse;
log.info("Exiting getLabel");
return s;
}
產生這些日志:
2017-04-05T11:04:48.497345669Z 2017-04-05 11:04:48.497 [services-1,eaf3dbcb2f92091b,95dd9e6082990923,false] [XNIO-2 task-4] INFO c.l.m.i18n.web.LabelController - Entering getLabel
2017-04-05T11:04:48.519851116Z 2017-04-05 11:04:48.519 [services-1,eaf3dbcb2f92091b,95dd9e6082990923,false] [XNIO-2 task-4] DEBUG c.l.m.i18n.service.LabelService - Response Label(key=Key(value=action.login), language=Language(value=fr), value=s'authentifier)
2017-04-05T11:04:48.519864516Z 2017-04-05 11:04:48.519 [services-1,eaf3dbcb2f92091b,95dd9e6082990923,false] [XNIO-2 task-4] INFO c.l.m.i18n.web.LabelController - Exiting getLabel
如您所見,它使用RestTemplate調用services-i18n-2服務,該服務生成以下日志:
2017-04-05T11:04:48.514145894Z 2017-04-05 11:04:48.513 [services-2,e0c6495a0a598cff,e0c6495a0a598cff,true] [XNIO-2 task-4] INFO c.l.m.i18n.web.TestController - Entering test
2017-04-05T11:04:48.516430459Z 2017-04-05 11:04:48.516 [services-2,e0c6495a0a598cff,e0c6495a0a598cff,true] [XNIO-2 task-4] INFO c.l.m.i18n.web.TestController - Exiting test
如您所見,service-2(e0c6495a0a598cff)中的traceId與service-1(eaf3dbcb2f92091b)不同。
在service-2中,traceId與spanId相同。
問題:
僅供參考,我在依賴項中包含Hystrix,並刪除了@HystrixCommand,以確保Hystrix在每個HTTP調用中創建新的traceId時沒有問題。
對於1、2、3,這是因為我正在做一個新的RestTemplate。
醫生說:
您必須將RestTemplate注冊為Bean,以便注入攔截器。 如果您使用新關鍵字創建RestTemplate實例,則檢測將不起作用。
因此,RTFM自己解決了我的第三個問題:
@Bean
public RestTemplate template() {
return new RestTemplate();
}
@Autowired
private RestTemplate template;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.