SpringCloud,Sleuth+Zipkin

一、介绍

        SpringCloud Sleuth为微服务提供了调用链路追踪解决方案,并且兼容支持了Zipkin,只需要引入相应的依赖,配置,即可实现对链路的监控。

       SpringCloud Sleuth可以追踪10种组件:async、Hystrix、messaging、websocket、rxjava、scheduling、web(Spring MVC Controller, Servlet)、webclient(Spring RestTemplate)、Feign、Zuul 。可以参考 Spring Cloud Sleuth消息追踪原理,该博客介绍了Sleuth对8中常用组件的追踪原理。

        SpringCloud对Zipkin进行了有效的集成,Zipkin是Twitter开源的轻量级分布式链路调用监控系统。Zipkin易于搭建,但是监控的东西很简单。pinpoint以及skywalking不仅仅提供了分布式服务的跟踪能力,还提供了其他性能监控,是一个APM解决方案。

        分布式服务追踪系统主要有一下三个关键点:

        1. Span。一个基础工作单元(例如服务调用)。为了统计各处理单元的时间延迟,当请求到达各服务组件时,也通过一个唯一标识(Span ID)标记它的开始、具体过程、结束。通过Span的开始和结束的时间戳,就能统计这个Span的时间延迟,获取事件名称、请求信息等元数据。

        2. Trace。 一系列Span组成的树状结构。所有Span通过相同的Trace串联组成。为了实现请求跟踪,当请求到一个分布式系统的入口端点时,只需要服务跟踪框架为该请求创建一个唯一的跟踪标识(Trace ID),同时在服务内部流转时始终保持传递该唯一标识,直到请求返回为止。框架通过它将请求过程中的日志关联起来。

        3. Annotation。用来及时记录一个事件的存在,一些核心Annotation用来定义请求的开始和结束。

        ● cs(Client Sent):客户端发出一个请求,这个Annotation描述了这个Span的开始。

        ● sr(Server Received):服务端收到请求并开始处理。timestampsr-timesampcs=网络延迟。

        ● ss(Server Sent):服务器处理完并准备返回给客户端。timestampss-timesampsr=服务器处理时间。

        ● cr(Client Received):客户端收到响应,表明Span的结束。timestampcr-timestampcs=请求总时间。



二、Zipkin结构与传输

下图更能体现Zipkin的工作流程。

跟踪工具报告是异步的,避免跟踪系统对服务造成延时或故障。

Client收到服务的响应后,异步发送给Zipkin,Zipkin Collecter守护程序收到追踪数据,Zipkin Collecter就会对追踪数据进行验证、存储、索引。


Transport

    追踪数据要从Span传输到Zipkin Collector服务,有三种主要的传输方式:Http,MQ(kafka),Scribe。

Components

    Collector:一旦数据到达了Zipkin Collector的守护程序,就会被收集。

    Storage:默认内存。Cassandra最初是为了存Zipkin数据而建立的,因为Cassandra可拓展。Cassandra可插拔,所以通常用ES,Mysql等替代。

    Query Service:一旦数据被存储或者索引,我们就要用一种方法提取数据。查询守护进程提供一个简单的JSON API用于查找和检索跟踪。这个API的主要使用者是Web UI。

    Web UI:提供了基于服务、时间、注释查看跟踪的方法。(没有内置的身份验证机制)


三、创建一个Zipkin Server

        1. 导入web依赖,以及Zipkin Server、Zipkin UI的依赖

<dependency>
			<groupId>io.zipkin.java</groupId>
			<artifactId>zipkin-server</artifactId>
		</dependency>

		<dependency>
			<groupId>io.zipkin.java</groupId>
			<artifactId>zipkin-autoconfigure-ui</artifactId>
		</dependency>
        2. 开启@EnableZipkinServer注解
@SpringBootApplication
@EnableZipkinServer
public class ZipkinApplication {
	public static void main(String[] args) {
		SpringApplication.run(ZipkinApplication.class, args);
	}
}
        3. 修改配置文件,设置端口
spring.application.name=sleuth-service
server.port=8770


四、创建service-1,service-2, service-1通过RestTemplate调用service-2

        1. 引入web、Sleuth、Zipkin依赖

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

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

        2. 两个工程创建两个接口,service-1的接口调用service-2的接口

service-1:

@SpringBootApplication
@RestController
public class Service1Application {

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

	@Autowired
	RestTemplate restTemplate;

	@Bean
	RestTemplate getRestTemplate(){
		return new RestTemplate();
	}

	@RequestMapping("/service2")
	public String callService2(){
		return restTemplate.getForObject("http://localhost:8772/call", String.class);
	}
}
service-2:
@SpringBootApplication
@RestController
public class Service2Application {
	@Autowired
	RestTemplate restTemplate;

	@Bean
	RestTemplate getRestTemplate() {
		return new RestTemplate();
	}

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

	@RequestMapping("/call")
	public String call(){
		return "service-2 called..";
	}
}

        3. 增加配置

service-1:

server.port=8771

spring.application.name=service-1
spring.zipkin.base-url=http://localhost:8770
spring.sleuth.sampler.percentage=1
service-2:
server.port=8772

spring.application.name=service-2
spring.zipkin.base-url=http://localhost:8770
spring.sleuth.sampler.percentage=1

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

注意:这里要配置采样率spring.sleuth.sampler.percentage=1,如果不配置这里默认为0.1,如果调大值为1,可以在Web UI上更及时看到信息。但是调大会影响服务调用速率。

★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

五、测试

先启动Zipkin Server,访问 http:localhost:8770/


启动两个服务,  访问service-1中调用service-2的接口    localhost:8771/service2


再刷新Zipkin UI的Dependencies


trace:








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spring Cloud Sleuth是一个分布式跟踪解决方案,它可以帮助我们跟踪微服务架构中的请求流程和调用链路。它通过为每个请求生成唯一的跟踪ID和跟踪标记,来实现跨服务的请求追踪和监控。同时,它还提供了可视化的跟踪数据展示和分析工具,方便我们进行问题排查和性能优化。 ### 回答2: Spring Cloud Sleuth是一个分布式追踪系统,它提供了在分布式系统中跟踪和解决请求的能力。它可以帮助开发人员定位和解决系统中的性能问题。 Spring Cloud Sleuth通过在每个微服务之间添加唯一的跟踪标识符,跟踪请求的流程和路径。当一个请求进入系统时,Sleuth会为该请求生成一个唯一的跟踪ID,并将其传递给所有涉及的微服务。每个微服务都会将自己的操作和处理记录到这个跟踪ID下。 使用Spring Cloud Sleuth,开发人员可以方便地追踪和分析每个请求在系统中的耗时和路径。可以通过生成的跟踪ID查找请求的起始点和终点,以及每个微服务的处理时间。这对于识别瓶颈和优化系统性能非常有帮助。 此外,Sleuth还提供了与Zipkin等跟踪系统的集成,使得跨多个微服务的请求的追踪更加方便。通过将跟踪数据发送到Zipkin等跟踪系统,可以在集中的仪表板上查看和分析整个系统的追踪信息,从而更好地诊断和定位问题。 总之,Spring Cloud Sleuth提供了一个简单而有效的分布式追踪解决方案,帮助开发人员跟踪和解决系统中的性能问题。它可以方便地集成到Spring Cloud微服务架构中,使得微服务部署和调试更加方便和可靠。 ### 回答3: Spring Cloud Sleuth是一个分布式追踪解决方案,它可以帮助开发人员追踪分布式系统中的请求流程和跟踪调用链。它采用了Google的Dapper追踪系统设计思想,并将其与Spring Cloud框架结合起来,为开发人员提供了一套简单而强大的分布式追踪工具。 使用Spring Cloud Sleuth,可以轻松地生成唯一的追踪ID并将其传递给每个请求,以便在整个分布式系统中跟踪它们的传播和调用链。这些追踪ID可以在不同的微服务之间以属性的方式传递,从而实现了对请求的全局追踪。 Spring Cloud Sleuth通过在每个微服务之间注入拦截器和过滤器来实现追踪功能。当一个请求进入系统时,拦截器会生成一个唯一的追踪ID,并将其添加到请求头中,然后系统中的每个微服务都会自动将该追踪ID添加到自己的日志中,以便后续跟踪。通过检查这些日志,开发人员可以很容易地了解请求在系统中的传播和调用链。 除了追踪功能之外,Spring Cloud Sleuth还提供了一些其他有用的功能,例如在日志中添加关键的请求信息、生成报告和分析等。这些功能可以帮助开发人员快速定位和解决分布式系统中的问题。 总而言之,Spring Cloud Sleuth是一个强大的分布式追踪解决方案,它可以帮助开发人员追踪分布式系统中的请求流程和调用链。通过使用Sleuth,开发人员可以更轻松地理解和调试复杂的分布式系统,并提高系统的可观测性和可维护性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值