欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 名人名企 > SpringCloud Sleuth

SpringCloud Sleuth

2024/10/27 11:43:57 来源:https://blog.csdn.net/weixin_59248828/article/details/141230588  浏览:    关键词:SpringCloud Sleuth

章节概要:我们使用Spring Cloud搭建的微服务集群,Eureka服务器、Client客户端、Config配置服务器、Zuul网关等节点,都可以横向扩展。一旦集群中的服务数量增多,并且服务之间存在复杂的依赖关系,那么管理这些服务将会变成一件很棘手的事情,为解决以上问题,在微服务架构中实现分布式服务链路追踪变得尤为重要。

Spring Cloud Sleuth 概述

Spring Cloud Sleuth 介绍

概述Spring Cloud提供了Sleuth框架作为解决方案,Sleuth可以在整个分布式系统中跟踪一个用户请求的过程(包括数据采集,数据传输,数据存储,数据分析,数据可视化等)捕获这些跟踪的数据,并构建微服务的整个调用链的视图,为服务跟踪、解决问题提供便利。

特点:1.提供链路追踪  2.性能分析 3.数据分析 4.可视化

Spring Cloud Sleuth 的术语

Spring Cloud Sleuth采用的是Google的开源项目Dapper的专业术语,包括了:

  • Span跨度,表示一次调用的过程,一次跟踪包含多次调用过程。
  • Treace表示整个追踪过程,从用户发起请求到最终的响应。
  • Annotation用来及时记录一个事件的存在,一些核心Annotations用来定义一个请求的开始和结束。

 Annotation主要包括以下几个事件标识:

  • cs: Client Sent, 表示客户端发送了请求,这个标识意味着跨度的开始
  • sr: Server Received,表示服务端接收到请求,并开始进行处理
  • ss: Server Sent,表示服务器端完成请求的处理,并对客户端做出响应
  • cr: Client Received, 表示客户端接收到响应,意味着整个跨度的结束 

Stream Cloud Sleuth整合Zipkin

引导

Spring Cloud Sleuth整合Zipkin,我们将微服务产生的日志交给Zipkin去分析,Zipkin是一个分布式追踪系统,主要用于收集管理微服务产生的数据Zipkin的设计是基于Google Dapper实现的。在实际应用时,我们需要让各个微服务向Zipkin服务器报告过程数据。 

Stream整合Zipkin工程

1.搭建Eureka Server

拿之前搭建过的即可简单创建Eureka应用-CSDN博客

2.创建Zipkin服务端

1.依赖:

<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>io.zipkin.java</groupId><artifactId>zipkin-server</artifactId><version>2.11.8</version></dependency><dependency><groupId>io.zipkin.java</groupId><artifactId>zipkin-autoconfigure-ui</artifactId><version>2.11.8</version></dependency></dependencies>

2.application.yml

server:port: 9411
spring:application:name: zipkin-server
eureka:client:service-url:defaultZone: http://localhost:7000/eureka/     #注册中心地址
management:metrics:web:server:auto-time-requests: false           #关闭自动收集web请求

 3.在启动类添加@EnableEurekaClient 和 @EnableZipkinServer

@SpringBootApplication
@EnableEurekaClient
@EnableZipkinServer
public class ZipkinServerApplication {public static void main(String[] args) {SpringApplication.run(ZipkinServerApplication.class, args);}}

3.创建网关

1.依赖:

<dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-zuul</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-server</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId></dependency></dependencies>

application.yml:

server:port: 9410
spring:application:name: gateway-servicezipkin:base-url: http://localhost:9411/sleuth:sampler:probability: 1.0
eureka:client:service-url:defaultZone: http://localhost:7000/eureka/
management:metrics:web:server:auto-time-requests: false
zuul:routes:eureka-consumer:  #这里记得改path: /eureka-consumer/**host:socket-timeout-millis: 60000connect-timeout-millis: 10000

3.在启动类添加:@EnableEurekaClient @EnableZuulProxy

@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class GatewayServiceApplication {public static void main(String[] args) {SpringApplication.run(GatewayServiceApplication.class, args);}}

4.创建提供者

依赖;

<dependencies><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.boot</groupId><artifactId>spring-boot-starter-test</artifactId><version>2.1.7.RELEASE</version><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.1.7.RELEASE</version></dependency></dependencies>

application.yml:

server:port: 7010
spring:application:name: eureka-providerzipkin:base-url: http://localhost:9411/sleuth:sampler:probability: 1.0
eureka:client:service-url:defaultZone: http://localhost:7000/eureka/instance:hostname: localhost

启动类 添加@EnableEurekaClient @RestController,并写暴露接口

@SpringBootApplication
@EnableEurekaClient
@RestController
public class EurekaProviderApplication {public static void main(String[] args) {SpringApplication.run(EurekaProviderApplication.class, args);}@GetMapping("/hi")public String hi(){return "hello,已经访问到了eureka-provider工程中的hi接口";}
}

5.创建消费者

依赖:

<dependencies><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-test</artifactId><version>2.1.7.RELEASE</version><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><version>2.1.7.RELEASE</version></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-zipkin</artifactId></dependency></dependencies>

application.yml:

server:port: 7011
spring:application:name: eureka-consumerzipkin:base-url: http://localhost:9411/sleuth:sampler:probability: 1.0
eureka:client:service-url:defaultZone: http://localhost:7000/eureka/instance:hostname: localhost

 启动类

@SpringBootApplication
@EnableEurekaClient
@RestController
public class EurekaConsumerApplication {public static void main(String[] args) {SpringApplication.run(EurekaConsumerApplication.class, args);}@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}@GetMapping("/hi")public String hi(){return restTemplate().getForObject("http://eureka-provider/hi",String.class);}
}

6.启动测试

查看是否在eureka服务注册成功

通过网关访问,然后查看ZipKin可视化。

 

 

 

通过单击导航栏中的依赖分析Dependencies选项,可以查看次请求服务之间的依赖调用关系

 

        可以看到,客户端先通过网关服务gateway-service调用了生产者eureka-provider,然后eureka-provider调用了消费者eureka-consumer。说明Spring Cloud Sleuth整合Zipkin实现链路追踪成功。 

Zipkin链路中添加自定义数据

概述

        在实际开发中,Zipkin默认展示的链路数据有时无法满足我们想要获取的数据,比如,无法在ZipkinUI界面中看到请求发送人的名称, 这时,可以使用Zipkin添加自定义链路数据,将请求发送人的名称添加在链路数据中。在本小节中,我们在gateway-service网关服务中添加Zipkin自定义链路数据实现在ZipkinUI界面中看到请求发送人的名称     

在Zipkin链路中添加自定义数据

1.在网关项目中创建Filter

gateway-service项目中新建filter包,并在该包下创建一个LoggerFilter

package com.xiaofeng.filter;import brave.Tracer;
import com.netflix.zuul.ZuulFilter;
import com.netflix.zuul.exception.ZuulException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants;
import org.springframework.stereotype.Component;@Component
public class LoggerFilter extends ZuulFilter {@Autowiredprivate Tracer tracer;@Overridepublic String filterType() {return FilterConstants.POST_TYPE;}@Overridepublic int filterOrder() {return 1;}@Overridepublic boolean shouldFilter() {return true;}@Overridepublic Object run() throws ZuulException {System.out.println(tracer.currentSpan().tag("name","xiaofeng"));return null;}
}

2.启动测试

依次启动eureka-serverzipkin-servereureka-providereureka-consumergateway-service使用浏览器访问http://localhost:9410/eureka-provider/service1。在使用浏览器访问http://localhost:9411/页面会显示 Zipkin服务端的UI界面。在Service Name下拉框选择gateway-service,单击 “Find Trances”按钮,可以看到我们这次请求的节点信息,双击gateway-service服务的节点信息,可以查看gateway-service项目链路的详细信息。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com