SpringCloud 2020.0.4 系列之 Sleuth + Zipkin

2024-05-31 23:58

本文主要是介绍SpringCloud 2020.0.4 系列之 Sleuth + Zipkin,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1. 概述

2. Zipkin 服务的搭建

3. Demo 服务的搭建

4. Zipkin 的简单使用

5. 综述

6. 个人公众号


1. 概述

老话说的好:安全不能带来财富,但盲目的冒险也是不可取的,大胆筹划,小心实施才是上策。

言归正传,微服务的特点就是服务多,服务间的互相调用也很复杂,就像一张关系网,因此为了更好的定位故障和优化性能,我们需要有工具帮我们很快的梳理出服务间上下游的调用关系。Sleuth 就可以很好的帮我们解决这个问题。

但 Sleuth 只是做了后台工作,没有展示页面,不方便我们对调用链进行分析。因此需要 Zipkin 去把数据展示出来,方便我们进行分析。

闲话不多说,直接上代码。

2. Zipkin 服务的搭建

2.1 Zipkin 服务的搭建方式

我们打开Zipkin的官网地址:Quickstart · OpenZipkin

如图所示,Zipkin Server 支持 Docker方式启动,Java 运行 Jar 包方式启动,以及编译源码的方式启动。

2.2 Java 运行 jar 包方式启动

大家可以根据自己的喜好选择启动方式,这里我们选择 Java 运行 jar 包的方式启动。

1)下载 zipkin.jar 

# curl -sSL https://zipkin.io/quickstart.sh | bash -s

2)启动 Zipkin Server

# java -jar zipkin.jar

2.3 访问 Zipkin Server

http://IP:9411/zipkin/

3. Demo 服务的搭建

3.1 概述

这里我们搭建两个有调用关系的服务作为 Demo。

两个服务都依赖 Sleuth 和 Zipkin。

3.2 my-sleuth-A 的搭建

3.2.1 主要依赖

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 健康检查 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><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><version>2.2.8.RELEASE</version></dependency>

3.2.2 主要配置

server:port: 46000
spring:application:name: my-sleuth-Asleuth:sampler:probability: 1  # 采样率100%zipkin:base-url: http://192.168.1.22:9411  # Zipkin Server 地址eureka:client:service-url:defaultZone: http://zhuifengren1:35000/eureka/,http://zhuifengren2:35001/eureka/    # Eureka Server的地址

3.2.3 启动类

@SpringBootApplication
@EnableDiscoveryClient
public class MySleuthAApplication {@LoadBalanced@Beanpublic RestTemplate lb() {return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(MySleuthAApplication.class, args);}
}

3.2.4 Demo Controller

@RestController
@Slf4j
public class Controller {@Autowiredprivate RestTemplate restTemplate;@GetMapping("/traceA")public String traceA() {log.info("-------- traceA -------");return restTemplate.getForEntity("http://my-sleuth-B/traceB", String.class).getBody();}
}

3.3 my-sleuth-B 的搭建

3.3.1 主要依赖

        <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-client</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- 健康检查 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><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><version>2.2.8.RELEASE</version></dependency>

3.3.2 主要配置

server:port: 46001
spring:application:name: my-sleuth-Bsleuth:sampler:probability: 1  # 采样率100%zipkin:base-url: http://192.168.1.22:9411  # Zipkin Server 地址eureka:client:service-url:defaultZone: http://zhuifengren1:35000/eureka/,http://zhuifengren2:35001/eureka/    # Eureka Server的地址

3.3.3 启动类

@SpringBootApplication
@EnableDiscoveryClient
public class MySleuthBApplication {@LoadBalanced@Beanpublic RestTemplate lb() {return new RestTemplate();}public static void main(String[] args) {SpringApplication.run(MySleuthBApplication.class, args);}
}

3.3.4 Demo Controller

@RestController
@Slf4j
public class Controller {@Autowiredprivate RestTemplate restTemplate;@GetMapping("/traceB")public String traceB() {log.info("-------- traceB -------");return "traceB";}
}

4. Zipkin 的简单使用

4.1 调用 Demo 接口

调用两个Demo工程的接口

GET http://localhost:46001/traceB

GET http://localhost:46000/traceA

4.2 打开 zipkin 查看

4.3 依赖关系图查看 

5. 综述

今天聊了一下 调用链追踪 Sleuth + Zipkin ,希望可以对大家的工作有所帮助。

欢迎帮忙点赞、评论、转发、加关注 :)

关注追风人聊Java,每天更新Java干货。

6. 个人公众号

追风人聊Java,欢迎大家关注

这篇关于SpringCloud 2020.0.4 系列之 Sleuth + Zipkin的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1019413

相关文章

Spring Boot @RestControllerAdvice全局异常处理最佳实践

《SpringBoot@RestControllerAdvice全局异常处理最佳实践》本文详解SpringBoot中通过@RestControllerAdvice实现全局异常处理,强调代码复用、统... 目录前言一、为什么要使用全局异常处理?二、核心注解解析1. @RestControllerAdvice2

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2

怎样通过分析GC日志来定位Java进程的内存问题

《怎样通过分析GC日志来定位Java进程的内存问题》:本文主要介绍怎样通过分析GC日志来定位Java进程的内存问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、GC 日志基础配置1. 启用详细 GC 日志2. 不同收集器的日志格式二、关键指标与分析维度1.

Java进程异常故障定位及排查过程

《Java进程异常故障定位及排查过程》:本文主要介绍Java进程异常故障定位及排查过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、故障发现与初步判断1. 监控系统告警2. 日志初步分析二、核心排查工具与步骤1. 进程状态检查2. CPU 飙升问题3. 内存

java中新生代和老生代的关系说明

《java中新生代和老生代的关系说明》:本文主要介绍java中新生代和老生代的关系说明,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、内存区域划分新生代老年代二、对象生命周期与晋升流程三、新生代与老年代的协作机制1. 跨代引用处理2. 动态年龄判定3. 空间分

Java设计模式---迭代器模式(Iterator)解读

《Java设计模式---迭代器模式(Iterator)解读》:本文主要介绍Java设计模式---迭代器模式(Iterator),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录1、迭代器(Iterator)1.1、结构1.2、常用方法1.3、本质1、解耦集合与遍历逻辑2、统一

Java内存分配与JVM参数详解(推荐)

《Java内存分配与JVM参数详解(推荐)》本文详解JVM内存结构与参数调整,涵盖堆分代、元空间、GC选择及优化策略,帮助开发者提升性能、避免内存泄漏,本文给大家介绍Java内存分配与JVM参数详解,... 目录引言JVM内存结构JVM参数概述堆内存分配年轻代与老年代调整堆内存大小调整年轻代与老年代比例元空

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析

Java 线程安全与 volatile与单例模式问题及解决方案

《Java线程安全与volatile与单例模式问题及解决方案》文章主要讲解线程安全问题的五个成因(调度随机、变量修改、非原子操作、内存可见性、指令重排序)及解决方案,强调使用volatile关键字... 目录什么是线程安全线程安全问题的产生与解决方案线程的调度是随机的多个线程对同一个变量进行修改线程的修改操