CodeAshen's blog CodeAshen's blog
首页
  • Spring Framework

    • 《剖析Spring5核心原理》
    • 《Spring源码轻松学》
  • Spring Boot

    • Spring Boot 2.0深度实践
  • Spring Cloud

    • Spring Cloud
    • Spring Cloud Alibaba
  • RabbitMQ
  • RocketMQ
  • Kafka
  • MySQL8.0详解
  • Redis从入门到高可用
  • Elastic Stack
  • 操作系统
  • 计算机网络
  • 数据结构与算法
  • 云原生
  • Devops
  • 前端
  • 实用工具
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • Reference
GitHub (opens new window)

CodeAshen

后端界的小学生
首页
  • Spring Framework

    • 《剖析Spring5核心原理》
    • 《Spring源码轻松学》
  • Spring Boot

    • Spring Boot 2.0深度实践
  • Spring Cloud

    • Spring Cloud
    • Spring Cloud Alibaba
  • RabbitMQ
  • RocketMQ
  • Kafka
  • MySQL8.0详解
  • Redis从入门到高可用
  • Elastic Stack
  • 操作系统
  • 计算机网络
  • 数据结构与算法
  • 云原生
  • Devops
  • 前端
  • 实用工具
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
  • Reference
GitHub (opens new window)
  • 剖析Spring5核心原理

  • Spring源码轻松学

  • Spring Boot 2.0深度实践

  • Spring-Cloud

  • Spring-Cloud-Alibaba

    • 第01章-简介
    • 第02章-Nacos服务发现
    • 第03章-Ribbon负载均衡
    • 第04章-Feign声明式HTTP客户端
    • 第05章-Sentinel集群容错
    • 第06章-RocketMQ消息队列
    • 第07章-Spring Cloud Gateway网关
    • 第08章-认证授权
    • 第09章-Nacos配置管理
    • 第10章-Sletuh调用链
      • 10.1 Sleuth介绍
        • 10.1.1 Sleuth简介
        • 10.1.2 Sleuth术语
        • 10.1.3 整合Sleuth
      • 10.2 Zipkin搭建与整合
      • 10.3 Zipkin持久化
        • 10.3.1 数据持久化
        • 10.3.2 生成调用链接
  • Spring
  • Spring-Cloud-Alibaba
CodeAshen
2023-02-10
目录

第10章-Sletuh调用链

# 10.1 Sleuth介绍

# 10.1.1 Sleuth简介

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

image-20210318102113863

Sleuth是调用链监控的客户端,负责产生监控数据

# 10.1.2 Sleuth术语

  • Span(跨度):Sleuth的基本工作单元,它用一个64位的id唯一标识。除ID外,spah还包含其他数据,例如描述、时间戳事件、键值对的注解(标签)、span ID、span父ID等。

    上一节图中表格的一条数据就是一个Span

  • trace(跟踪):一组span组成的树状结构称为trace

    上一节图中表格的所有数据就是trace

  • Annotatio(标注)

    • CS(Client Sent客户端发送):客户端发起一个请求,该annotation描述了span的开始。
    • SR(Server Received 服务器端接收):服务器端获得请求并准备处理它。
    • SS(Server Sent 服务器端发送):该annotation表明完成请求处理(当响应发回客户端时)。
    • CR(Client Received 客户端接收):span结束的标识。客户端成功接收到服务器端的响应。

# 10.1.3 整合Sleuth

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
1
2
3
4

不需要做配置和注解,Sleuth就整合好了,启动服务可以观察到日志形式变了

2021-03-18 10:44:13.559  INFO [user-center,,,] 16408 --- [lientSelector_1] RocketmqRemoting                         : closeChannel: close the connection to remote address[] result: true
2021-03-18 10:44:14.630  WARN [user-center,351c4abde1a39181,351c4abde1a39181,true] 16408 --- [nio-8001-exec-1] c.l.usercenter.auth.CheckLoginAspect     : token check failed, token=null
1
2

日志中括号中有四项信息,以[user-center,351c4abde1a39181,351c4abde1a39181,true]为例,信息含义分别为:

  1. user-center:服务名称
  2. 351c4abde1a39181:trace id
  3. 351c4abde1a39181: span id
  4. true:是否上传到zipkin

还可以配置 logging.org.springframework.cloud.sleuth=debug,来观察更详细的日志

# 10.2 Zipkin搭建与整合

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

搭建Zipkin Server

下载zipkin的jar包之后,使用java -jar zipkin.jar启动,浏览器访问 http://localhost:9411 查看Zipkin记录的内容

参考:

  • Zipkin Server搭建手记 (opens new window)
  • Zipkin官网文档 (opens new window)

整合zipkin

第一步:加依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
1
2
3
4

上述依赖中引入了sleuth依赖,添加后就不需要sleuth依赖了

第二步:写配置

# Zipkin Server的地址
spring.zipkin.base-url=http://localhost:9411/
# 请求取样率,上报到zipkin的trace比例,默认是 0.1(10%),这里为了测试方便配置所有trace都上传
spring.sleuth.sampler.proability: 1.0
1
2
3
4

此时启动服务,调用服务上的端点,就可以在Zipkin控制台查看请求的记录情况了

image-20210318134921075

参考:

  • 整合Zipkin官方文档 (opens new window)

# 10.3 Zipkin持久化

# 10.3.1 数据持久化

前面实例中Zipkin中的数据是基于内存的,不适用与生产。Zipkin的存储组件支持将数据存储在内存、Cassandra、Elasticsearch和MySQL中,官方文档中介绍如果存在MySQL性能不优。这里以使用Elasticsearch进行持久化为例。

非常简单,只需要启动ES实例,然后在启动zipkin server的时候加上相关环境变量即可。以下步骤为最简单示例:

  1. 启动ES
  2. 启动Zipkin Server:STORAGE_TYPE=elasticsearch ES_HOSTS=http://myhost:9200 java -jar zipkin.jar

参考:

  • 官方-持久化组件 (opens new window)
  • 官方-es持久化 (opens new window)

# 10.3.2 生成调用链接

image-20210318142430094

有请求记录后,在Zipkin控制台上可以查看服务依赖关系,但是如果使用了数据持久化,就无法生成了。根据官方文档,需要使用执行一个任务来生成依赖图

image-20210318180546624

根据官方文档 (opens new window),执行操作后即可生成。

编辑 (opens new window)
上次更新: 2023/06/04, 12:34:19
第09章-Nacos配置管理

← 第09章-Nacos配置管理

最近更新
01
第01章-RabbitMQ导学
02-10
02
第02章-入门RabbitMQ核心概念
02-10
03
第03章-RabbitMQ高级特性
02-10
更多文章>
Theme by Vdoing | Copyright © 2020-2023 CodeAshen | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式