On this page
156. Spring CloudSleuth
Spring CloudSleuth是用于 Spring Boot 应用程序的工具框架。它捕获跟踪信息,并将跟踪转发到 Zipkin 之类的服务以进行存储和分析。
Google Cloud Platform 提供了自己的托管分布式跟踪服务Stackdriver Trace。您可以使用 Stackdriver Trace 来存储跟踪,查看跟踪详细信息,生成延迟分布图以及生成性能回归报告,而不必运行和维护自己的 Zipkin 实例和存储。
该 Spring Cloud GCP Starter程序无需中间 Zipkin 服务器即可将 Spring Cloud Sleuth 跟踪转发到 Stackdriver Trace。
使用 Spring Cloud GCP BOM 进行 Maven 坐标:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-gcp-starter-trace</artifactId>
</dependency>
Gradle coordinates:
dependencies {
compile group: 'org.springframework.cloud', name: 'spring-cloud-gcp-starter-trace'
}
您必须从 Google Cloud Console 启用 Stackdriver Trace API 才能捕获跟踪。导航到项目的Stackdriver Trace API并确保已启用它。
Note
如果您已经在使用 Zipkin 服务器捕获来自多个平台/框架的跟踪信息,则还可以使用Stackdriver Zipkin 代理将这些跟踪转发到 Stackdriver Trace,而无需修改现有应用程序。
156.1 Tracing
Spring Cloud Sleuth 使用Brave tracer生成跟踪。这种集成使 Brave 可以使用StackdriverTracePropagation传播。
传播负责从实体中提取跟踪上下文(例如 HTTP Servlet 请求),并将跟踪上下文注入到实体中。传播用法的一个典型示例是接收 HTTP 请求的 Web 服务器,该 Web 服务器在将 HTTP 响应返回给原始调用者之前会触发来自服务器的其他 HTTP 请求。对于StackdriverTracePropagation
,首先会在x-cloud-trace-context
键(例如 HTTP 请求 Headers)中查找跟踪上下文。 x-cloud-trace-context
键的值可以用三种不同的方式设置格式:
x-cloud-trace-context: TRACE_ID
x-cloud-trace-context: TRACE_ID/SPAN_ID
x-cloud-trace-context: TRACE_ID/SPAN_ID;o=TRACE_TRUE
TRACE_ID
是一个 32 个字符的十六进制值,它编码一个 128 位数字。
SPAN_ID
是无符号的长整数。由于 Stackdriver Trace 不支持 Span 联接,因此始终生成一个新的 SpanID,而不管x-cloud-trace-context
中指定的 ID 如何。
TRACE_TRUE
可以是0
(如果应 traceback 实体),也可以是1
(如果应 traceback 实体)。该字段强制决定是否跟踪请求。如果省略,则将决定推迟到采样器。
如果找不到x-cloud-trace-context
键,则StackdriverTracePropagation
会回退到使用X-B3 headers进行跟踪。
156.2 用于 Stackdriver Trace 的 Spring Boot Starter
用于 Stackdriver Trace 的 Spring Boot Starter 使用 Spring Cloud Sleuth 并自动配置StackdriverSender,该StackdriverSender将 Sleuth 的跟踪信息发送到 Stackdriver Trace。
所有配置都是可选的:
Name | Description | Required | Default value |
spring.cloud.gcp.trace.enabled |
自动配置 Spring Cloud Sleuth 以将跟踪发送到 Stackdriver Trace。 | No | true |
spring.cloud.gcp.trace.project-id |
覆盖Spring Cloud GCP 模块中的项目 ID | No | |
spring.cloud.gcp.trace.credentials.location |
覆盖Spring Cloud GCP 模块中的凭据位置 | No | |
spring.cloud.gcp.trace.credentials.encoded-key |
覆盖Spring Cloud GCP 模块中的凭据编码密钥 | No | |
spring.cloud.gcp.trace.credentials.scopes |
覆盖Spring Cloud GCP 模块中的凭据范围 | No | |
spring.cloud.gcp.trace.num-executor-threads |
跟踪执行程序使用的线程数 | No | 4 |
spring.cloud.gcp.trace.authority |
通道声称要连接的 HTTP/2 权限。 | No | |
spring.cloud.gcp.trace.compression |
在 Trace 调用中使用的压缩名称 | No | |
spring.cloud.gcp.trace.deadline-ms |
通话截止时间(以毫秒为单位) | No | |
spring.cloud.gcp.trace.max-inbound-size |
入站邮件的最大大小 | No | |
spring.cloud.gcp.trace.max-outbound-size |
出站邮件的最大大小 | No | |
spring.cloud.gcp.trace.wait-for-ready |
awaitChannels 准备就绪如果出现短暂故障 | No | false |
您可以使用核心 Spring Cloud Sleuth 属性来控制 Sleuth 的采样率等。请阅读Sleuth documentation以获取有关 Sleuth 配置的更多信息。
例如,当您测试以查看走线时,可以将采样率设置为 100%。
spring.sleuth.sampler.probability=1 # Send 100% of the request traces to Stackdriver.
spring.sleuth.web.skipPattern=(^cleanup.*|.+favicon.*) # Ignore some URL paths.
Spring Cloud GCP Trace 确实会覆盖一些 Sleuth 配置:
始终使用 128 位跟踪 ID。这是 Stackdriver Trace 所必需的。
不使用跨接。Span 联接将在 Client 端和服务器 Span 之间共享 SpanID。 Stackdriver 要求跟踪中的每个 Span ID 都是唯一的,因此不支持 Span 联接。
默认情况下使用
StackdriverHttpClientParser
和StackdriverHttpServerParser
填充与 Stackdriver 相关的字段。
156.3 与日志记录集成
可通过Stackdriver 记录支持与 Stackdriver Logging 集成。如果将“跟踪”集成与“日志记录”一起使用,则请求日志将与相应的跟踪相关联。可以通过转到Google Cloud Console 追踪清单,选择一条跟踪并按Details
部分中的Logs → View
链接来查看跟踪日志。