SpringCloudAlibaba链路监控zipkin的安装与使用

158 阅读4分钟

链路监控zipkin的安装与使用

ZipKin是什么?

Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper的论文设计而来,由 Twitter 公司开发贡献。其主要功能是聚集来自各个异构系统的实时监控数据。分布式跟踪系统还有其他比较成熟的实现,例如:Naver的Pinpoint、Apache的HTrace、阿里的鹰眼Tracing、京东的Hydra、新浪的Watchman,美团点评的CAT,skywalking等。

(1)下载安装

ZIPKIN官网

https://zipkin.io/

windows版下载

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

第一步:从官网下载zipkin,默认下载依赖是一个jar文件,网址如下:

https://github.com/openzipkin/zipkin

(2)启动

Java -jar zipkin-server-2.23.2-exec.jar

打开浏览器访问

http://localhost:9411

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oW6AxUkO-1623070769680)(C:\Users\沉思\AppData\Roaming\Typora\typora-user-images\1623070274642.png)]

ZipKin链路监控应用实践

(1)添加依赖

第一步:在父工程01-sca添加依赖

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

(2)启动微服务并访问

第二步:启动微服务项目进行链路监控(多次访问)

Zipkin底层会基于sleuth进行链路监控,但sleuth默认只对10%的链路请求进行监控,所以访问时多刷新几次。

(3)检测链路信息

直接点击run Query按钮

第三步:访问zipkin检测链路信息,如图所示: [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-nFiuQVoI-1623070769682)(C:\Users\沉思\AppData\Roaming\Typora\typora-user-images\1623070407787.png)]

(4)配置信息

zipkin配置信息,配置要写在cloud同级下

  zipkin:
    base-url: http://localhost:9411  #zipkin要部署到其他机器,此语句不可省略
  sleuth:
    sampler:
      probability: 1.0    #采样率,这里的1标识100%的数据都要进行采样

全部配置信息

server:
  port: 9000
spring:
  application:
    name: sca-gateway
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848 #服务发现,同时当前服务注册到nacos
    gateway:
      discovery:
        locator:
          enabled: true #开启通过服务名(id)查找服务实例的这个特性
      routes:
        - id: route01 #随意指定的一个值,路由的唯一标识
          ##uri: http://localhost:8081/ #一个服务的地址
          uri: lb://nacos-provider
          predicates: ###谓词对象(定义访问规则)
            - Path=/nacos/provider/echo/**
            - Before=2021-06-30T00:00:00.000+08:00
            - Method=GET
            #- Query=name,tony

          filters:  ##gateway 作为一个入口处理所有请求,底层通过filter实现
            - StripPrefix=1 #去掉url中path部分的第一部分内容(前面两个“/”及之间的内容)
            #- AddRequestHeader=tedu, CGB
            #- AddRequestParameter=page, 10

    sentinel:  #限流设置(gateway 元素内部写sentinel,注意缩进关系)
       eager: true #启动时注册
       transport:
         dashboard: http://localhost:8180  #sentinel 控制台
         port: 8719 #sentinel 客户端端口
  zipkin:
    base-url: http://localhost:9411  #zipkin要部署到其他机器,此语句不可省略
  sleuth:
    sampler:
      probability: 1.0    #采样率,这里的1标识100%的数据都要进行采样

logging:
  level:
    org.springframework.cloud.gateway: info

相关属于应用说明

traceId

一次请求全局只有一个traceId。用来在海量的请求中找到同一链路的几次请求。比如servlet服务器接收到用户请求,调用微服务,然后将结果返回给用户,整条链路只有一个traceId。开始于用户请求,结束于用户收到结果。

spanId

一个链路中每次请求都会有一个spanId。例如一次rpc,一次sql都会有一个单独的spanId从属于traceId。

cs

Clent Sent 客户端发起请求的时间,比如微服务调用端开始执行远程调用之前。

cr

Client Receive 客户端收到处理完请求的时间。

ss

Server Receive 服务端处理完逻辑的时间。

sr

Server Receive 服务端收到调用端请求的时间。

例如:

sr - cs = 请求在网络上的耗时。

ss - sr = 服务端处理请求的耗时。

cr - ss = 回应在网络上的耗时。

cr - cs = 一次调用的整体耗时。

ZipKin 工作过程分析

当用户发起一次调用时,Zipkin 的客户端会在入口处为整条调用链路生成一个全局唯一的 trace id,并为这条链路中的每一次分布式调用生成一个 span id。span 与 span 之间可以有父子嵌套关系,代表分布式调用中的上下游关系。span 和 span 之间可以是兄弟关系,代表当前调用下的两次子调用。一个 trace 由一组 span 组成,可以看成是由 trace 为根节点,span 为若干个子节点的一棵树。

Zipkin 会将 trace 相关的信息在调用链路上传递,并在每个调用边界结束时异步的把当前调用的耗时信息上报给 Zipkin Server。Zipkin Server 在收到 trace 信息后,将其存储起来。随后 Zipkin 的 Web UI 会通过 API 访问的方式从存储中将 trace 信息提取出来分析并展示。