zipkin mysql edgware_SpringCloud学习之sleuth&zipkin

一。调用链跟踪的必要性

首先我们简单来看一下下单到支付的过程,别的不多说,在业务复杂的时候往往服务会一层接一层的调用,当某一服务环节出现响应缓慢时会影响整个服务的响应速度,由于业务调用层次很“深”,那么在排查问题的时候也会更加困难,如果有一种机制帮我们监控、收集这些服务之间层层调用的时间与逻辑关系是否会助于我们排查问题呢?要解决这个问题。我们就必须借助于分布式服务跟踪系统的力量了

3528aa5dd3859c5f6cb27410a2c31ceb.png

一般的,一个分布式服务跟踪系统,主要有三部分:数据收集、数据存储和数据展示。根据系统大小不同,每一部分的结构又有一定变化。譬如,对于大规模分布式系统,数据存储可分为实时数据和全量数据两部分,实时数据用于故障排查(troubleshooting),全量数据用于系统优化。那么我在贴一张图,此图是spring-cloud-sleuth的概念图:

64246bf290e38a928c9949d470fcd75a.png

初次看这个图会有点迷糊,因为有一些名词需要大家了解一下

trace:是指我们从服务开始到服务执行的终点的一次完整的请求与相应。

span: 在一次完整的trace过程中,每调用一个服务都会记录调用信息与响应时间,这个就是span

由此我们可以得出一个结论就是:一次trace由若干个span构成,sleuth是用于调用链追踪,通过sleuth我们可以轻易的追踪到trace经过了哪几个服务,每个服务花费的时间等,而zipkin是一个开源的追踪系统,它负责收集,存储数据并展示给用户。Zipkin提供了可插拔数据存储方式:In-Memory、MySql、Cassandra以及Elasticsearch。

二。spring-cloud-sleuth的快速使用

注意SpringCloud的Finchley M8版本的sleuth和zipkin的包还有点冲突,因此我使用Edgware SR2的版本,此版本对应的SpringBoot的版本是1.5.10.RELEASE,我们还是基于以下项目模块构建:

264bd0d8225bc9610ef54fdf422d9447.png

1. 添加启动zipkin服务zipkin-server模块

gradle配置:

dependencies {

compile('org.springframework.cloud:spring-cloud-starter-eureka')

compile('io.zipkin.java:zipkin-server')

compile('io.zipkin.java:zipkin-autoconfigure-ui')

}

application.yml配置

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

server:

port:8200eureka:

client:

service-url:

defaultZone: http://localhost:8000/eureka

spring:

application:

name: zipkin-server

View Code

定义启动类:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

packagecom.hzgj.lyrk.zipkin.server;importorg.springframework.boot.SpringApplication;importorg.springframework.boot.autoconfigure.SpringBootApplication;importorg.springframework.cloud.client.discovery.EnableDiscoveryClient;importzipkin.server.EnableZipkinServer;

@EnableZipkinServer

@EnableDiscoveryClient

@SpringBootApplicationpublic classZipkinServerApplication {public static voidmain(String[] args) {

SpringApplication.run(ZipkinServerApplication.class, args);

}

}

View Code

当我们启动成功后,访问http://localhost:8200/可以看到如下界面:

4e2e0d6784efa21a676909a385d32628.png

由于我们没有配置监控的服务内容,因此在zipkin里并没有统计数据

2.处理要跟踪的服务模块

tips:在这里gateway-server为网关模块使用zuul来实现,通过网关调用order-server。

分别在要进行服务追踪的模块gateway-server里添加如下依赖:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

compile('org.springframework.cloud:spring-cloud-starter-eureka-server')

compile('org.springframework.cloud:spring-cloud-sleuth-zipkin')

compile'org.springframework.cloud:spring-cloud-starter-sleuth'

View Code

在application.yml里的配置:

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

spring:

zipkin:

base-url: http://localhost:8200

sleuth:

sampler:

percentage:1.0

View Code

spring.zipkin.baseUrl是指我们启动的zipkin-server服务地址

spring.sleuth.sampler.percentage 是代表采样率,值越大就代表采样的频率越高 默认为0.1 最大为1.0(即每次请求都进行跟踪)

分别启动gateway-server与order-server并通过gateway-server访问order-server若干次后,我们在通过zipkin查找按钮来访问结果,如下:

39d71049d2522f1026df225299b2e52b.png

4921732df5b5c372120290d745744f67.png

在这里面我们留意几个问题:

1)通过上述的配置,sleuth每次将监控的span通过http请求发送到zipkin-server会浪费一些性能,同时如果zipkin-server出现问题时,数据容易产生丢失

2)在本例当中,数据存到内存当中,数据量过大容易产生OOM错误

在以后的篇幅中会给出这些问题的解决方案。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值