微服务架构➖SpringCloud➖Sleuth

微服务架构➖SpringCloud➖Sleuth

关于作者

  • 作者介绍

🍓 博客主页:作者主页

🍓 简介:JAVA领域优质创作者🥇、一名在校大三学生🎓、在校期间参加各种省赛、国赛,斩获一系列荣誉 🏆、阿里云专家博主51CTO专家博主

🍓 关注我:关注我学习资料、文档下载统统都有,每日定时更新文章,励志做一名JAVA资深程序猿👨‍💻


Spring Cloud Sleuth

1. 什么是链路追踪

官网:spring.io/projects/sp...

链路追踪就是:追踪微服务的调用路径

2. 链路追踪的由来

在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的服务节点调用来协 同产生最后的请求结果,每一个请求都会开成一条复杂的分布式服务调用链路,链路中的任何 一环出现高延时或错误都会引导起整个请求最后的失败。(不建议微服务中链路调用超过 3 次)

3. 分布式链路调用的监控

sleuth+zipkin(zipkin 就是一个可视化的监控控制台)

Zipkin 是 Twitter 的一个开源项目,允许开发者收集 Twitter 各个服务上的监控数据,并提 供查询接口。

该系统让开发者可通过一个 Web 前端轻松的收集和分析数据,例如用户每次请求服务的处 理时间等,可方便的监测系统中存在的瓶颈。

4. 相关名词解释

简化后

名词解释

Trace:类似于树结构的

Span 集合,表示一条调用链路,存在唯一标识 span:表示调用链路来源,通俗的理解 span 就是一次请求信息

5. Zipkin(可视化平台)

相关文章:Zipkin --- 微服务链路跟踪

5.1 下载 zipkin SpringCloud

从 F 版以后已不需要自己构建 Zipkin server 了,只需要调用 jar 包即可

github.com/apache/incu...

Maven Repository: io.zipkin.zipkin2 >> zipkin >> 2.9.4 (mvnrepository.com)

5.2 运行 zipkin

java -jar zipkin-server-2.12.9-exec.jar

5.3 查看 zipkin 的控制

6.springboot Admin 快速入门

6.1 添加依赖

xml 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.3.12.RELEASE</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.zmz</groupId>
	<artifactId>admin-server</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>admin-server</name>
	<description>admin-server Demo project for Spring Boot</description>
	<properties>
		<java.version>1.8</java.version>
		<spring-boot-admin.version>2.3.0</spring-boot-admin.version>
		<spring-cloud.version>Hoxton.SR12</spring-cloud.version>
	</properties>
	<dependencies>
		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-web</artifactId>
		</dependency>
		<dependency>
			<groupId>de.codecentric</groupId>
			<artifactId>spring-boot-admin-starter-server</artifactId>
		</dependency>

		<dependency>
			<groupId>org.springframework.boot</groupId>
			<artifactId>spring-boot-starter-test</artifactId>
			<scope>test</scope>
		</dependency>

		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
		</dependency>
	</dependencies>


	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>de.codecentric</groupId>
				<artifactId>spring-boot-admin-dependencies</artifactId>
				<version>${spring-boot-admin.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
			<dependency>
				<groupId>org.springframework.cloud</groupId>
				<artifactId>spring-cloud-dependencies</artifactId>
				<version>${spring-cloud.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<build>
		<plugins>
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
		</plugins>
	</build>

</project>

6.2 主启动类添加注解

java 复制代码
package com.zmz;

import de.codecentric.boot.admin.server.config.EnableAdminServer;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;

@SpringBootApplication
@EnableEurekaClient
@EnableAdminServer
public class AdminServerApplication {

	public static void main(String[] args) {
		SpringApplication.run(AdminServerApplication.class, args);
	}

}

6.3 配置文件

yml 复制代码
server:
  port: 10086 #端口号范围 1~65535
spring:
  application:
    name: admin-server
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka
  instance:
    hostname: localhost
    instance-id: ${eureka.instance.hostname}:${spring.application.name}:${server.port}

具体服务没有详情,解决办法:

yml添加以下配置

yml 复制代码
management:
  endpoints:
    web:
      exposure:
        include: "*"    #暴露所有的监控端点,#如果一个服务需要被监控,需要将自身的一些情况例如端口给暴露出去
  endpoint:
    health:
      show-details: ALWAYS

那我们为什么要使用Sleuth呢?(优点)

  • 分布式追踪:在微服务架构中,一个请求通常会经过多个不同的服务和组件。使用Spring Cloud Sleuth,我们可以为每个请求生成唯一的跟踪ID,并在整个请求链路中传递该ID。这样,我们可以跟踪一个请求从起始点到终点的完整路径,包括它经过的每个服务和组件。
  • 故障排查和性能优化:当一个请求在系统中出现问题或延迟时,使用Spring Cloud Sleuth可以帮助我们快速定位问题所在。通过查看跟踪数据,我们可以了解每个服务的执行时间、调用关系和异常情况等信息,从而更容易排查故障和进行性能优化。
  • 监控和度量:Spring Cloud Sleuth与其他监控工具(如Zipkin、ELK等)集成,可以将跟踪数据发送到监控系统中进行展示和分析。通过可视化的方式,我们可以监控系统中的请求流量、服务调用关系、延迟分布等指标,帮助我们了解系统的健康状况并做出相应的优化和调整。
  • 链路追踪的一致性:当一个请求经过多个不同的服务时,每个服务都会生成和传递跟踪ID,保证了整个链路的一致性。这对于理解请求的整体流程和追踪请求在不同服务之间的传递非常重要,尤其是在复杂的微服务架构中。
  • 集成和扩展性:Spring Cloud Sleuth与Spring Cloud框架紧密集成,可以方便地与其他Spring Cloud组件(如Eureka、Ribbon、Feign等)一起使用。同时,它也提供了灵活的扩展点,可以根据需要自定义跟踪数据的生成、传递和展示方式。
相关推荐
Pandaconda7 分钟前
【计算机网络 - 基础问题】每日 3 题(十)
开发语言·经验分享·笔记·后端·计算机网络·面试·职场和发展
程序员大金43 分钟前
基于SpringBoot+Vue+MySQL的养老院管理系统
java·vue.js·spring boot·vscode·后端·mysql·vim
customer081 小时前
【开源免费】基于SpringBoot+Vue.JS网上购物商城(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
Ylucius1 小时前
JavaScript 与 Java 的继承有何区别?-----原型继承,单继承有何联系?
java·开发语言·前端·javascript·后端·学习
你知道“铁甲小宝”吗丶2 小时前
【第33章】Spring Cloud之SkyWalking服务链路追踪
java·spring boot·spring·spring cloud·skywalking
ღ᭄ꦿ࿐Never say never꧂2 小时前
微服务架构中的负载均衡与服务注册中心(Nacos)
java·spring boot·后端·spring cloud·微服务·架构·负载均衡
.生产的驴2 小时前
SpringBoot 消息队列RabbitMQ 消息确认机制确保消息发送成功和失败 生产者确认
java·javascript·spring boot·后端·rabbitmq·负载均衡·java-rabbitmq
海里真的有鱼2 小时前
Spring Boot 中整合 Kafka
后端
布瑞泽的童话2 小时前
无需切换平台?TuneFree如何搜罗所有你爱的音乐
前端·vue.js·后端·开源