调用链监控 Sleuth+Zipkin

一、剖析调用链监控原理

1. 需求

  • 跨微服务的API调用发生异常,要求快速定位出问题出在哪里;
  • 跨微服务的API调用发生性能瓶颈,要求迅速定位出性能瓶颈。

2. 调用链监控原理

调用链监控 Sleuth+Zipkin_第1张图片

3. 常用调用链监控工具

  • Spring Cloud Sleuth + Zipkin
  • Skywalking、Pinponit

二、整合Sleuth

1.什么是Sleuth

Sleuth是一个Spring Cloud的分布式跟踪解决方案。

2. Sleuth

  • **Span(跨度):**Sleuth的基本工作单元,它用一个64位的ID唯一标识。除ID外,span还包含其他数据,如描述、时间戳事件、键值对的注解(标签)、span ID、Span父ID等。
  • **trace(跟踪):**一组span组成的树状结构称为trace。
  • Annotation(标注):
    • **CS(Client Sent 客户端发送):**客户端发起一个请求,该annotation描述了一个span的开始;
    • **SR(Server Received 服务器端接收):**服务器端获得请求并准备处理它;
    • **SS(Server Send 服务器端发送):**该annotation表明完成请求处理(当响应发回客户端时);
    • **CR(Client Received 客户端接收):**span结束的标识。客户端成功接收到服务器端的响应。

3. 整合Sleuth

  1. pom.xml

    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-sleuthartifactId>
    dependency>
    
  2. 应用报异常时,控制台日志
    调用链监控 Sleuth+Zipkin_第2张图片


三、Zipkin搭建与整合

1. 什么是Zipkin

Zipkin是Twitter开源的分布式跟踪系统,主要用来收集系统的时序数据,从而追踪系统的调用问题。

2. 搭建Zipkin Server

搭建Zipkin Server

3. Zipkin控制台

访问http://localhost:9411
调用链监控 Sleuth+Zipkin_第3张图片

4. 整合Zipkin

  1. pom.xml

    当使用spring-cloud-starter-zipkin之后,就不需要spring-cloud-starter-sleuth这个坐标了,因为spring-cloud-starter-zipkin已经包含了spring-cloud-starter-sleuth

    <dependency>
        <groupId>org.springframework.cloudgroupId>
        <artifactId>spring-cloud-starter-zipkinartifactId>
    dependency>
    
  2. 写配置

    spring:
      zipkin:
        base-url: http://localhost:9411/
      sleuth:
        sampler:
          # 抽样率,默认是0.1(10%,表示90%的数据都会丢弃)
          #1.0表示100%,表示所有数据都会上报给zipkin
          probability: 1.0
    
  3. 控制台显示调用详情
    调用链监控 Sleuth+Zipkin_第4张图片

5. 整合Zipkin后Nacos报错解决

整合zipkin后控制台一直报nacos的异常,原因是Nacos把Zipkin Server地址当成了一个微服务,而Zipkin Server并不是一个微服务,且官方也不允许把Zipkin Server注册成一个微服务。
在这里插入图片描述

**解决方法:**设置 discovery-client-enabled: false

spring:
  zipkin:
    base-url: http://localhost:9411/
# 是否把zipkin注册为微服务
    discovery-client-enabled: false
  sleuth:
    sampler:
      # 抽样率,默认是0.1(10%,表示90%的数据都会丢弃)
      #1.0表示100%,表示所有数据都会上报给zipkin
      probability: 1.0

6. 为所有微服务整合Zipkin

为每一个微服务添加相同的坐标与配置即可,在控制台就能查询到微服务之间的调用情况
调用链监控 Sleuth+Zipkin_第5张图片

7. Zipkin数据持久化

  1. 支持的数据持久化方式:

    • MySQL
    • ElasticSearch
    • Cassandra
  2. 数据持久化的官方文档

    Zipkin数据持久化文档

  3. 使用ElasticSearch对Zipkin数据持久化

    1. 搭建ElasticSearch

      ES7.0以后的版本需要jdk11的支持

      ElasticSearch下载

      根据系统选择下载对应版本:
      调用链监控 Sleuth+Zipkin_第6张图片

      下载后解压,进入bin目录:

      然后 ./elasticsearch就可以启动ES了

      ./elasticsearch –d 表示后台运行

      访问http://localhost:9200,能够看到以下界面,说明ES已经启动成功
      调用链监控 Sleuth+Zipkin_第7张图片

    2. 让Zipkin使用ES存储数据

      Zipkin提供了很多的环境变量,配置这些环境变量就可以把数据存入ES了
      调用链监控 Sleuth+Zipkin_第8张图片

      如:
      在这里插入图片描述

      Zipkin环境变量查询

  4. 关系依赖图的显示

    尽管使用ES实现了对Zipkin的数据持久化,但其关系依赖图却没有展示出来

    官方文档解释:
    调用链监控 Sleuth+Zipkin_第9张图片

    点击spark job,其实就是Zipkin-dependencies:

    Zipkin-dependencies

    Zipkin-dependencies使用ElasticSearch的环境变量:
    调用链监控 Sleuth+Zipkin_第10张图片

    Zipkin-dependencies的其他环境变量

    Zipkin-dependencies指定分析日期的数据:
    调用链监控 Sleuth+Zipkin_第11张图片


四、其他的微服务监控

1. Spring Boot Admin

为Spring Boot量身打造的一个简单易用的监控数据管理工具

GitHub

2. Jvm监控

在这里插入图片描述

你可能感兴趣的:(Spring,Cloud,Alibaba)