SpringCloud学习(十二)——SpringCloudSleuth+Zipkin服务链路

一、理论基础

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

在微服务系统中,随着业务的发展,系统会变得越来越大,那么各个服务之间的调用关系也就变得越来越复杂。一个HTTP请求会调用多个不同的微服务来处理返回最后的结果,在这个调用过程中,可能会因为某个服务出现网络延迟过久或者错误导致请求失败,这时候对请求的监控就很重要了。

Spring Cloud Sleuth 提供了分布式服务链路监控的解决方案。

1.2、  Spring Cloud Sleuth

它为服务之间调用提供链路追踪。

作用:

(1)通过Sleuth可以很清楚地知道一个服务请求经过了哪些服务,每个服务处理花费了多长时间;

(2)耗时分析:通过Sleuth可以分析哪些服务调用比较耗时;

(3)可视化错误:对于程序未捕捉的异常,可以通过集成Zipkin服务界面上看到;

将信息发送Zipkin利用Zipkin的存储来存储信息,利用Zipkin Ui来展示数据

(4)链路优化:对于调用比较频繁的服务,可以对这些服务实施一些优化措施

1.3、Zipkin框架介绍

Zipkin 是 Twitter 的一个开源项目。可以使用它来收集各个服务上请求链路的跟踪数据,并通过它提供的REST API接口来辅助查询跟踪数据,以实现对分布式系统 的监控程序,从而及时发现系统中出现的延迟过久问题。

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

1.4、搭建Zipkin集成RabbitMQ异步传输

  •  1、启动RabbitMQ
  •  2、启动Zipkin(自动会创建一个Zipkin 队列)
  •  3、启动ZipkinClient以队列形式异步传输

1.5、服务跟踪原理

为了实现请求跟踪,当请求发送到分布式系统的入口端点时,  只需要服务跟踪框架为该请求创建一个唯一的跟踪标识。同时在分布式系统内部流传的时候,框架使用保持传递唯一标识,直到返回给请求方为止,唯一标识就是Trace ID。通过Trace ID的记录,我们就能将所有请求过程的日志关联起来。

为了统计各处理单元的时间延迟,当请求到达各个服务组件时,或是处理逻辑到达某个状态时,也通过一个唯一 标识来标记它的开始、 具体过程以及结束,该标识就是前文中提到的Span ID。

SpanId记录每一次请求, TraceID记录整个调用链全局ID。

二、环境搭建

2.1、Zipkin环境搭建

在 Spring Boot 2.0 版本之后,官方已不推荐自己搭建Zipkin服务端了,而是直接提供了编译好的 jar 包。

官网:https://zipkin.io/pages/quickstart.html

启动方式:

默认端口号启动zipkin服务
java –jar zipkin.jar  默认端口号; 9411

http://192.168.18.220:9411

指定端口号启动9411
java -jar zipkin.jar  --server.port=8080

    指定访问rabbitmq 启动

         java -jar zipkin.jar --zipkin.collector.rabbitmq.addresses=127.0.0.1

2.2、ZipkinClient集成

(1)Maven依赖

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

(2)application.yml

spring:
  application:
    name: app-itmayiedu-member
  zipkin: 
    base-url: http://192.168.18.220:9411/
  ###全部采集  
  sleuth:
    sampler:
      probability: 1.0

(3)ZipkinClient集成rabbitMQ

	<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-stream-binder-rabbit</artifactId>
		</dependency>
spring:
  application:
    name: app-itmayiedu-order
  zipkin: 
    base-url: http://192.168.18.220:9411/
 ### 默认可以不用写   
  rabbitmq:
  ####连接地址
    host: 127.0.0.1
   ####端口号   
    port: 5672
   ####账号 
    username: guest
   ####密码  
    password: guest
  ###全部采集  
  sleuth:
    sampler:
      probability: 1.0
request.getHeader("X-B3-TraceId");
request.getHeader("X-B3-TraceId")+",spanid:"+ request.getHeader("X-B3-SpanId")
发布了52 篇原创文章 · 获赞 116 · 访问量 5万+

猜你喜欢

转载自blog.csdn.net/RuiKe1400360107/article/details/104050176