SpringCloud Sleuth+Zipkin

211 阅读3分钟

SpringCloud Sleuth+Zipkin

官网

github.com/spring-clou…

Sleuth/Zipkin 是什么?

概述(两张图)

  1. 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用, 来协同产生最后的请求结果,每一个请求都会形成一条复杂的分布式服务调用链路

image.png

  1. 链路中的任何一环出现高延时或错误都会引起整个请求最后的失败, 因此对整个服务的调用进行链路追踪和分析就非常的重要
  2. Sleuth 和Zipkin 的简单关系图

image.png 一句话: Sleuth 提供了一套完整的服务跟踪的解决方案并兼容Zipkin

梳理: Sleuth 做链路追踪, Zipkin 做数据搜集/存储/可视化

Sleuth 工作原理

Span 和Trace 在一个系统中使用Zipkin 的过程-图形化

image.png

梳理

表示一请求链路,一条链路通过Trace Id唯一标识, Span标识发起的请求信息,各span通过parent id关联起来 Trace:类似于树结构的Span集合,表示一条调用链路,存在唯一标识 Span:基本工作单元,表示调用链路来源,通俗的理解span就是一次请求信息

spans 的parent/child 关系图形化

image.png

梳理

注意看标识的红线,后一个span节点的parentId 指向/记录了上一个Span 解读

  1. span就是一次请求信息
  2. 多个Span集合就构成一条调用链路
  3. 在span=C 这个节点存在分支

Sleuth/ZipKin-搭建链路监控实例

需求说明/图解

  1. 在浏览器输入: http://localhost/member/consumer/get/1 , 会返回对应的结果(如图)

image.png 2. 要求: 通过Sleuth 和Zipkin 可以对服务调用链路进行监控, 并在Zipkin 进行显示(如图)

image.png

安装/使用Zipkin

下载repo1.maven.org/maven2/io/z…

image.png

  1. 下载得到: zipkin-server-2.12.9-exec.jar

运行

  1. 把zipkin-server-2.12.9-exec.jar 放到指定的目录, 比如D:\program\zipkin
  2. 进入cmd , 执行指令运行: java -jar zipkin-server-2.12.9-exec.jar

image.png

访问

浏览器输入:http://localhost:9411/zipkin/

image.png

服务提供方集成Sleuth/Zipkin

  1. 修改member-service-provider-10000 的pom.xml , 增加引入sleuth+zipkin
 <!--引入sleuth + zipkin 依赖 说明 1. 使用的是版本仲裁 2.starter-zipkin包含了sleuth  -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>
        <!--引入eureka-client 场景启动器starter: 使用版本仲裁-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
  1. 修改member-service-provider-10000 的appliaction.xml , 指定Zipkin
server:
  port: 10000

spring:
  application:
    name: member-service-provider #配置应用的名称
  #配置sleuth 和 zipkin
  zipkin:
    base-url: http://localhost:9411
  sleuth:
    sampler:
      #采样率 在0-1之间, 1表示全部采集
      probability: 1
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource
    url: jdbc:mysql://localhost:3306/e_commerce_center_db?useSSL=true&useUnicode=true&characterEncoding=UTF-8
    username: root
    password: 自己的密码
  1. 修改member-service-consumer-80 的appliaction.xml , 指定Zipkin

注意这个的pom.xml和上面的配置一模一样这理就不再重复了

修改member-service-consumer-80 的appliaction.xml , 指定Zipkin

server:
  port: 80

spring:
  application:
    name: member-service-consumer-80
  zipkin:
    base-url: http://localhost:9411
  sleuth:
    sampler:
      ##采样率在0-1 之间,1 表示全部采集
      probability: 1

#配置eureka-client

测试

1 启动e-commerce-eureka-server-9001 2 启动member-service-provider-10000 3 启动member-service-consumer-80 4 浏览器: 浏览器输入: http://localhost/member/consumer/get/1多访问几次,方便看监控结果

image.png

查看监控&分析结果

  1. 查看Zipkin : http://localhost:9411/zipkin/

  2. 选择某个服务,看结果

image.png

image.png

  1. 查看一次调用链路的深度,以及该链路包含请求, 各个请求耗时,找到请求瓶颈,为优化提供依据(重要)

image.png

image.png 4. 查看服务调用的依赖关系

image.png