技术背景

在微服务架构中,随着业务发展,系统拆分导致系统调用链路愈发复杂,一个看似简单的前端请求可能最终需要调用很多次后端服务才能完成,那么当整个请求出现问题时,我们很难得知到底是哪个服务出了问题导致的,这时就需要解决一个问题,如何快速定位服务故障点,于是,分布式系统调用链追踪技术就此诞生了。

ZipKin

Zipkin 是一个由Twitter公司提供并开放源代码分布式的跟踪系统,它可以帮助收集服务的时间数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。

每个服务向zipkin报告定时数据,zipkin会根据调用关系通过Zipkin UI生成依赖关系图,展示了多少跟踪请求经过了哪些服务,该系统让开发者可通过一个 Web 前端轻松的收集和分析数据,例如用户每次请求服务的处理时间等,可非常方便的监测系统中存在的瓶颈。

Zipkin提供了可插拔数据存储方式:In-Memory、MySql、Cassandra以及Elasticsearch。我们可以跟根据需求选择不同的存储方式,生成环境一般都需要持久化。我们这里采用elasticsearch作为zipkin的数据存储器。

Spring Cloud Sleuth

一般而言,一个分布式服务追踪系统,主要有三部分组成:数据收集、数据存储和数据展示。

Spring Cloud Sleuth为服务之间的调用提供链路追踪,通过Sleuth可以很清楚的了解到一个服务请求经过了哪些服务,每个服务处理花费了多长。从而让我们可以很方便的理清各微服务间的调用关系。此外,Sleuth还可以帮助我们:

耗时分析: 通过Sleuth可以很方便的了解到每个采样请求的耗时,从而分析出哪些服务调用比较耗时。

可视化错误: 对于程序未捕捉的异常,可以通过集成Zipkin服务界面上看到。

链路优化: 对于调用比较频繁的服务,可以针对这些服务实施一些优化措施。

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 查看下载镜像。

编写启动文件

创建如下文件夹结构。

dockerfile|- elasticsearch|    |- data|- docker-compose.yml

docker-compose.yml

version: "3"
services:elasticsearch:image:  docker.elastic.co/elasticsearch/elasticsearch:6.3.0container_name: elasticsearchrestart: alwaysnetworks:- elkports:- "9200:9200"- "9300:9300"volumes:- ../elasticsearch/data:/usr/share/elasticsearch/datazipkin:image: openzipkin/zipkin:latestcontainer_name: zipkinrestart: alwaysnetworks:- elkports:- "9411:9411"environment:- STORAGE_TYPE=elasticsearch- ES_HOSTS=elasticsearchnetworks:elk:

关于docker-compose.yml 文件格式及相关内容请自行百度了解。

启动服务

命令模式进入dockerfile目录,执行启动命令如下。

docker-compose up -d

执行过程如下图所示。

执行完成之后,通过 docker ps 命令查看,发现zipkin和elasticsearch确实启动起来了。

到这里,zipkin服务端就搭建起来了,访问 http://localhost:9411,效果如下,因为还没有客户端,所以还没有数据。

zipkin服务端已经搭建完成了,接下来我们来实现客户端。

添加依赖

修改 spring-cloud-consul-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

测试效果

先后启动注册中心、服务提供者、服务消费者。

反复访问几次 http://localhost:8521/ribbon/call,产生zipkin数据。

再次访问 http://localhost:9411, 发现出现了我们刚刚访问的服务,选择并点击追踪。

点击追踪之后,页面显示了相关的服务调用信息。

点击调用记录查看详情页面,可以看到每一个服务所耗费的时间和顺序。

转载于:https://www.cnblogs.com/7788IT/p/10667173.html

分布式链路追踪(Sleuth、Zipkin)相关推荐

  1. 微服务治理之分布式链路追踪--3.zipkin实战

    微服务治理之分布式链路追踪–3.zipkin实战 本节是基于zipkin分布式追踪系统搭建,因为对 scala 和 play framework 2 框架不熟悉,所以,没有采用opentelemetr ...

  2. Spring Cloud 分布式链路跟踪 Sleuth + Zipkin + Elasticsearch

    2019独角兽企业重金招聘Python工程师标准>>> 随着业务越来越复杂,系统也随之进行各种拆分,特别是随着微服务架构的兴起,看似一个简单的应用,后台可能很多服务在支撑:一个请求可 ...

  3. 原来10张图就可以搞懂分布式链路追踪系统原理

    分布式系统为什么需要链路追踪? 随着互联网业务快速扩展,软件架构也日益变得复杂,为了适应海量用户高并发请求,系统中越来越多的组件开始走向分布式化,如单体架构拆分为微服务.服务内缓存变为分布式缓存.服务 ...

  4. Sleuth + Zipkin 微服务分布式链路追踪

    在开发环境中对业务问题的排查可以debugger计算时差等问题进行处理,如果架构复杂微服务嗲用众多,这样的方式就显得鸡肋. 如何快速发现问题? 如何判断故障影响范围? 如何梳理服务依赖以及依赖的合理性 ...

  5. 分布式链路追踪之Spring Cloud Sleuth夺命连环9问?

    点击上方☝码猿技术专栏 轻松关注,设为星标! 及时获取有趣有料的技术 大家好,我是不才陈某~ 这是<Spring Cloud 进阶>第九篇文章,往期文章如下: 五十五张图告诉你微服务的灵魂 ...

  6. SpringCloud技术指南系列(十五)分布式链路跟踪Sleuth与Zipkin实现

    SpringCloud技术指南系列(十五)分布式链路跟踪Sleuth与Zipkin实现 一.概述 分布式链路追踪,是一种用于分析和监控应用程序的方法,尤其是那些使用微服务架构的那些应用.分布式链路跟踪 ...

  7. 分布式链路追踪zipkin

    分布式链路追踪 分布式链路追踪最早由谷歌的Dapper论文中提出的,提供提供简单易用的API来记录不同系统之间的调用的链路及耗时情况,从而提供各个系统的性能分析的依据. Dapper论文概述 Dapp ...

  8. 分布式链路追踪系统深入理解

    背景 对于普通系统或者服务来说,一般通过打日志来进行埋点,然后再通过elk进行定位及分析问题,更有甚者直接远程服务器,使用各种linux命令单手操作查看日志,说到这,我也没摆脱这种困境.那么随着业务越 ...

  9. 分布式链路追踪深入了解

    分布式链路追踪系统 背景 对于普通系统或者服务来说,一般通过打日志来进行埋点,然后再通过elk进行定位及分析问题,更有甚者直接远程服务器,使用各种linux命令单手操作查看日志,说到这,我也没摆脱这种 ...

  10. 分布式链路追踪之SkyWalking

    一 链路追踪简介   在微服务架构中,一次请求往往涉及到多个模块,多个中间件,多台机器的相互协作才能完成.这一系列调用请求中,有些是串行的,有些是并行的,那么如何确定这个请求背后调用了哪些应用,哪些模 ...

最新文章

  1. iOS原生与html交互 使用第三方WebViewJavascriptBridge
  2. Linux 内核开发特点
  3. 设计sample语言的词法分析器_重现木兰编程语言(十)——比较、循环,一个语法设计特色
  4. 数据结构与算法 | 斐波那契查找
  5. 转:elasticsearch nested嵌套查询
  6. 1-4 TCP/IP协议族
  7. 工业视觉中的目标检测——兼谈天池大赛优胜方案
  8. udp 协议阻断_应对UDP反射放大攻击的五种常用防护思路
  9. python爬取+BI分析5000条内衣数据,发现妹子最爱这款文胸
  10. mysql 命令as 使用_【翻译自mos文章】使用asmcmd命令在本地和远程asm实例之间拷贝as...
  11. linux进程假死的原因_linux下程序假死
  12. 百度云网盘一直显示“下载请求中”,一个 解决办法
  13. 音视频入门:H264、H265概念总结
  14. element-ui Form表单验证
  15. 网络传输粘包解包处理
  16. JPEG文件中默认Huffman表说明
  17. java: -source 1.6 中不支持 diamond 运算符, (请使用 -source 7 或更高版本以启用 diamond 运算符)
  18. 怎么将abaqus的数据导出_abaqus系列之二维图形导出
  19. 【IPv6】IPv6 NDP邻居状态详解
  20. 图像滤波边界处理方法对图像滤波的影响

热门文章

  1. java spit 点_java split 的一些用法注意点。
  2. shell 编程基础
  3. 华中科技大学标准c语言程序设计上机试题,答案及报告格式,华中科技大学标准C语言程序设计上机试题、答案及报告格式.pdf...
  4. 最小化安装的redhat/centos安装gnome桌面
  5. java华容道swing_一道java的界面初级题目,已有代码,加几行即可,华容道游戏。...
  6. linux常用压缩/解压命令
  7. @Controller @ResponseBody @RestController的基本含义与使用方法
  8. 学python的注意点_python学习入门细节知识点
  9. C++ main函数中参数argc和argv相关定义与研究
  10. 基于GDAL的一个通用的3×3模板函数