springcloud 入门(9) SpringCloud Sleuth zipkin 链路追踪(上)

简介: springcloud 入门(9) SpringCloud Sleuth zipkin 链路追踪

文章目录

概述

在微服务的架构下,系统由大量服务组成,每个服务可能是由不同的团队开发,开发使用不 同的语言,部署在几千台服务器上,并且横跨多个不同的数据中心,一次请求绝大多数情况 会涉及多个服务。因此,就需要一些能够帮助理解系统行为、分析系统性能问题的工具, 以便在系统发生故障的时候,快速定位和解决问题。这些工具就是APM(Application Performance Management)


Spring Cloud Sleuth 能够跟踪你的请求和消息,以便你可以将该通信与相应的日志条目相关联。 你还可以将跟踪信息导出到外部系统以可视化延迟

术语

Spring Cloud Sleuth 借用了 Dapper 的术语

Span:工作的基本单位。例如,发送 RPC 是一个新的Span,就像向 RPC 发送响应一样。Span 还有其他数据,例如描述、时间戳事件、键值注释(标签)、导致它们的 span 的 ID 和进程 ID(通常是 IP 地址)。Span 可以启动和停止,并且它们会跟踪它们的时间信息。一旦你创建了一个Span,你必须在未来的某个时候停止它。

Trace:形成树状结构的一组Span。例如,如果您运行分布式大数据存储,则PUT请求可能会形成跟踪。

Annotation/Event:用于及时记录事件的存在。从概念上讲,在典型的 RPC 场景中,我们标记这些事件以突出显示发生了何种类型的操作(这并不意味着在物理上将此类事件设置在Span上)。


  • cs:Client Sent。客户提出了请求。此注释指示Span的开始。
  • sr : Server Received: 服务器端收到请求并开始处理。cs从此时间戳中减去时间戳可显示网络延迟。
  • ss:Server Sent。在请求处理完成时进行注释(当响应被发送回客户端时)。sr从这个时间戳中减去时间戳就显示了服务器端处理请求所需的时间。
  • cr : Client Received。表示Span的结束。客户端已成功收到服务器端的响应。cs从此时间戳中减去时间戳可显示客户端从服务器接收响应所需的全部时间。

下图显示了Span和Trace在系统中的流转,图片来着springcloud官网

image.png

每个note色块代表着一个span,(有七个span - 从A到G),思考一下下面的note

Trace Id = X
Span Id = D
Client Sent

此note表明当前span将Trace Id设置为X并将span Id设置为D。此外,从 RPC 的角度来看,Client Sent事件发生了。

再思考一下下面note,

Trace Id = X
Span Id = A
(no custom span)
Trace Id = X
Span Id = C
(custom span)

您可以继续使用创建的span(带有no custom span指示的示例),也可以手动创建子span(带有custom span指示的示例)。

下图显示了span的父子关系的流转:

image.png

翻译自官网:https://docs.spring.io/spring-cloud-sleuth/docs/current/reference/html/getting-started.html#getting-started-terminology


Sleuth 通过 Trace 定义一次业务调用链,根据它的信息,我们能知道有多少个系统参与了该业务处理。而系统间的调用顺序和时间戳信息,则是通过 Span 来记录的。 Trace 和 Span 的信息经过整合,就能知道该业务的完整调用链。

入门示例

zipkin

Zipkin 是 Twitter 的一个开源项目,它基于 Google Dapper 实现。我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的 REST API 接口来辅助查询跟踪数据以实现对分布式系统的监控程序,从而及时发现系统中出现的延迟升高问题并找出系统性能瓶颈的根源。除了面向开发的 API 接口之外,它还提供了方便的 UI 组件来帮助我们直观地搜索跟踪信息和分析请求链路明细,比如可以查询某段时间内各用户请求的处理时间等。下图展示了 Zipkin 的基础架构,它主要由4个核心组件构成。

image.png

Zipkin Collector

收集器组件,它主要处理从外部系统发送过来的跟踪信息,将这些信息转换为 Zipkin 内部处理的 Span 格式,以支持后续的存储、分析、展示等功能。

Storage

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

Zipkin Query Service

Zipkin 查询服务组件,它主要用来提供外部访问接口。比如给客户端展示跟踪信息,或是外接系统访问以实现监控等。它的主要使用者是Web UI组件。

Web UI

UI 组件,基于 API 组件实现的上层应用。通过 UI 组件,用户可以方便而又直观地查询和分析跟踪信息。注意:UI 中没有内置身份验证!

与zipkin整合

1、创建一个cloud-sleuth 项目,搭建一个zipkin server,依赖如下

       <properties>
        <java.version>1.8</java.version>
        <zipkin.version>2.10.0</zipkin.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-server</artifactId>
            <version>${zipkin.version}</version>
        </dependency>
        <dependency>
            <groupId>io.zipkin.java</groupId>
            <artifactId>zipkin-autoconfigure-ui</artifactId>
            <version>${zipkin.version}</version>
        </dependency>

2、修改配置文件

server.port=8601
spring.application.name=sleuth-zipkin-server
management.metrics.web.server.auto-time-requests=false
spring.main.allow-bean-definition-overriding=true

3、启动类加上@EnableZipkinServer注解

@EnableZipkinServer
@SpringBootApplication
public class CloudSleuthApplication {
    public static void main(String[] args) {
        SpringApplication.run(CloudSleuthApplication.class, args);
    }
}

4、访问http://localhost:8601/,出现下面界面zipkin链路监控界面搭建就完成了

image.png

zipkin 客户端配置

zipkin server配置好之后,只有zipkin server是没啥作用的,自然是要搭配客户端使用。

1、客户端添加依赖

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

2、客户端添加配置

# zipkin 服务
spring.zipkin.base-url=http://localhost:8601
# 提交类型
spring.zipkin.sender.type=web
#定义抽样比率
spring.sleuth.sampler.probability=1.0

启动的客户端:


  • eureka-consumer
  • eureka-provider
  • user-provider
  • zuul-gateway

当然eureka-server注册中心和CloudSleuthApplication也是必须要启动的

eureka-consumer通过zuul-gateway网关调用user-provider和eureka-provider,

访问

http://localhost:7001/consumer/feign/getUserName/ggg 调用user-provider

http://localhost:7001/consumer/feign/getName/hhh 调用eureka-provider

之后进入zipkin界面点击依赖分析就可以看到调用链。这样SpringCloud Sleuth基本操作就完成了。

image.png


相关实践学习
分布式链路追踪Skywalking
Skywalking是一个基于分布式跟踪的应用程序性能监控系统,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,提供了一种简便的方式来清晰地观测分布式系统,具有分布式追踪、性能指标分析、应用和服务依赖分析等功能。 分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果希望切换追踪系统,往往会带来较大改动。OpenTracing为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。Skywalking基于OpenTracing规范开发,具有性能好,支持多语言探针,无侵入性等优势,可以帮助我们准确快速的定位到线上故障和性能瓶颈。 在本套课程中,我们将全面的讲解Skywalking相关的知识。从APM系统、分布式调用链等基础概念的学习加深对Skywalking的理解,从0开始搭建一套完整的Skywalking环境,学会对各类应用进行监控,学习Skywalking常用插件。Skywalking原理章节中,将会对Skywalking使用的agent探针技术进行深度剖析,除此之外还会对OpenTracing规范作整体上的介绍。通过对本套课程的学习,不止能学会如何使用Skywalking,还将对其底层原理和分布式架构有更深的理解。本课程由黑马程序员提供。
目录
相关文章
|
6月前
|
监控 微服务
微服务技术系列教程(28) - SpringCloud- 分布式服务跟踪Sleuth
微服务技术系列教程(28) - SpringCloud- 分布式服务跟踪Sleuth
23 0
|
2月前
|
消息中间件 SpringCloudAlibaba Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
786 0
|
6月前
|
存储 监控 Java
微服务技术系列教程(42)- SpringCloud -Sleuth与Zipkin服务链路
微服务技术系列教程(42)- SpringCloud -Sleuth与Zipkin服务链路
68 0
|
5月前
|
监控 Java Docker
【Spring Cloud Sleuth 分布式链路跟踪】 —— 每天一点小知识
【Spring Cloud Sleuth 分布式链路跟踪】 —— 每天一点小知识
102 0
|
6月前
|
消息中间件 Java API
微服务技术系列教程(43)- SpringCloud -Zipkin环境集成
微服务技术系列教程(43)- SpringCloud -Zipkin环境集成
50 0
|
8月前
|
数据可视化 Java Docker
Sleuth微服务链路追踪整合ELK和zipkin
Sleuth微服务链路追踪整合ELK和zipkin
203 0
|
2月前
|
Java Nacos Sentinel
Spring Cloud Alibaba 面试题及答案整理,最新面试题
Spring Cloud Alibaba 面试题及答案整理,最新面试题
217 0
|
2月前
|
SpringCloudAlibaba Java 持续交付
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
【构建一套Spring Cloud项目的大概步骤】&【Springcloud Alibaba微服务分布式架构学习资料】
171 0
|
2月前
|
SpringCloudAlibaba Java 网络架构
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(七)Spring Cloud Gateway服务网关
108 0
|
8天前
|
Java API Nacos
第十二章 Spring Cloud Alibaba Sentinel
第十二章 Spring Cloud Alibaba Sentinel
20 0