演示地址:http://139.196.87.48:9002/kitty前端
用户名:admin 密码:admingit
在微服务架构中,随着业务发展,系统拆分致使系统调用链路愈发复杂,一个看似简单的前端请求可能最终须要调用不少次后端服务才能完成,那么当整个请求出现问题时,咱们很可贵知究竟是哪一个服务出了问题致使的,这时就须要解决一个问题,如何快速定位服务故障点,因而,分布式系统调用链追踪技术就此诞生了。web
Zipkin 是一个由Twitter公司提供并开放源代码分布式的跟踪系统,它能够帮助收集服务的时间数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展示。spring
每一个服务向zipkin报告定时数据,zipkin会根据调用关系经过Zipkin UI生成依赖关系图,展现了多少跟踪请求通过了哪些服务,该系统让开发者可经过一个 Web 前端轻松的收集和分析数据,例如用户每次请求服务的处理时间等,可很是方便的监测系统中存在的瓶颈。docker
Zipkin提供了可插拔数据存储方式:In-Memory、MySql、Cassandra以及Elasticsearch。咱们能够跟根据需求选择不一样的存储方式,生成环境通常都须要持久化。咱们这里采用elasticsearch做为zipkin的数据存储器。数据库
通常而言,一个分布式服务追踪系统,主要有三部分组成:数据收集、数据存储和数据展现。后端
Spring Cloud Sleuth为服务之间的调用提供链路追踪,经过Sleuth能够很清楚的了解到一个服务请求通过了哪些服务,每一个服务处理花费了多长。从而让咱们能够很方便的理清各微服务间的调用关系。此外,Sleuth还能够帮助咱们:架构
耗时分析: 经过Sleuth能够很方便的了解到每一个采样请求的耗时,从而分析出哪些服务调用比较耗时。app
可视化错误: 对于程序未捕捉的异常,能够经过集成Zipkin服务界面上看到。elasticsearch
链路优化: 对于调用比较频繁的服务,能够针对这些服务实施一些优化措施。
spring cloud sleuth能够结合zipkin,将信息发送到zipkin,利用zipkin的存储来存储信息,利用zipkin ui来展现数据。
在早前的Spring Cloud版本里是须要自建zipkin服务端的,可是从SpringCloud2.0 之后,官方已经不支持自建Server了,改为提供编译好的jar包供用户使用。由于我用的是2.0之后的版本,自建Servcer的方式请自行百度。这里咱们是使用docker方式部署zipkin服务,并采用elasticsearch做为zipkin的数据存储器。
此前请先安装好docker环境,使用如下命令分别拉取zipkin和elasticsearch镜像。
docker pull openzipkin/zipkin docker pull docker.elastic.co/elasticsearch/elasticsearch:6.3.0
经过 docker images 查看下载镜像。
在本地建立以下文件夹结构, data目录用来存放elasticsearch存储的数据。
dockerfile |- elasticsearch | |- data |- docker-compose.yml
编写docker-compose文件,主要做用是批量启动容器,避免在使用多个容器的时候逐个启动的繁琐。
docker-compose.yml
version: "3" services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:6.3.0 container_name: elasticsearch restart: always networks: - elk ports: - "9200:9200" - "9300:9300" volumes: - ../elasticsearch/data:/usr/share/elasticsearch/data zipkin: image: openzipkin/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
执行过程以下图所示。
执行完成以后,经过 docker ps 命令查看,发现zipkin和elasticsearch确实启动起来了。
到这里,zipkin服务端就搭建起来了,访问 http://localhost:9411,效果以下,由于尚未客户端,因此尚未数据。
注意:
这里咱们采用了elasticsearch做为存储方式,若是想简单经过内存方式启动,无须安装elasticsearch,直接启动一个zipkin容器便可。
docker run -d -p 9411:9411 openzipkin/zipkin
若是想使用其余如数据库等方式存储,请查询相关配置文档。
zipkin服务端已经搭建完成了,接下来咱们来实现客户端。
修改 kitty-consumer 项目Maven配置,添加zipkin依赖。
pom.xml
<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,正式环境通常使用默认值。
application.yml
server: port: 8005 spring: application: name: kitty-consumer cloud: consul: host: localhost port: 8500 discovery: serviceName: ${spring.application.name} # 注册到consul的服务名称 boot: admin: client: url: "http://localhost:8000" zipkin: base-url: http://localhost:9411/ sleuth: sampler: probability: 1 #样本采集量,默认为0.1,为了测试这里修改成1,正式环境通常使用默认值。 # 开放健康检查接口 management: endpoints: web: exposure: include: "*" endpoint: health: show-details: ALWAYS #开启熔断器 feign: hystrix: enabled: true
前后启动注册中心、服务监控、服务提供者、服务消费者。
反复访问几回 http://localhost:8005/feign/call,产生zipkin数据。
再次访问 http://localhost:9411, 发现出现了咱们刚刚访问的服务,选择并点击追踪。
点击追踪以后,页面显示了相关的服务调用信息。
点击调用记录查看详情页面,能够看到每个服务所耗费的时间和顺序。
后端:https://gitee.com/liuge1988/kitty
前端:https://gitee.com/liuge1988/kitty-ui.git
做者:朝雨忆轻尘
出处:https://www.cnblogs.com/xifengxiaoma/ 版权全部,欢迎转载,转载请注明原文做者及出处。