SpringCloud - Spring Cloud 之 Sleuth分布式链路跟踪;Zipkin埋点数据;Elastic Search 数据持久化(十八)

阅读本文前可先参考

​​​​​​SpringCloud - Spring Cloud根/父项目,开发准备(二)_MinggeQingchun的博客-CSDN博客

一、Spring Cloud Sleuth

微服务有几种监控方式,如Spring Boot Actuator监控微服务,Spring Boot Admin监控微服务,Hystrix Dashboard监控Hystrix服务,Hystrix Turbine聚合多个Hystrix服务的监控信息等

对于一个由几十个、甚至几百个大型微服务构成的微服务架构系统,通常会遇到下面一些问题,如:

如何串联整个调用链路,快速定位问题?

如何理清各个微服务之间的依赖关系?

如何进行各个微服务接口的性能分折?

如何跟踪整个业务流程的调用处理顺序?

Spring Cloud Sleuth 为 spring Cloud提供了分布式跟踪的解决方案,它大量借用了Google Dapper、Twitter Zipkin和 Apache HTrace的设计。

Spring Cloud Sleuth 微服务跟踪(sleuth)其实是一个工具,它在整个分布式系统中能跟踪一个用户请求的过程(包括数据采集,数据传输,数据存储,数据分析,数据可视化),捕获这些跟踪数据,就能构建微服务的整个调用链的视图,这是调试和监控微服务的关键工具

SpringCloudSleuth有4个特点

特点 说明
提供链路追踪 通过sleuth可以很清楚的看出一个请求经过了哪些服务,
可以方便的理清服务局的调用关系
性能分析 通过sleuth可以很方便的看出每个采集请求的耗时,
分析出哪些服务调用比较耗时,当服务调用的耗时
随着请求量的增大而增大时,也可以对服务的扩容提
供一定的提醒作用
数据分析
优化链路
对于频繁地调用一个服务,或者并行地调用等,
可以针对业务做一些优化措施
可视化 对于程序未捕获的异常,可以在zipkpin界面上看到

Spring Cloud Sleuth可以追踪10种类型的组件:async、Hystrix,messaging,websocket,rxjava,scheduling,web(Spring MVC Controller,Servlet),webclient(Spring RestTemplate)、Feign、Zuul 

SpringCloud - Spring Cloud 之 Sleuth分布式链路跟踪;Zipkin埋点数据;Elastic Search 数据持久化(十八)_第1张图片

SpringCloud - Spring Cloud 之 Sleuth分布式链路跟踪;Zipkin埋点数据;Elastic Search 数据持久化(十八)_第2张图片

span(跨度):基本工作单元。span用一个64位的id唯一标识。除ID外,span还包含其他数据,例如描述、时间戳事件、键值对的注解(标签), spanID、span父 ID等。span被启动和停止时,记录了时间信息。初始化 span被称为"rootspan",该 span的 id和 trace的 ID相等;

trace(跟踪):一组共享"rootspan"的 span组成的树状结构称为 traceo trace也用一个64位的 ID唯一标识, trace中的所有 span都共享该 trace的 ID;

annotation(标注): annotation用来记录事件的存在,其中,核心annotation用来定义请求的开始和结束。

CS(Client sent客户端发送):客户端发起一个请求,该annotation描述了span的开始;

SR(server Received服务器端接收):服务器端获得请求并准备处理它。如果用 SR减去 CS时间戳,就能得到网络延迟;

SS(server sent服务器端发送):该annotation表明完成请求处理(当响应发回客户端时)。如果用 SS减去 SR时间戳,就能得到服务器端处理请求所需的时间;

CR(Client Received客户端接收): span结束的标识。客户端成功接收到服务器端的响应。如果 CR减去 CS时间戳,就能得到从客户端发送请求到服务器响应的所需的时间;

分布式链路追踪技术成熟产品

当然,分布式链路追踪技术已然成熟,产品也不少,国内外都有,如:

1、Spring Cloud Sleuth + Twitter Zipkin

2、阿里巴巴的“鹰眼”EagleEye

3、大众点评的“CAT”

4、美团的“Mtrace”

5、京东的“Hydra”

6、新浪的“Watchman”

这些产品我们也把他们叫做APMApplication Performance Management,即应用性能管理,简单来说就是应用监控)系统工具

二、Zipkin

(Spring Cloud Sleuth 整合Zipkin实现分布式链路跟踪)

Spring Cloud Sleuth对于分布式链路的跟踪仅仅是生成一些数据(埋点、打点),这些数据不便于阅读,因此我们一般把这种跟踪数据上传给Zipkin Server,由Zipkin通过UI页面统一进行数据的展示

Zipkin是Twitter开源的分布式实时数据跟踪系统(Distributed Tracking System),基于Google Dapper的论文设计而成,Google开源了 Dapper链路追踪组件,并在2010年发表了论文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》,这篇文章是业内实现链路追踪的标杆和理论基础,具有非常大的参考价值。

Zipkin它的主要功能是收集系统的时序数据,从而追踪微服务架构的系统延时等问题,从而达到链路调用监控跟踪作用,另外Zipkin还提供了一个非常友好的UI界面,来帮助分析追踪数据

Zipkin官网地址:

http://zipkin.io

GitHub地址 

 https://github.com/openzipkin/zipkin

1、搭建ZipKin Server服务端 

搭建Zipkin Server 有两种方式

1、使用Java源码搭建服务端

2、使用Zipkin 官网编译好的 jar 执行

注:

1、如果你的项目是spring boot1.x  (<2),可以使用Java源码 Spring Boot 项目编译,但是要注意 Zipkin 版本和 Spring Cloud版本兼容问题,不然会报错

2、Spring Boot 2.x 以后官网不推荐使用源码方式编译,推荐使用官网编译好的jar执行

Spring Boot 2.0 之后,在引入 zipkin-autoconfigure-ui 和 zipkin-server

依赖时必须要指定zipkin-server的版本号,而且即使指定版本号会出现非常多的问题,不要试图通过降低zipkin client 端的spring-cloud-starter-sleuth 和 spring-cloud-sleuth-zipkin依赖包的版本来解决bug,博主亲身体会多么痛的领悟!!!不起作用,会出现其他bug

1、使用Java源码搭建服务端

1、新建一个springboot Module(springcloud-9-service-sleuth-zipkin),搭建Zipkin Server服务端,设置父项目(服务提供者)

2、添加 zipkin-autoconfigure-ui,zipkin-server 等依赖


        
            io.zipkin.java
            zipkin-autoconfigure-ui
            2.12.3
        
        
        
            io.zipkin.java
            zipkin-server
            2.12.3
        

注:这个里面有版本的兼容性问题,当前我们的Spring Cloud Hoxton.SR12(2021-07-06)版本如果使用zipkin-server的最新的版本,可能会启动失败


    
        com.company
        springcloud-demo
        1.0.0
    

    com.company
    springcloud-9-service-sleuth-zipkin
    1.0.0

    springcloud-9-service-sleuth-zipkin
    Demo project for Spring Boot

    
        1.8
    

    
        
        
            io.zipkin.java
            zipkin-autoconfigure-ui
            2.12.3
        
        
        
            io.zipkin.java
            zipkin-server
            2.12.3
        

    

    
        
            
            
                org.springframework.boot
                spring-boot-maven-plugin
            
        
    

3、创建 aplication.properties 文件,用于获取配置信息 #内嵌的Undertow服务器的端口 

#内嵌的Undertow服务器的端口
server.port=9410

#zipkin启动报错无法访问的解决方法
management.metrics.web.server.autoTimeRequests=false

4、在 Spring Boot 的启动类中,加入注解:@EnableZipkinServer

import zipkin2.server.internal.EnableZipkinServer;

@EnableZipkinServer //开启zipkin server的支持
@SpringBootApplication
public class Service9SleuthZipkinApplication {
    public static void main(String[] args) {
        SpringApplication.run(Service9SleuthZipkinApplication.class, args);
    }
}

5、然后启动Zipkin Server服务,访问http://localhost:9410 (默认启动了Undertow服务的9410端口)

2、使用Zipkin 官网编译好的 jar 执行

Zipkin GitHub地址 :

GitHub - openzipkin/zipkin: Zipkin is a distributed tracing system

1、下载Zipkin官网的 jar 包,下载地址

https://search.maven.org/remote_content?g=io.zipkin&a=zipkin-server&v=LATEST&c=exec   

(1)或者 点击 Quick-start 的   latest released server

就可以直接下载 ,就是有点慢,没办法,只能慢慢等 

SpringCloud - Spring Cloud 之 Sleuth分布式链路跟踪;Zipkin埋点数据;Elastic Search 数据持久化(十八)_第3张图片

(2)或者通过 Linux 命令,创建一个 Zipkin 文件夹存放路径,下载后传到 Windows系统即可

# 创建目录zipkin
mkdir xxx/xxxx/zipkin
 
# 进入zipkin目录
cd  xxx/xxxx/zipkin
 
# 下载zipkin的jar包
curl -sSL https://zipkin.io/quickstart.sh | bash -s

SpringCloud - Spring Cloud 之 Sleuth分布式链路跟踪;Zipkin埋点数据;Elastic Search 数据持久化(十八)_第4张图片

2、下载之后 执行 jar 包 

java -jar zipkin-server-2.23.16-exec.jar

SpringCloud - Spring Cloud 之 Sleuth分布式链路跟踪;Zipkin埋点数据;Elastic Search 数据持久化(十八)_第5张图片

3、 访问http://localhost:9411 (默认启动了Undertow服务的9411端口)

新版本界面

SpringCloud - Spring Cloud 之 Sleuth分布式链路跟踪;Zipkin埋点数据;Elastic Search 数据持久化(十八)_第6张图片老版本界面

SpringCloud - Spring Cloud 之 Sleuth分布式链路跟踪;Zipkin埋点数据;Elastic Search 数据持久化(十八)_第7张图片

服务名:就是微服务配置文件中的application name;

Span名称:跨度;

时间段 :现在查询的时间段;

根据Annotation查询:根据标注查询,用于自定义查询条件;

持续时间:一次调用链的持续时间;

数量:一页数量;

排序:排序规则

2、Sleuth微服务整合Zipkin

1、在 微服务 消费者,提供者项目中添加如下依赖



    org.springframework.cloud
    spring-cloud-starter-sleuth




    org.springframework.cloud
    spring-cloud-starter-zipkin

2、 配置文件

#指定Zipkin server地址
spring.zipkin.base-url=http://localhost:9411
#发送跟踪数据到zipkin的类型web(http)
spring.zipkin.sender.type=web
#request采样的数量 默认是0.1 也即是10%,即采样10%的请求数据;
#因为在分布式系统中,数据量可能会非常大,因此采样非常重要我们示例数据少最好配置为1全采样,100%的采集会稍微影响一点性能
spring.sleuth.sampler.probability=1.0

3、启动测试

SpringCloud - Spring Cloud 之 Sleuth分布式链路跟踪;Zipkin埋点数据;Elastic Search 数据持久化(十八)_第8张图片

SpringCloud - Spring Cloud 之 Sleuth分布式链路跟踪;Zipkin埋点数据;Elastic Search 数据持久化(十八)_第9张图片

三、Elastic Search

我们已经把分布式链路调用信息上传到 zipkin server 上,通过zipkin server 的ui界面我们能看到调用链路信息,但是这些上传了的跟踪信息没有持久化保存

当zipkin重启后分布式链路数据就全部清空了,因为zipkin server 默认数据是存储在内存中的,所以为了后续一直都能查看调用链路信息,因此需要将 Zipkin Server 数据持久化

Elastic Search是一个分布式、高扩展、高实时的搜索和数据分析引擎,一个建立在全文搜索引擎 Apache Lucene基础上的搜索引擎,支持各种数据类型,包括文本、数字、地理、结构化、非结构化。

GitHub

https://github.com/elastic/elasticsearch

下载

Download Elasticsearch | Elastic

以下摘自百度百科

Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可用的。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr,也是基于Lucene。

Lucene 

Lucene是apache下的一个开源的,一套用java写的全文检索的工具包

全文检索

 从非结构化数据(不定长或无固定格式的数据,如邮件,word文档等磁盘上的文件)中提取出的然后重新组织(分词)的信息,我们称之索引。先建立索引,再对索引进行搜索的过程就叫全文检索

分词

将采集到的文档内容切分成一个一个的词。如“I like apples , i mean fruit”,根据一定的规则后分词为“i”、“like”、“apple”、“mean”、“fruit”。

Elastic Search基于lucene,封装了许多lucene底层功能,提供了分布式的服务、简单易用的restful API接口和许多语言的客户端

1、 Elastic Search下载安装

将 Elastic Search 下载后,解压下载后的压缩包即完成安装,切换到bin目录,使用双击elasticsearch.bat 脚本启动

启动后访问,(默认端口9200)

http://localhost:9200

如果返回 JSON 信息表示安装成功

Zipkin 与 Elastic Search整合

在zipkin Server中添加依赖:

1、添加依赖


    io.zipkin.java
    zipkin-autoconfigure-storage-elasticsearch-http
    2.8.4

2、配置文件:

zipkin.storage.type=elasticsearch
zipkin.storage.elasticsearch.cluster=elasticsearch
zipkin.storage.elasticsearch.hosts=http://localhost:9201
zipkin.storage.elasticsearch.index=zipkin

至此 zipkin server上的跟踪数据便存储在了Elasticsearch中,当zipkin server 重启或宕机,历史数据依然不会丢失

你可能感兴趣的:(SpringCloud,Elasticsearch,spring,cloud,Sleuth,Zipkin,Elastic,Search)