借鉴于Dapper(谷歌), Zipkin(twitter)和Htrace(Apache).
介绍
sleuth介绍
sleuth的术语源自 Dapper, 主要概念如下:
Span: 基本工作单位, 每次rpc请求或者响应就是一个span. 每个span有64个位id, 同时有个64位traceId.
Trace: 一系列span构成的调用树.
Annotation: 实时记录事件. 事件类型如下:
cs: Client Sent, 客户端发送
sr: Server Received, 服务端接收
ss: Server Sent, 服务端发送
cr: Client Received, 客户端接收
sleuth主要实现了以下功能:
为日志增加MDC(traceId, spanId)
提供分布式追踪模型的抽象
为spring应用调用方式(servlet filter, rest template, feign等)提供接入和接出点
如果集成spring-cloud-sleuth-zipkin, 可以通过http将追踪信息同步到zipkin服务器
目的: 微服务链路追踪, 错误可视化
zipkin介绍
openZipkin是分布式追踪系统. 可以帮助可视化跟踪整个调用链路, 发现微服务的延时问题.
zipkin是基于SpringBoot构建的, 1.x版本支持构建自定义的zipkin服务器. 自zipkin2.0开始, 官方不推荐使用自定义服务器, 建议直接通过docker或者jar运行.
系统框架如下图所示:
其中:
instrumented client/server: 集成了追踪系统的微服务
Java: brave
Go: zipkin-go
js: zipkin-js
…
transport: 数据传输方式
database: 数据库
Zipkin:
Collector: 收集器
Storage: 存储
Api: 接口服务
UI: 展示界面
使用
添加maven依赖:
<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>
日志格式:
2016-02-02 15:30:57.902 INFO [bar,6bfd228dc00d216b,6bfd228dc00d216b,false] 23030 --- [nio-8081-exec-3] ...
2016-02-02 15:30:58.372 ERROR [bar,6bfd228dc00d216b,6bfd228dc00d216b,false] 23030 --- [nio-8081-exec-3] ...
2016-02-02 15:31:01.936 INFO [bar,46ab0d418373cbc9,46ab0d418373cbc9,false] 23030 --- [nio-8081-exec-4] ...
其中MDC格式为: [appname,traceId,spanId,exportable]
至此所有logback日志框架打印的日志均会带有上述traceid信息.
添加bootstrap.yml添加配置(替换localhost)
spring:
zipkin:
baseUrl: localhost:9411
添加后在trace服务器就能看到调用日志了.