服务说明
Zipkin是什么
Zipkin分布式跟踪系统;它可以帮助收集时间数据,解决在microservice架构下的延迟问题;它管理这些数据的收集和查找;Zipkin的设计是基于谷歌的Google Dapper论文。
每个应用程序向Zipkin报告定时数据,Zipkin UI呈现了一个依赖图表来展示多少跟踪请求经过了每个应用程序;如果想解决延迟问题,可以过滤或者排序所有的跟踪请求,并且可以查看每个跟踪请求占总跟踪时间的百分比。
为什么使用Zipkin
随着业务越来越复杂,系统也随之进行各种拆分,特别是随着微服务架构和容器技术的兴起,看似简单的一个应用,后台可能有几十个甚至几百个服务在支撑;一个前端的请求可能需要多次的服务调用最后才能完成;当请求变慢或者不可用时,我们无法得知是哪个后台服务引起的,这时就需要解决如何快速定位服务故障点,Zipkin分布式跟踪系统就能很好的解决这样的问题。
服务搭建
服务端
从SpringCloud2.0 以后,官方已经不支持自定义服务,官方只提供编译好的jar包供用户使用。
这里我们采用docker方式部署zipkin服务,并采用elasticsearch作为zipkin的数据存储器。
下载镜像
docker pull openzipkin/zipkin
docker pull docker.elastic.co/elasticsearch/elasticsearch:6.3.0
编写启动文件
新建文件夹,目录如下
dockerfile
|- elasticsearch
| |- data
|- docker-compose.yml
编写启动文件docker-compose.yml
version: "3"
services:
elasticsearch:
image: elasticsearch:latest
container_name: elasticsearch
restart: always
networks:
- elk
ports:
- "9200:9200"
- "9300:9300"
volumes:
- ../elasticsearch/data:/usr/share/elasticsearch/data
zipkin:
image: zipkin:latest
container_name: zipkin
restart: always
networks:
- elk
ports:
- "9411:9411"
environment:
- STORAGE_TYPE=elasticsearch
- ES_HOSTS=elasticsearch
networks:
elk:
关于docker-compose.yml 文件格式及相关内容请自行百度了解。
启动服务
命令模式进入dockerfile目录,执行启动命令
docker-compose up -d
客户端搭建
修改pom文件
增加zipkin依赖
<!-- 分布式链路追踪 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
修改配置文件
增加zipkin相关配置
spring:
zipkin:
base-url: http://localhost:9411/
sleuth:
sampler:
probability: 1 #样本采集量,默认为0.1,为了测试这里修改为1,正式环境一般使用默认值。
为了验证效果,必须有两个客户端,一个提供接口,一个调用接口,这里就不写第二个客户端搭建了,如果有不懂的可以参考之前的博文。
代码样例
客户端: