Spring Cloud Sleuth+Zipkin实践

一个由微服务构成的应用系统通过服务来划分问题域,通过REST请求服务API来连接服务来完成完整业务。对于入口的一个调用可能需要有多个后台服务协同完成,链路上任何一个调用超时或出错都可能造成前端请求的失败。服务的调用链也会越来越长,并形成一个树形的调用链。随着服务的增多,对调用链的分析也会越来越复杂。

针对服务化应用全链路追踪的问题,Google发表了Dapper论文,介绍了他们如何进行服务追踪分析。其基本思路是在服务调用的请求和响应中加入ID,标明上下游请求的关系。利用这些信息,可以可视化地分析服务调用链路和服务间的依赖关系。

对应Dpper的开源实现是Zipkin,支持多种语言包括JavaScript,Python,Java, Scala, Ruby, C#, Go等。其中Java由多种不同的库来支持。

Spring Cloud Sleuth是对Zipkin的一个封装,对于Span、Trace等信息的生成、接入HTTP Request,以及向Zipkin Server发送采集信息等全部自动完成。

1. Server 端

1)pom.xml中引入

io.zipkin.java

zipkin-server

io.zipkin.java

zipkin-autoconfigure-ui

io.zipkin.java

zipkin-autoconfigure-storage-mysql

2)主类开启监控:@EnableEurekaClient,@EnableZipkinServer

3)配置 eureka.instance.client.serviceUrl.defaultZone

4)创建zipkin的db实例,配置用户权限,创建相关表 zipkin_annotations,zipkin_dependencies,zipkin_spans

5)配置zipkin存储的db内容:

zipkin:

ui:

environment: zipkin

storage:

type: mysql

mysql:

host: localhost

port: 3306

db: zipkin

username: username

password: password

2. Client 端

1)pom.xml中引入

org.springframework.cloud

spring-cloud-starter-sleuth

org.springframework.cloud

spring-cloud-starter-zipkin

2)配置连接的server端地址及采样率

spring:

zipkin:

enabled: true

base-url: http://localhost:9411

sleuth:

sampler:

#采样率, 默认0.1

percentage: 1.0

注意:

1. db实例,表,需手工创建,否则zipkin-server虽然不会报错,但无法采集数据

2. 每1次request生成一个traceId,中间有N个service层,则生成N个spanId,写入spans,annotaions

你可能感兴趣的:(Spring Cloud Sleuth+Zipkin实践)