分布式链路监控与追踪系统(代码片段)

toov5 toov5     2023-03-02     596

关键词:

1.分布式链路监控与追踪产生背景
2.SpringCloud Sleuth + Zipkin
3.分布式服务追踪实现原理
4.搭建Zipkin服务追踪系统
5.搭建Zipkin集成RabbitMQ异步传输
6.SpringCloud2.x新知识介绍
7.发布SpringCloud2.0x百级完整超清视频教程含源码

 

分布式链路监控与追踪产生背景

在微服务系统中,随着业务的发展,系统会变得越来越大,那么各个服务之间的调用关系也就变得越来越复杂。一个 HTTP 请求会调用多个不同的微服务来处理返回最后的结果,在这个调用过程中,可能会因为某个服务出现网络延迟过高或发送错误导致请求失败,这个时候,对请求调用的监控就显得尤为重要了。Spring Cloud Sleuth 提供了分布式服务链路监控的解决方案。下面介绍 Spring Cloud Sleuth 整合 Zipkin 的解决方案。

 

Zipkin框架介绍

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

 

Zipkin 和 Config 结构类似,分为服务端 Server,客户端 Client,客户端就是各个微服务应用。

 

微服务中,如果服务与服务之间的依赖关系非常复杂,如果某个服务出现一些问题,很难知道原因。

技术分享图片

 

 

 Spring Cloud提供ZipKin组件

 

SpringCloud Zipkin 与Sleuth
Zipkin 是一个开放源代码分布式的跟踪系统,由Twitter公司开源,它致力于收集服务的定时数据,以解决微服务架构中的延迟问题,包括数据的收集、存储、查找和展现。
每个服务向zipkin报告计时数据,例如用户每次请求服务的处理时间等,可方便的监测系统中存在的瓶颈。
zipkin会根据调用关系通过Zipkin UI生成依赖关系图。

Spring Cloud Sleuth为服务之间调用提供链路追踪。通过Sleuth可以很清楚的了解到一个服务请求经过了哪些服务,每个服务处理花费了多长。从而让我们可以很方便的理清各微服务间的调用关系。此外Sleuth可以帮助我们:
耗时分析: 通过Sleuth可以很方便的了解到每个采样请求的耗时,从而分析出哪些服务调用比较耗时;
可视化错误: 对于程序未捕捉的异常,可以通过集成Zipkin服务界面上看到;
链路优化: 对于调用比较频繁的服务,可以针对这些服务实施一些优化措施。
Spring Cloud Sleuth可以结合Zipkin,将信息发送到Zipkin,利用Zipkin的存储来存储信息,利用Zipkin Ui来展示数据。

  

 

搭建Zipkin服务追踪系统

      

Spring Boot 2.0 版本之后,官方已不推荐自己搭建定制了,而是直接提供了编译好的 jar 包。详情可以查看官网:https://zipkin.io/pages/quickstart.html
注意:zipkin官网已经提供定制了,使用官方jar运行即可。

启动方式:
默认端口号启动zipkin服务
java –jar zipkin.jar 默认端口号; 9411
访问地址:http://192.168.18.220:9411

指定端口号启动8080启动zipkin服务
java -jar zipkin.jar --server.port=8080
访问地址:http://192.168.18.220:8080

指定访问rabbitmq 启动
java -jar zipkin.jar --zipkin.collector.rabbitmq.addresses=127.0.0.1

 技术分享图片

访问:http://192.168.8.159:9411/zipkin/

技术分享图片

 

 默认的值是在内存中  需要设置持久化到内存中哦

 

 案例展示  order  ---> member ---> msg

在Order服务、Member、Msg服务里面引入:

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

pom:

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.1.RELEASE</version>
    </parent>
    <!-- 管理依赖 -->
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Finchley.M7</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <dependencies>
        <!-- SpringBoot整合Web组件 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- SpringBoot整合eureka客户端 -->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>

    </dependencies>
    <!-- 注意: 这里必须要添加, 否者各种依赖有问题 -->
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/libs-milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>

yml配置

技术分享图片

 

 

###会员项目的端口号
server:
  port: 8000
###服务别名----服务注册到注册中心名称 
spring:
  application:
    name: app-toov5-member
  zipkin: 
    base-url: http://127.0.0.1:9411/
  ###全部采集  
  sleuth:
    sampler:
      probability: 1.0

eureka:
  client:
    service-url:
    ##### 当前会员服务注册到eureka服务地址
      defaultZone: http://localhost:8100/eureka
    ### 需要将我的服务注册到eureka上
    register-with-eureka: true
    ####需要检索服务
    fetch-registry: true

 

 

底层原理:

   

服务跟踪原理
为了实现请求跟踪,当请求发送到分布式系统的入口端点时, 只需要服务跟踪框架为该请求创建一个唯的跟踪标识, 同时在分布式系统内部流转的时候,框架始终保持传递该唯一标识, 直到返回给请求方为止,这个唯一标识就是前 文中提到的Trace ID。通过Trace ID的记录,我们就能将所有请求过程的日志关联起来。
为了统计各处理单元的时间延迟,当请求到达各个服务组件时,或是处理逻辑到达某个状态时,也通过一个唯一 标识来标记它的开始、 具体过程以及结束,该标识就是前文中提到的Span ID。对于每个Span来说,它必须有开始和结束两个节点,通过记录开始Span和结束Span的时间戳,就能统计出该Span的时间延迟,除了时间戳记录之外,它还可以包含一些其他元数据, 比如事件名称、请求信息等
SpanId记录每一次请求, TraceID记录整个调用链全局ID

 

    TraceId 和 SpanId 在微服务中传递追踪

    TraceId记录每一次请求,耗时时间、接口调用关系

    TraceId和SpanId在微服务中传递追踪

  

    在微服务中,使用请求头传递TraceId和SpanId,一个TraceId由多个SpanId组合起来。获取到整个微服务调用依赖关系

    

下一级的parentId就是上一级的spanId 形成一个链

每次请求生成一个新的spanId

   

 


























使用skywalking+elasticsearch实现全链路监控(代码片段)

...以便发生故障的时候,能够快速定位和解决问题。这时候分布式追踪系统就该闪亮登场了。一、分布式追踪系统skywalking1、什么是分布式追踪?上图是常见的微服务的框架,4个实例,2个MySQL、1个Redis。实际上它有两次完全不同的... 查看详情

浅议分布式链路追踪与日志的整合(代码片段)

本文内容.NET中的分布式追踪ActivitySource与Activity.NET与OpenTelemetry分布式追踪和日志整合NLog.DiagnosticSource自定义LayoutRenderer本文小结最近拜读了Artech大佬的新文章《几个Caller-特性的妙用》,可以说是受益匪浅。不过,对我而言,最... 查看详情

聊聊分布式链路追踪(代码片段)

...p://lidawn.github.io/2018/12/26/distribute-tracing/起因最近一直在做分布式链路追踪的调研和实践,整理一下其中的知识点。什么是链路追踪分布式系统变得日趋复杂,越来越多的组件开始走向分布式化,如微服务、分布式数据库、分布式... 查看详情

使用篇丨链路追踪(tracing)其实很简单:请求轨迹回溯与多维链路筛选(代码片段)

本章我们将以业务Owner(小帅)的视角,逐步了解分布式链路追踪的各种基础用法:小到单次用户请求的异常根因诊断,大到全局系统的强弱依赖梳理,分布式链路追踪都能给予确定性答案。作者:涯海在日常生活中,我们可能... 查看详情

浅议分布式链路追踪与日志的整合(代码片段)

本文内容.NET中的分布式追踪ActivitySource与Activity.NET与OpenTelemetry分布式追踪和日志整合NLog.DiagnosticSource自定义LayoutRenderer本文小结最近拜读了Artech大佬的新文章《几个Caller-特性的妙用》,可以说是受益匪浅。不过,对我而言,最... 查看详情

sleuth+zipkin实现springcloud链路追踪(代码片段)

...控:方案概述与比较一文中,我们有详细介绍过分布式链路跟踪的实现理论基础。我们看到上图,知道在微服务架构下,系统的功能是由大量的微服务协调组成的,例如:电商下单业务就需要订单服务、库... 查看详情

第二十二篇商城系统-skywalking链路追踪商城系统完结篇(代码片段)

...统,包含监控,追踪,并拥有故障诊断能力的分布式系统一、Skywalking介绍1.什么是SkyWalking  Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的产品,它同时吸收了Zipkin/Pinpoint/CAT的设计思路。特点是... 查看详情

第二十二篇商城系统-skywalking链路追踪商城系统完结篇(代码片段)

...统,包含监控,追踪,并拥有故障诊断能力的分布式系统一、Skywalking介绍1.什么是SkyWalking  Skywalking是由国内开源爱好者吴晟开源并提交到Apache孵化器的产品,它同时吸收了Zipkin/Pinpoint/CAT的设计思路。特点是... 查看详情

「开源摘星计划」jaeger实现harbor的链路监控(代码片段)

前言1.1Harbor新功能-分布式跟踪  Harbor在2.4.0版本后新增一个功能:向Harbor添加跟踪功能,以增强故障排除、识别性能瓶颈等。目前Harbor支持Jaeger和OpenTelemetry(简称otel)两种实现方式。1.2Jaeger简单介绍  Jaeger是一个... 查看详情

分布式链路追踪之springcloudsleuth+zipkin最全教程(代码片段)

...。文章的目录如下:为什么需要链路追踪?大型分布式微服务系统中,一个系统被拆分成N多个模块,这些模块负责不同的功能,组合成一套系统,最终可以提供丰富的功能。在这种分布式架构中,一次... 查看详情

sleuth+zipkin实现springcloud链路追踪(代码片段)

...控:方案概述与比较一文中,我们有详细介绍过分布式链路跟踪的实现理论基础。我们看到 查看详情

分布式链路追踪在字节跳动的实践

综述字节跳动在发展过程中,逐渐形成了十分复杂的超大规模微服务体系,对后端整体的可观测性解决方案提出了极高的要求。为了解决这个问题,基础架构智能运维团队自研链路追踪系统,将海量Metrics/Trace/Log数据进行整合与... 查看详情

分布式链路监控系统(代码片段)

...g,从数据模型、数据埋点以及数据存储三个方面介绍分布式链路监控系统的实现细节,其中将重点介绍Skywalking字节码增强的实现方案。背景传统的大型单体系统随着业务体量的增大已经很难满足市场对技术的需求,... 查看详情

分布式链路监控系统(代码片段)

...g,从数据模型、数据埋点以及数据存储三个方面介绍分布式链路监控系统的实现细节,其中将重点介绍Skywalking字节码增强的实现方案。背景传统的大型单体系统随着业务体量的增大已经很难满足市场对技术的需求,... 查看详情

分布式链路追踪(sleuthzipkin)(代码片段)

...就需要解决一个问题,如何快速定位服务故障点,于是,分布式系统调用链追踪技术就此诞生了。ZipKinZipkin是一个由Twitter公司提供并开放源代码分布式的跟踪系统,它可以帮助收集服务的时间数据,以解决微服务架构中的延迟... 查看详情

rabbitmq+sleuth+zinkip分布式链路追踪(代码片段)

...务架构系统中,几乎每一个前端请求都会形成一个复杂的分布式服务调用链路,在每条链路中任何一个依赖服务出现延迟超时或者错误都有可能引起整个请求最后的失败。当业务流程足够复杂时,一个完整的HTTP请求调用链一般... 查看详情

opentracing链路追踪(代码片段)

...我们定位异常服务和发现性能瓶颈。OpentracingOpentracing是分布式链路追踪的一种规范标准,是CNCF(云原生计算基金会)下的项目之一。和一般的规范标准不同,Opentracing不是传输协议,消息格式层面上的规范标准,而是一种语言... 查看详情

sleuth+zipkin服务链路追踪(代码片段)

...-cloud-sleuth.html一、为什么要用链路追踪微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多& 查看详情