首页 > 其他分享 >SpringCloud之sleuth

SpringCloud之sleuth

时间:2023-04-02 22:15:13浏览次数:26  
标签:sleuth span 请求 zipkin SpringCloud 8543a55ad8d08b8b 链路 客户端

在大型分布式系统中,一次调用可能要经过很多不同的系统,调用很多服务。每个服务之间的调用会越来越复杂。会引入以下问题:

  1. 如何快速发现问题?
  2. 如何判断故障影响范围?
  3. 如何梳理服务依赖以及依赖的合理性?
  4. 如何分析链路性能问题以及实时容量规划?

 
为了快速定位问题及时解决问题,引入了分布式链路追踪。分布式链路追踪(Distributed Tracing),就是将一次分布式请求还原成调用链路,进行日志记录,性能监控并将一次分布式请求的调用情况集中展示。比如各个服务节点上的耗时、请求具体到达哪台机器上IP、每个服务节点的请求状态200 500等等。市面上链路追踪产品,大部分基于google的Dapper论文。分布式链路追踪组件有:
1、zipkin,twitter开源的。是严格按照谷歌的Dapper论文来的。
2、韩国的Naver公司的pinpoint
3、美团点评的Cat
4、淘宝的EagleEye
5、新兴的SkyWalking

 

链路追踪要考虑的几个问题

  1. 探针的性能消耗。尽量不影响 服务本尊。
  2. 易用。开发可以很快接入,别浪费太多精力。
  3. 数据分析。要实时分析。维度足够。

Sleuth简介

Sleuth是Spring cloud的分布式跟踪解决方案。

  1. span(跨度),基本工作单元。一次链路调用,创建一个span,

    span用一个64位id唯一标识。包括:id,描述,时间戳事件,spanId,span父id。

    span被启动和停止时,记录了时间信息,初始化span叫:root span,它的span id和trace id相等。

  2. trace(跟踪),一组共享“root span”的span组成的树状结构 称为 trace,trace也有一个64位ID,trace中所有span共享一个trace id。类似于一颗 span 树。

  3. annotation(标签),annotation用来记录事件的存在,其中,核心annotation用来定义请求的开始和结束。

    • CS(Client Send客户端发起请求)。客户端发起请求描述了span开始。
    • SR(Server Received服务端接到请求)。服务端获得请求并准备处理它。SR-CS=网络延迟。
    • SS(Server Send服务器端处理完成,并将结果发送给客户端)。表示服务器完成请求处理,响应客户端时。SS-SR=服务器处理请求的时间。
    • CR(Client Received 客户端接受服务端信息)。span结束的标识。客户端接收到服务器的响应。CR-CS=客户端发出请求到服务器响应的总时间。

其实数据结构是一颗树,从root span 开始。

 

要使用Sleuth,只需在每个要监控的服务加入以下依赖:

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

在ConsumerByRibbon,Producer加入spring-cloud-starter-sleuth依赖后,启动后访问http://localhost:8003/helloByFeign,查看日志:

2023-04-02 20:10:09.150  INFO [consumer,8543a55ad8d08b8b,8543a55ad8d08b8b,true] 266333 --- [nio-8003-exec-1] c.n.u.concurrent.ShutdownEnabledTimer    : Shutdown hook installed for:     NFLoadBalancer-PingTimer-producer
2023-04-02 20:10:09.150  INFO [consumer,8543a55ad8d08b8b,8543a55ad8d08b8b,true] 266333 --- [nio-8003-exec-1] c.netflix.loadbalancer.BaseLoadBalancer  : Client: producer instantiated a LoadBalancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=producer,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:null
2023-04-02 20:10:09.166  INFO [consumer,8543a55ad8d08b8b,8543a55ad8d08b8b,true] 266333 --- [nio-8003-exec-1] c.n.l.DynamicServerListLoadBalancer      : Using serverListUpdater PollingServerListUpdater
2023-04-02 20:10:09.203  INFO [consumer,8543a55ad8d08b8b,8543a55ad8d08b8b,true] 266333 --- [nio-8003-exec-1] c.n.l.DynamicServerListLoadBalancer      : DynamicServerListLoadBalancer for client producer initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=producer,current list of Servers=[192.168.31.148:8002, 192.168.31.148:8000],Load balancer stats=Zone stats: {defaultzone=[Zone:defaultzone;	Instance count:2;	Active connections count: 0;	Circuit breaker tripped count: 0;	Active connections per server: 0.0;]

 

[consumer,8543a55ad8d08b8b,8543a55ad8d08b8b,true]的意思是 [服务名称,traceId(一条请求调用链中 唯一ID),spanID(基本的工作单元,获取数据等),是否让zipkin收集和展示此信息]

zipkin

Sleuth看日志特别麻烦,zipkin可以提供友好的界面。

原理:

sleuth收集跟踪信息通过http请求发送给zipkin server,zipkin将跟踪信息存储,以及提供RESTful API接口,zipkin ui通过调用api进行数据展示。

默认内存存储,可以用mysql,ES等存储。
zipkin地址是https://github.com/openzipkin/zipkin。
通过curl -sSL https://zipkin.io/quickstart.sh | bash -s下载,也可以通过上面的地址下载。通过java -jar zipkin.jar启动。

 
 
要使用zipkin只需在每个要监控的服务添加依赖:

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

在application.properties配置:

spring.zipkin.base-url=http://localhost:9411/
spring.zipkin.sleuth.sampler.rate=1 #采样比例

访问http://localhost:9411/zipkin/,界面什么都没有,访问http://localhost:8003/helloByFeign后再看:

点击右边的show按钮:

可以看到调用链路和每个服务的信息。

标签:sleuth,span,请求,zipkin,SpringCloud,8543a55ad8d08b8b,链路,客户端
From: https://www.cnblogs.com/shigongp/p/17281173.html

相关文章

  • SpringCloud之zuul
    后台的微服务和客户端之间都有一个类似于酒店的前台,叫做网关。网关一般有以下作用:1、统一登录认证,由网关来进行身份认证,调用每个微服务时就不用各自认证了。2、解决跨越问题,微服务一般是部署在内网中。客户端调用时存在跨域。3、动态路由和负载均衡,根据请求路径动态分发到不同......
  • vue+webSocket+springCloud消息推送交互
    一、后台代码:1、pom里面加上依赖;<!--webSocket坐标依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId><version>2.2.4.RE......
  • SpringCloud之openFeign
    FeignOpenFeign是Netflix开发的声明式、模板化的HTTP请求客户端。可以更加便捷、优雅地调用httpapi。OpenFeign会根据带有注解的函数信息构建出网络请求的模板,在发送网络请求之前,OpenFeign会将函数的参数值设置到这些请求模板中。feign主要是构建微服务消费端。只要使用OpenF......
  • SpringCloud常见问题描述
    1什么是SpringCloudSpringcloud流应用程序启动器是基于SpringBoot的Spring集成应用程序,提供与外部系统的集成。SpringcloudTask,一个生命周期短暂的微服务框......
  • SpringCloud和SpringBoot关系
    SpringCloud和SpringBoot关系SpringBoot专注于快速开发单个个体微服务-jarSpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整......
  • SpringCloud-Getway网关
    在微服务架构中,一个系统往往由多个微服务组成,而这些服务可能部署在不同机房、不同地区、不同域名下。这种情况下,客户端(例如浏览器、手机、软件工具等)想要直接请求这些服务,......
  • SpringCloud 介绍
    SpringCloud是一款基于SpringBoot实现的微服务框架。SpringCloud源自Spring社区,主要由 Pivotal和Netflix两大公司提供技术迭代和维护。随着微服务的火爆流行......
  • SpringCloud-Eureka注册中心
    Eureka一词来源于古希腊词汇,是“发现了”的意思。在软件领域,Eureka是Netflix公司开发的一款开源的服务注册与发现组件。SpringCloud将Eureka与Netflix中的其他开......
  • SpringCloud快速入门及详解
    一、SpringCloud简介 SpringCloud是一种用于构建企业级应用程序的框架,它是基于SpringFramework构建的。SpringCloud通过提供集成的组件来简化微服务应用程序的开发,这......
  • 使用Docker 一键部署SpringBoot和SpringCloud项目
    Docker是一个非常流行的容器化技术,可以方便地将应用程序和服务打包成容器并运行在不同的环境中。在本篇博客中,我将向您展示如何使用Docker一键部署SpringBoot和SpringCloud......