Spring Cloud(8):Sleuth和Zipkin的使用
场景:
某大型电商网站基于微服务架构,服务模块有几十个。
某天,测试人员报告该网站响应速度过慢。排除了网络问题之后,发现很难进一步去排除故障。
那么:如何对微服务的链路进行监控呢?
Sleuth:
一般的,一个分布式服务跟踪系统,主要有三部分:数据收集、数据存储和数据展示。
根据系统大小不同,每一部分的结构又有一定变化。
譬如,对于大规模分布式系统,数据存储可分为实时数据和全量数据两部分.
实时数据用于故障排查(troubleshooting):全量数据用于系统优化
数据收集除了支持平台无关和开发语言无关系统的数据收集,还包括异步数据收集(需要跟踪队列中的消息,保证调用的连贯性)
以及确保更小的侵入性;数据展示又涉及到数据挖掘和分析。
虽然每一部分都可能变得很复杂,但基本原理都类似。
服务追踪的追踪单元是从客户发起请求(request)抵达被追踪系统的边界开始
到被追踪系统向客户返回响应(response)为止的过程,称为一个“trace”。
每个 trace 中会调用若干个服务,为了记录调用了哪些服务,以及每次调用的消耗时间等信息,在每次调用服务时,埋入一个调用记录,称为一个“span”。
这样,若干个有序的 span 就组成了一个 trace。
在系统向外界提供服务的过程中,会不断地有请求和响应发生,也就会不断生成 trace。
把这些带有span 的 trace 记录下来,就可以描绘出一幅系统的服务拓扑图。
附带上 span 中的响应时间,以及请求成功与否等信息,就可以在发生问题的时候,找到异常的服务。
根据历史数据,还可以从系统整体层面分析出哪里性能差,定位性能优化的目标。
Spring Cloud Sleuth为服务之间调用提供链路追踪。
通过Sleuth可以很清楚的了解到一个服务请求经过了哪些服务,每个服务处理花费了多长。
从而让我们可以很方便的理清各微服务间的调用关系。
此外Sleuth可以帮助我们:
- 耗时分析: 通过Sleuth可以很方便的了解到每个采样请求的耗时,从而分析出哪些服务调用比较耗时;
- 可视化错误: 对于程序未捕捉的异常,可以通过集成Zipkin服务界面上看到;
- 链路优化: 对于调用比较频繁的服务,可以针对这些服务实施一些优化措施。
spring cloud sleuth可以结合zipkin,将信息发送到zipkin,利用zipkin的存储来存储信息,利用zipkin ui来展示数据。
这是Spring Cloud Sleuth的概念图:
Sleuth的简单使用:
加入依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId></dependency>
启动项目,发现会打印下面这些信息:
[order-service,86028f5d0762bee1,d08375022720d818,false]
第一个参数:项目的名称,服务模块的名称:spring.application.name
第二个参数:TraceID:用来标识请求的一整条链路,一条链路只有一个TraceID
第三个参数:SpanID:基本的工作元,获取元数据
第四个参数:是否要把该信息输出到Zipkin服务中来收集和展示
ZipKin
Zipkin 是一个开放源代码分布式的跟踪系统,由Twitter公司开源。
它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。
每个服务向zipkin报告计时数据,zipkin会根据调用关系通过Zipkin UI生成依赖关系图。
显示了多少跟踪请求通过每个服务,该系统让开发者可通过一个 Web 前端轻松的收集和分析数据
例如用户每次请求服务的处理时间等,可方便的监测系统中存在的瓶颈。
Zipkin提供了可插拔数据存储方式:In-Memory、MySql、Cassandra以及Elasticsearch。接下来的测试为方便直接采用In-Memory方式进行存储,生产推荐Elasticsearch。
快速上手
创建zipkin-server项目
项目依赖
<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-eureka</artifactId></dependency><dependency><groupId>io.zipkin.java</groupId><artifactId>zipkin-server</artifactId></dependency><dependency><groupId>io.zipkin.java</groupId><artifactId>zipkin-autoconfigure-ui</artifactId></dependency> </dependencies>
启动类
@SpringBootApplication @EnableEurekaClient @EnableZipkinServer public class ZipkinApplication {public static void main(String[] args) {SpringApplication.run(ZipkinApplication.class, args);}}
使用了@EnableZipkinServer
注解,启用Zipkin服务。
配置文件
eureka:client:serviceUrl:defaultZone: http://localhost:8761/eureka/ server:port: 9000 spring:application:name: zipkin-server
配置完成后依次启动示例项目:spring-cloud-eureka
、zipkin-server
项目。刚问地址:http://localhost:9000/zipkin/
可以看到Zipkin后台页面
我采用了更方便快捷的方式:Docker
1、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本
$ uname -r
2、使用 root
权限登录 Centos。确保 yum 包更新到最新。
$ sudo yum update
3、卸载旧版本(如果安装过旧版本的话)
$ sudo yum remove docker docker-common docker-selinux docker-engine
4、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
5、设置yum源
$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
6、可以查看所有仓库中所有docker版本,并选择特定版本安装
$ yum list docker-ce --showduplicates | sort -r
7、安装docker
$ sudo yum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版17.12.0 $ sudo yum install <FQPN> # 例如:sudo yum install docker-ce-17.12.0.ce
8、启动并加入开机启动
$ sudo systemctl start docker $ sudo systemctl enable docker
9、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
$ docker version
Zipkin安装
执行命令:
docker run -d -p 9411:9411 openzipkin/zipkin
然后访问http://[Docker机器的IP]:9411进入Zipkin可视Web界面
整合:
加入依赖
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId></dependency>
另外,Zipkin依赖包括了Sleuth依赖,可以删除上边引入的Sleuth依赖
配置Zipkin Server和该服务采样百分比(1为最大,生产环境不建议设置为1):
spring.zipkin.base-url=http://[0.0.0.0]:9411/ spring.sleuth.sampler.probability=1
访问Zipkin Server,刷新几次就会出现之前配置过的服务:
访问几次服务的接口,然后就可以针对某个服务进行链路分析
具体Zipkin界面的使用,不多做介绍了,中文界面操作不难
对请求链路进行追踪,就可以确定服务的哪一个模块更耗时,进而可以进行优化或者排BUG
因此,在开发环境中,部署Sleuth和Zipkin是比较重要的
以上部分内容参考博客:
http://www.cnblogs.com/jianliang-Wu/p/8945890.html
https://www.cnblogs.com/yufeng218/p/8370670.html
转载于:https://www.cnblogs.com/xuyiqing/p/10888948.html
Spring Cloud(8):Sleuth和Zipkin的使用相关推荐
- 【Spring Cloud】Sleuth+Zipkin全链路日志追踪接入实战
文章目录 一.背景 链路追踪介绍 为什么需要链路追踪? 那该如何解决呢? 二.常见的链路追踪技术有下面这些: 三.Sleuth 3.1.Sleuth(读作/sluːθ/)介绍 3.2.相关术语 3.3 ...
- 硬核!从0到1学习Spring Cloud微服务章节《建议收藏》
为什么要使用学习springcloud以及他的优势? Spring Cloud 来源于 Spring,质量.稳定性.持续性都可以得到保证. spirng Cloud 天然支持 Spring Boot, ...
- Spring Cloud Alibaba 大型微服务项目实战
作者介绍 程序员十三,多年一线开发经验,历任高级开发工程师.后端主程.技术部门主管等职位.同时也是开源项目的爱好者和贡献者.掘金优秀作者.CSDN 博客专家.实体图书作者.专栏作者.视频讲师. 小册介 ...
- 【Java学习路线之JavaWeb】Spring Cloud教程(非常详细)
文章目录 读者 阅读条件 微服务是什么 微服务,我们可以从字面上去理解,即"微小的服务",下面我们从"服务"和"微小"两个方面进行介绍. 微 ...
- SpringCloud技术指南系列(十五)分布式链路跟踪Sleuth与Zipkin实现
SpringCloud技术指南系列(十五)分布式链路跟踪Sleuth与Zipkin实现 一.概述 分布式链路追踪,是一种用于分析和监控应用程序的方法,尤其是那些使用微服务架构的那些应用.分布式链路跟踪 ...
- Spring Cloud 5分钟搭建教程(附上一个分布式日志系统项目作为参考) - 推荐
http://blog.csdn.net/lc0817/article/details/53266212/ https://github.com/leoChaoGlut/log-sys 上面是我基于S ...
- Spring Cloud 5分钟搭建教程(附上一个分布式日志系统项目作为参考)
Spring Cloud 5分钟搭建教程(附上一个分布式日志系统项目作为参考) 上面是我基于Spring Cloud ,Spring Boot 和 Docker 搭建的一个分布式日志系统. 目前已在我 ...
- 这样的 Spring Cloud 微服务项目太牛了!
最近有个学弟问我:为什么去面试的时候都要问一些微服务的问题?我听到时候也有点惊讶微服务器架构已经深入到各个企业,尽管有些企业不大,但他们也有微服务的想法,毕竟互联网公司发展快,真要到了爆发期如果现有的 ...
- Spring Cloud入门-Admin服务监控中心(Hoxton版本)
文章目录 Spring Cloud入门系列汇总 摘要 Spring Boot Admin 简介 创建admin-server模块 创建admin-client模块 监控信息演示 结合注册中心使用 修改 ...
- Spring Cloud入门-Sentinel实现服务限流、熔断与降级(Hoxton版本)
文章目录 Spring Cloud入门系列汇总 摘要 Sentinel简介 安装Sentinel控制台 创建sentinel-service模块 限流功能 创建RateLimitController类 ...
最新文章
- ASP.NET Ajax替代品AjaxWidgets
- php如何检测图片背景是白色,javascript – 用PHP检测白色图像背景?
- Effective Java之注解优于命名模式(三十五)
- python图的字典表示_Python dict字典精讲
- Tomcat9百度云下载
- WiFi信道频率对照表
- 小米android6.01 root,小米手机6详细刷成开发版开启root超级权限的教程
- PHP call_user_func_array回调函数 call_user_func_array函数详解
- 个人计算机键盘上的按键击键声音小,电脑键盘按键会双击怎么办
- 样本量对差异性分析(Anova)或者T 检验的影响
- python什么字体好看_七个不一样的Python代码写法,让你写出一手漂亮的代码
- 图片无缝拼接 html,snapseed如何无缝拼接图片
- ES中如何实现in和not in查询
- ⼤⼚H5 开发概述-H5 开发及其前世今⽣
- 智慧城市的发展动力、推动因素、负面影响、挑战与应对
- android 定时响铃,Android 中利用广播接收器(BroadCastReceiver)来接收定时响铃的闹铃信息...
- python freshman day1
- shogun-toolbox的安装与问题总结
- SCA-CNN算法笔记
- 邓应海:非农数据发酵不够惨烈,难拖延美联储缩表进程!最新黄金走势分析