微服务架构➖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等)一起使用。同时,它也提供了灵活的扩展点,可以根据需要自定义跟踪数据的生成、传递和展示方式。
相关推荐
瑶山7 小时前
Spring Cloud微服务搭建五、集成负载均衡,远程调用,熔断降级
spring cloud·微服务·负载均衡·远程调用·熔断降级
Victor3567 小时前
MongoDB(2)MongoDB与传统关系型数据库的主要区别是什么?
后端
JaguarJack7 小时前
PHP 应用遭遇 DDoS 攻击时会发生什么 从入门到进阶的防护指南
后端·php·服务端
BingoGo7 小时前
PHP 应用遭遇 DDoS 攻击时会发生什么 从入门到进阶的防护指南
后端
Victor3567 小时前
MongoDB(3)什么是文档(Document)?
后端
牛奔9 小时前
Go 如何避免频繁抢占?
开发语言·后端·golang
想用offer打牌14 小时前
MCP (Model Context Protocol) 技术理解 - 第二篇
后端·aigc·mcp
KYGALYX16 小时前
服务异步通信
开发语言·后端·微服务·ruby
掘了16 小时前
「2025 年终总结」在所有失去的人中,我最怀念我自己
前端·后端·年终总结