SpringCloud-Sleuth分布式服务跟踪

构建基础设施和应用

服务注册中心
微服务应用

实现跟踪

在微服务应用中加入依赖
    <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>

这里写图片描述
上图为控制台输出内容,这些元素是实现分布式服务跟踪的重要组成部分

第一个值:trace-1,记录了应用名称,即spring.application.name的配置
第二个值:SpringCloud Sleuth生成的一个ID,称为Trace ID,用来标识一条请求链路。一条请求链路中包含一个TraceID,多个SpanID
第三个值:SpringCloud Sleuth生成的另一个ID,称为Span ID,它表示一个基本的工作单元,比如发送一个HTTP请求
第四个值:false,表示是否要将该信息输出到Zipkin等服务中来收集和展示

上面的四个值TraceID和SpanID是SpringCloud Sleuth实现分布式服务跟踪的核心。在一次服务请求链路的调用过程中,会保持并传递同一个TraceID。

抽样收集

spring.sleuth.sampler.percentage=0.1(默认)代表收集10%的请求跟踪信息

与Zipkin整合

虽然通过ELK平台提供的收集、存储、搜索等强大功能,我们对跟踪信息的管理和使用已经变得非常顺利,但是,在ELK平台中的数据分析纬度缺少请求链路中各阶段时间延迟的关注这里写图片描述
Collector:收集器组件,主要处理从外部系统发布过来的跟踪信息,将这些信息转换为Zipkin内部处理的Span格式,以支持后续的存储、分析、展示等功能

Storage:存储组件,主要处理收集器接收到的跟踪信息,默认会将这些信息存储在内存中,我们也可以修改存储策略,通过使用其他存储组件将跟踪信息存储到数据库中

Restful API:API组件,主要用来提供外部访问接口

Web UI:UI组件,基于API组件实现的上层应用,通过UI组件,用户可以方便直观地查询和分析跟踪信息

HTTP收集

第一步:搭建Zipkin Server
创建一个基础的Spring Boot应用,命名为zipkin-server,引入以下依赖

    <dependency>
    <groupId>io.zipkin.java</groupId>
    <artifactId>zipkin-server</artifactId>
    </dependency>
    <dependency>
    <groupId>io.zipkin.java</groupId>
    <artifactId>zipkin-autoconfigure-ui</artifactId>
    </dependency>
    <dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.SR5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

在启动类加入@EnableZipkinServer注解,启动Zipkin Server功能

第二步:为应用引入和配置Zipkin服务
引入依赖

        <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-sleuth-zipkin</artifactId>
    </dependency>

在配置文件中增加Zipkin Server的配置信息

spring.zipkin.base-url=http://localhost:9411

消息中间件收集(RabbitMQ)

第一步:修改微服务应用客户端
引入依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-sleuth</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
    </dependency>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.SR5</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

在配置文件中,去掉HTTP方式实现时使用的spring.zipkin.base-url=http://localhost:9411

spring.rabbitmq.host=localhost
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest

第二部:修改zipkin-server服务端
引入依赖

    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-stream-rabbit</artifactId>
    </dependency>
    <dependency>
        <groupId>io.zipkin.java</groupId>
        <artifactId>zipkin-autoconfigure-ui</artifactId>
    </dependency>

启动类注解换成@EnableZipkinStreamServer,开启消息驱动的Zipkin Server

数据存储

默认情况下,Zipkin Server会将跟踪信息存储在内存中,每次重启Zipkin Server都会使之前收集的跟踪信息丢失,并且当有大量跟踪信息时我们的内存存储也会成为瓶颈,所以通常情况下我们都需要将跟踪信息对接到外部存储组件,比如使用Mysql存储

第一步:为zipkin-server添加依赖

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-jdbc</artifactId>
    </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
        <groupId>org.jooq</groupId>
        <artifactId>jooq</artifactId>
        <version>3.8.0</version>
    </dependency>

第二步:在Mysql中创建用于Zipkin存储的Schema
这里需要注意一点,Zipkin Server实现关系型数据库存储时,不同版本对数据库表结构都有一些变化,跨版本使用时很容易出现各种整合问题,所以尽量使用对应版本的脚本来创建Schema,可以在本地依赖中,找到该脚本,下图展示了mysql.sql脚本在本地依赖中的具体位置
这里写图片描述
如果是通过HTTP实现的收集示例来改造的话,需要自己引入zipkin-autoconfigure-storage-mysql依赖。
我们可以在Mysql中手工创建名为zipkin的Schema,并运行mysql.sql脚本来创建表结构。除此之外,也可以在程序中进行配置来自动初始化,在配置文件中添加:

#mysql配置
spring.datasource.schema=classpath:/mysql.sql
spring.datasource.url=jdbc:mysql://localhost:3306/zipkin
spring.datasource.username=root
spring.datasource.password=root
spring.datasource.continue-on-error=true
spring.datasource.initialize=true

第三步:切换存储类型

#切换存储类型
zipkin.storage.type=mysql
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值