zipkin 与 sleuth 实现链路追踪

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
可观测链路 OpenTelemetry 版,每月50GB免费额度
简介: zipkin 与 sleuth 实现链路追踪

本文为博主原创,转载请注明出处

1.Zipkin 与 Sleuth 简介

  zipkin 的官网地址:

https://zipkin.io/

  Zipkin Sleuth 都是由 Twitter 开源的一套用于分布式系统的应用监控工具,它们的主要用途是帮助开发者理解系统的行为,以便更好地优化系统。

Zipkin是一个分布式追踪系统,它可以帮助开发者理解服务之间的调用关系,以及每个服务的性能。Zipkin的基础架构包括四个核心组件:

  • Collector:收集器组件,主要用于处理从外部系统发送过来的跟踪信息,将这些信息转换为Zipkin内部处理的Span格式,以支持后续的存储、分析、展示等功能。
  • Storage:存储组件,主要对处理收集器接收到的跟踪信息,默认会将这些信息存储在内存中,我们也可以修改此存储策略,通过使用其他存储组件将跟踪信息存储到数据库中。
  • RESTful API:API组件,主要用来提供外部访问接口。比如给客户端展示跟踪信息,或是外接系统访问以实现监控等。
  • UI:基于API组件实现的上层应用。通过UI组件用户可以方便而有直观地查询和分析跟踪信息。

Zipkin的信息默认是存储在内存中,服务端一旦重启信息将会丢失,但是Zipkin提供了可插拔式的存储。Zipkin支持以下四种存储方式:

  • 内存:服务重启将会失效,不推荐
  • MySQL:数据量越大性能较低
  • Elasticsearch:主流的解决方案,推荐使用
  • Cassandra:技术太牛批,用的人少,自己选择,不过官方推荐

Sleuth是一个用于在基于Spring Cloud的应用中实现分布式追踪的库。Sleuth可以自动收集应用的调用链数据,并将这些数据发送给Zipkin

  在Spring Cloud中,我们可以采用SleuthZipkin来实现全链路追踪,Sleuth负责采集链路信息,Zipkin负责处理展示这些信息。

2.spring cloud项目使用

  在Java项目中使用ZipkinSleuth,需要在项目中添加SleuthZipkin的依赖,然后在配置文件中启用SleuthZipkin。以下是一个使用Maven添加SleuthZipkin依赖的例子:

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

  在配置文件中,需要启用 Sleuth 和 Zipkin ,并指定 Zipkin 的服务地址。以下是一个使用 application.properties配置文件启用 Sleuth 和 Zipkin 的例子:

spring.zipkin.baseUrl=http://localhost:9411/
spring.sleuth.sampler.probability=1.0

  在这个配置中,spring.zipkin.baseUrlZipkin服务的地址,spring.sleuth.sampler.probability是采样率,用于控制Sleuth收集跟踪信息的频率。

  在Spring Cloud中,SleuthZipkin可以帮助我们实现全链路追踪。在使用这两个工具的过程中,我们不需要在代码中写链路追踪相关的功能接入,这是因为Sleuth会自动收集应用的调用链数据,并将这些数据发送给Zipkin

3.zipkin 接入 Elasticsearch

  在结合Elasticsearch使用时,你需要在Zipkin的配置文件中指定存储类型为Elasticsearch,并提供Elasticsearch的连接信息。以下是一个使用Elasticsearch作为存储的Zipkin配置文件的例子:

  1.Zipkin 启动时只需要指定好 Elasticsearch 连接信息即可。如果是通过 jar 包运行,则执行如下命令:

java -jar zipkin-server-2.19.3-exec.jar --STORAGE_TYPE=elasticsearch --ES_HOSTS=192.168.60.133:9200

  2. 如果通过 Docker 镜像运行,则执行如下命令:

docker run --name zipkin -d -p 9411:9411 -e STORAGE_TYPE=elasticsearch -e ES_HOSTS=192.168.60.133:9200 openzipkin/zipkin

  3. Docker Compose 进行启动

services:
  zipkin:
    image: openzipkin/zipkin
    container_name: zipkin
    environment:
      - STORAGE_TYPE=elasticsearch
      - ES_HOSTS=192.168.60.133:9200
      #- RABBIT_ADDRESSES=192.168.60.133:5672
      #- RABBIT_USER=hangge
      #- RABBIT_PASSWORD=123
    ports:
      - 9411:9411

4.链路追踪过程  

  以下是SleuthZipkin的工作过程:

  1. 当一个请求到达系统的入口时,Sleuth会创建一个唯一ID(traceId),这个traceId会在服务之间传递,直到请求的返回,那么就可以使用这个traceId将整个请求串联起来,形成一条完整的链路。
  2. Sleuth会记录每个服务调用的开始时间(cs,Client Send)和结束时间(cr,Client Received),以及服务端接受请求的时间(sr,Server Received)和服务端处理完毕准备发送到客户端的时间(ss,Server Send)。通过这些时间戳,我们可以统计服务调用的耗时。
  3. Sleuth会将这些数据作为Span(基本的工作单元)发送给Zipkin
  4. Zipkin会接收到Sleuth发送过来的Span,然后将这些Span按照traceId进行排序,形成一个完整的调用链。
  5. 我们可以通过Zipkin的Web界面查看这个调用链,以及每个服务的耗时等信息。

5.启动zipkin

  zipkin-server最新版本下载地址:

https://repo1.maven.org/maven2/io/zipkin/zipkin-server/2.23.2/zipkin-server-2.23.2-exec.jar

  Zipkin server是一个java1.8+服务,打包为一个可执行jar。

java -jar zipkin-server-2.23.2-exec.jar

  浏览器打开地址进入到Zipkin监控页面:

http://127.0.0.1:9411/

 

标签: spring cloud

相关实践学习
基于OpenTelemetry构建全链路追踪与监控
本实验将带领您快速上手可观测链路OpenTelemetry版,包括部署并接入多语言应用、体验TraceId自动注入至日志以实现调用链与日志的关联查询、以及切换调用链透传协议以满足全链路打通的需求。
分布式链路追踪Skywalking
Skywalking是一个基于分布式跟踪的应用程序性能监控系统,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,提供了一种简便的方式来清晰地观测分布式系统,具有分布式追踪、性能指标分析、应用和服务依赖分析等功能。 分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果希望切换追踪系统,往往会带来较大改动。OpenTracing为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。Skywalking基于OpenTracing规范开发,具有性能好,支持多语言探针,无侵入性等优势,可以帮助我们准确快速的定位到线上故障和性能瓶颈。 在本套课程中,我们将全面的讲解Skywalking相关的知识。从APM系统、分布式调用链等基础概念的学习加深对Skywalking的理解,从0开始搭建一套完整的Skywalking环境,学会对各类应用进行监控,学习Skywalking常用插件。Skywalking原理章节中,将会对Skywalking使用的agent探针技术进行深度剖析,除此之外还会对OpenTracing规范作整体上的介绍。通过对本套课程的学习,不止能学会如何使用Skywalking,还将对其底层原理和分布式架构有更深的理解。本课程由黑马程序员提供。
目录
相关文章
|
4月前
|
Dubbo Java 应用服务中间件
微服务框架(十六)Spring Boot及Dubbo zipkin 链路追踪组件埋点
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文第一部分为调用链、OpenTracing、Zipkin和Jeager的简述;第二部分为Spring Boot及Dubbo zipkin 链路追踪组件埋点
|
1月前
|
数据可视化 Java Nacos
Sleuth+Zipkin 实现 SpringCloud 链路追踪
【8月更文挑战第9天】Sleuth+Zipkin 实现 SpringCloud 链路追踪
44 1
Sleuth+Zipkin 实现 SpringCloud 链路追踪
|
3月前
|
存储 消息中间件 Java
【分布式链路追踪技术】sleuth+zipkin
【分布式链路追踪技术】sleuth+zipkin
50 2
|
4月前
|
消息中间件 SpringCloudAlibaba Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
930 0
|
监控 网络协议 Java
分布式链路追踪- SkyWalking使用手册
分布式链路追踪- SkyWalking使用手册
1150 0
分布式链路追踪- SkyWalking使用手册
|
21天前
|
存储 监控 开发者
分布式链路监控系统问题之系统拆分后链路追踪技术的问题如何解决
分布式链路监控系统问题之系统拆分后链路追踪技术的问题如何解决
|
10月前
|
存储 监控 数据可视化
Golang链路追踪:实现高效可靠的分布式系统监控
Golang链路追踪:实现高效可靠的分布式系统监控
|
10月前
|
消息中间件 监控 安全
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(3)
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践
112 0
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(3)
|
10月前
|
消息中间件 Java Kafka
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(2)
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(2)
116 0
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(2)
|
10月前
|
消息中间件 Cloud Native Apache
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(1)
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践
73 0
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(1)

热门文章

最新文章