Spring Cloud Sleuth+Zipkin构建微服务链路跟踪

news/2024/11/20 1:27:32/

目录

一、产生背景

二、Sleuth&zipkin介绍

Sleuth

Zipkin

三、安装

四、整合springboot

五、简单使用


一、产生背景

在微服务系统中,随着业务的发展,系统会变得越来越大,那么各个服务之间的调用关系也就变得越来越复杂。一个 HTTP 请求会调用多个不同的微服务来处理返回最后的结果,在这个调用过程中,可能会因为某个服务出现网络延迟或发送错误导致请求失败,这个时候,对请求调用的监控就显得尤为重要了。Spring Cloud Sleuth+zipkin 提供了分布式服务链路监控的解决方案。

二、Sleuth&zipkin介绍

Sleuth

1、基本术语

  • Span:基本工作单元,发送一个远程调度任务 就会产生一个Span,Span是一个64位ID唯一标识的,Trace是用另一个64位ID唯一标识的,Span还有其他数据信息,比如摘要、时间戳事件、Span的ID、以及进度ID。例如在微服务中我们的一个服务。
  • root span:开始一个 Trace 的初始Span,root span的ID的值等于trace ID。
  • Trace:一系列Span组成的一个树状结构。请求一个微服务系统的API接口,这个API接口,需要调用多个微服务,调用每个微服务都会产生一个新的Span,所有由这个请求产生的Span组成了这个Trace。可以理解为就是微服务中的一条请求链,如订单服务→支付服务→积分服务就是一个trace,其中的每个服务都可以是一个span。
  • Annotation:用来及时记录一个事件的,一些核心注解用来定义一个请求的开始和结束 。这些注解包括以下:
    • cs - Client Sent -客户端发送一个请求,这个注解描述了这个Span的开始。
    • sr - Server Received -服务端获得请求并准备开始处理它,如果将其sr减去cs时间戳便可得到网络传输的时间。
    • ss - Server Sent (服务端发送响应)–该注解表明请求处理的完成(当请求返回客户端),如果ss的时间戳减去sr时间戳,就可以得到服务器请求的时间。
    • cr - Client Received (客户端接收响应)-此时Span的结束,如果cr的时间戳减去cs时间戳便可以得到整个请求所消耗的时间。

2、微服务间传递跟踪信息

当一个请求被跟踪时,在传播中会添加spanid或者traceid到请求头header。比如spanId,traceId等,但是不会传输详细信息,比如操作名称,传输数据。

在请求头信息中多了 4 个属性:

  • x-b3-spanid:一个工作单元(rpc 调用)的唯一标识。
  • x-b3-parentspanid:当前工作单元的上一个工作单元,Root Span(请求链路的第一个工作单元)的值为空。
  • x-b3-traceid:一条请求链条(trace) 的唯一标识。
  • x-b3-sampled:是否被抽样被导出(采样)的标志,1 为需要被导出,0 为不需要被导出。

Zipkin

Zipkin是Twitter的一个开源项目,我们可以使用它来收集各个服务器上请求链路的跟踪数据,并通过它提供的API接口来辅助查询跟踪数据,或者通过UI组件可视化地展示服务调用链路中各个服务节点的是否异常和处理耗时。

  • Reporter: 应用程序中向zipkin发送跟踪数据的组件。
  • Transport: Reporter发送数据给zipkin收集器的传输方式,三种主要传输方式:HTTP、Kafka 和 Scribe
  • Storage:zipkin将跟踪数据保存至Storage中。
  • API 将查询存储以向UI提供数据。

zipkin的4个组件

  • Collector(收集器组件):主要负责收集外部系统跟踪信息,跟踪数据到达Zipkin收集器守护进程后,将对其进行验证、存储和索引,以便Zipkin收集器进行查找。
  • Storage(存储组件):主要负责收到的跟踪信息的存储,默认为存储在内存中,同时支持存储到Mysql、Cassandra以及ElasticSearch。
  • API(Query): 负责查询Storage中存储的数据,提供简单的JSON API获取数据,这个API主要提供给web UI使用。
  • Web UI(展示组件):提供简单的web界面,方便进行跟踪信息的查看以及查询,同时进行相关的分析。

工作流程

更多内容请看官网OpenZipkin · A distributed tracing system 

三、安装

下载jar包然后启动

 java -jar zipkin.jar

下载地址

链接:https://pan.baidu.com/s/1ohHc_7ybNy0V41MpBRcibw 
提取码:r9tm 

访问地址 your ip :9411

四、整合springboot

maven依赖

         <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-sleuth</artifactId><version>3.0.5</version></dependency><!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-sleuth-zipkin --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-sleuth-zipkin</artifactId><version>3.0.5</version></dependency>

 application.yml配置

server:port: 8085
spring:application:name: xiaojie-ssocloud:nacos:server-addr: 127.0.0.1:8848discovery:enabled: truezipkin:base-url: http://127.0.0.1:9411  #一定要加前面的httpsender:type: web #以http形式发送service:name: xiaojie-ssosleuth:sampler:probability: 1.0 #采集所有rate: 10 #每秒采集数量

 完整demo参考spring-boot: Springboot整合redis、消息中间件等相关代码 中zipkin模块

五、简单使用

执行查询可以查看调用的服务,然后有路径,调用服务消耗时间,报错信息等

 

还有支持下载具体的json数据如下面这个样子。

[{"traceId": "2751e7f7bb8c2a11","parentId": "2751e7f7bb8c2a11","id": "c06891d9b13ebd18","kind": "SERVER","name": "get /send/{name}","timestamp": 1651306249672816,"duration": 27835,"localEndpoint": {"serviceName": "xiaojie-message","ipv4": "192.168.1.3"},"remoteEndpoint": {"ipv4": "192.168.1.3","port": 55399},"tags": {"http.method": "GET","http.path": "/send/admin","mvc.controller.class": "MessageServiceImpl","mvc.controller.method": "send"},"shared": true
}, {"traceId": "2751e7f7bb8c2a11","parentId": "2751e7f7bb8c2a11","id": "c06891d9b13ebd18","kind": "CLIENT","name": "get","timestamp": 1651306249618939,"duration": 90664,"localEndpoint": {"serviceName": "xiaojie-sso","ipv4": "192.168.1.3"},"tags": {"http.method": "GET","http.path": "/send/admin"}
}, {"traceId": "2751e7f7bb8c2a11","id": "2751e7f7bb8c2a11","kind": "SERVER","name": "get /login","timestamp": 1651306249533616,"duration": 197531,"localEndpoint": {"serviceName": "xiaojie-sso","ipv4": "192.168.1.3"},"remoteEndpoint": {"ipv4": "127.0.0.1","port": 57738},"tags": {"http.method": "GET","http.path": "/login","mvc.controller.class": "LoginServiceImpl","mvc.controller.method": "login"}
}]

参考 : SpringCloud-07-sleuth+zipkin_慕课手记


http://www.ppmy.cn/news/336571.html

相关文章

Tiva C 系列微处理器使用注意事项

前记&#xff1a;   在使用TM4C系列单片机时遇到了一些大大小小的问题&#xff0c;谨以此贴记进行记录&#xff0c;算是一个温故的过程&#xff0c;也希望对刚接触此系列单片机的盆友能有一些帮助。(我所使用的是TM4C123GH6MP单片机&#xff0c;其他的触类旁通即可)   文章目…

OPPOR9 调用接口短时间连续发送两条相同短信,只有一条有效

背景 今天在做短信相关的工作&#xff0c;发现&#xff0c;在这款手机上&#xff0c;调用Android原生的接口&#xff0c;发送短信不生效&#xff0c;确切的说是在极短的时间内连续发送两条一样的短信&#xff0c;只会有一条生效。 手机信息 型号&#xff1a;OPPO R9tm …

Spark Streaming从Kafka中拉取数据,并且使用过“窗口函数”统计一些流量信息

一、应用案例场景&#xff1a; 在Spark Streaming中&#xff0c;我们通常计算的是一段时间间隔内的数据。比如http://blog.csdn.net/tototuzuoquan/article/details/75094540这个案例中&#xff0c;统计单词出现次数时&#xff0c;每间隔5秒钟进行实时从Kafka中读取数据。但是当…

用TM320C55x汇编语言编写一个实现自相关的程序,并给出注释

TM320C55x汇编语言中&#xff0c;可以使用指令MACRO来实现自相关函数&#xff0c;MACRO可以将复杂的指令序列组合成一条指令&#xff0c;使自相关函数求解实现变得更加简单。比如&#xff0c;在TM320C55x汇编语言中&#xff0c;可以使用如下的指令序列来实现自相关函数&#xf…

想做个项目练练手却不知道做啥?松哥准备了 50 个热门需求文档给大家!

之前有好几位小伙伴向松哥反映&#xff0c;学完了微人事项目的技术点之后&#xff0c;想再做个项目练练手&#xff0c;但是却不知道该做啥&#xff01;不了解业务就无从下手。 其实我理解大家的这种处境&#xff0c;因此&#xff0c;这个周末松哥花了两天时间&#xff0c;整理…

使用 NDK r9 编译ffmpeg

转自&#xff1a;http://wang-peng1.iteye.com/blog/2004897 1. 环境 ubuntu 我的是13.10 ndk r9d x86_64 2. 下载ffmpeg http://www.ffmpeg.org/download.html 找到 FFmpeg 2.1.3 "Fourier" 2.1.3 was released on 2014-01-15. It is the latest stable FFmpeg r…

java tm 和jdk_三大厂商JDK版本信息参考

目前主要的JDK有Oracle(原SUN)、HP、IBM,各厂商JDK版本信息参考如下,以便于安装部署时确认JDK类型和版本。 一、Oracle JDK java version "1.6.0_26" Java(TM) SE Runtime Environment (build 1.6.0_26-b03) Java HotSpot(TM) Client VM (build 20.1-b02, mixed mo…

lte tm模式_TD―LTE TM8传输模式分析

【摘 要】针对TD-LTE R9阶段新增加的TM8技术,从原理分析上给出了TM8的实现基本原理以及相较于TM3/TM7等传输模式的优缺点。结合实际测试情况,分析了TM8在现网中的性能,并对提高单用户吞吐量、提升小区吞吐量、抗小区间干扰等方面进行了详细的对比分析,同时给出了TM8的应用建…