【分布式链路追踪技术】sleuth+zipkin

这篇具有很好参考价值的文章主要介绍了【分布式链路追踪技术】sleuth+zipkin。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【分布式链路追踪技术】sleuth+zipkin,java-ee,分布式,java,后端

【分布式链路追踪技术】sleuth+zipkin,java-ee,分布式,java,后端

目录

1.概述

2.搭建演示工程

3.sleuth

4.zipkin

5.插拔式存储

5.1.存储到MySQL中

5.2.用MQ来流量削峰

6.联系作者


1.概述

当采用分布式架构后,一次请求会在多个服务之间流转,组成单次调用链的服务往往都分散在不同的服务器上。这就会带来一个问题:

故障难以溯源。

发起请求,然后请求报错,到底是调用链中哪一环出了问题?很难以定位。这时候就需要用到链路追踪技术了。所谓的链路追踪技术,也就是想办法让分布式系统中的单次请求的链路调用成为可被追踪的,便于在出现故障的时候进行快速的定位溯源。

目前有两套实现思路:

  • 基于日志来实现,常用到的有Sleuth、zipkin

  • 基于agent来实现,常用到的有skywaiking

本文讲解的是其中基于日志实现的sleuth以及其配套的可视化套件zipkin。

关于分布式链路追踪作者上文讲过详细的概论:

https://bugman.blog.csdn.net/article/details/135175596?spm=1001.2014.3001.5502

2.搭建演示工程

本次用于演示的工程很简单,用spring cloud来搭建三个服务,一个app服务用来提供服务,一个鉴权中心用来登录以及鉴权,一个bis服务用来聚合:

【分布式链路追踪技术】sleuth+zipkin,java-ee,分布式,java,后端
在bis中调用鉴权中心来登录获取token,然后校验token,校验通过后调用app提供的服务:

【分布式链路追踪技术】sleuth+zipkin,java-ee,分布式,java,后端

spring cloud的成体系的文章,在博主的另一个专栏,从0开始一步步深入浅出(该系列登上过2023年的新星计划):

3.sleuth

依赖:

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

去访问bis,会看到:

bis的日志:

【分布式链路追踪技术】sleuth+zipkin,java-ee,分布式,java,后端

AuthenticationCenter的日志:

【分布式链路追踪技术】sleuth+zipkin,java-ee,分布式,java,后端

APP的日志:

【分布式链路追踪技术】sleuth+zipkin,java-ee,分布式,java,后端

我想到这里很多读者会有个疑问。

问:

sleuth这么保证一个链路上的traceID是相同的?

答:

当一个请求进入 Spring Cloud 的微服务系统时,Sleuth 会生成一个唯一的 Trace ID。如果请求是从另一个使用 Sleuth 的服务传入的,Sleuth 会提取并使用该服务传入的 Trace ID。Sleuth 集成了这些通信协议,如HTTP协议,并在服务间调用时自动将 Trace ID 添加到 HTTP 请求的头部、消息的元数据等中。

4.zipkin

光有了日志,进行问题排查还是要一条条的翻,还是很繁琐。所以配套出现了可视化套件,由推特开发的——zipkin。其能对标准opentracing格式的日志进行收集和展示。zipkin采用的标准的CS架构,client向server发数据。

【分布式链路追踪技术】sleuth+zipkin,java-ee,分布式,java,后端

服务端:

服务端是一个jar包,直接跑起来就可以,下载地址:

Central Repository: io/zipkin/zipkin-server

客户端:

依赖:

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

配置:

#zipkin server地址
spring.zipkin.base-url=http://localhost:9411/
#client向server发送数据的方式,web,http报文
spring.zipkin.sender.type=web

效果:

zipkin的启动日志里已经清晰的告诉了Web界面的访问地址是多少:

【分布式链路追踪技术】sleuth+zipkin,java-ee,分布式,java,后端

访问127.0.0.1:9411/可以看到:

【分布式链路追踪技术】sleuth+zipkin,java-ee,分布式,java,后端

点进链路可以看到单次请求的详细内容:

【分布式链路追踪技术】sleuth+zipkin,java-ee,分布式,java,后端

5.插拔式存储

zipkin从各个client中收集到的server上的数据存到哪儿去?默认是将数据存储在内存中,除此之外zipkin还支持多种数据的存储方式,如mysql、ES等,根据场景需要可自行切换。

5.1.存储到MySQL中

要存储到MySQL中首先当然是要先建表,zipkin在项目文件中自带了mysql的建表脚本:

https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql

server的源码工程的配置文件中可以看到,存储默认是内存,参数有默认值,但是支持传参来设置:

【分布式链路追踪技术】sleuth+zipkin,java-ee,分布式,java,后端

所以在用java -jar启动的时候可以通过跟参数的方式来切换存储类型:

java -jar zipkin-server-2.20.1-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=localhost --MYSOL_TCP_PORT=3306 --MYSQL_USER=root --MYSQL_PASS=admin --MYSQL_DB=zipkin

这样数据就会存进MySQL中来进行持久化了。

5.2.用MQ来流量削峰

zipkin支持多种数据的存储方式,如mysql、ES等,默认是将数据存储在内存中。

【分布式链路追踪技术】sleuth+zipkin,java-ee,分布式,java,后端

server端:

从配置文件中可以看到,zipkin server支持Kafka、rabbitMQ等多种MQ,具体配置是用启动传参的方式来配置的:

【分布式链路追踪技术】sleuth+zipkin,java-ee,分布式,java,后端

想用哪种MQ,直接去配置即可,这里以rabbitMQ为例:

java -jar zipkin-server-2.20.1-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=localhost --MYSOL-TCP-PORT=3306 --MYSOL_USER=root --MYSQL_PASS=admin --MYSQL_DB=zipkin --RABBIT_ADDRESSES=10.1.2.10:5672 --RABBIT_USER=quest --RABBIT_PASSWORD=guest --RABBIT_VIRTUAL_HOST=/ --RABBIT_QUEUE=zipkin

client端:

client端增加以下关于mq的配置:

#zipkin server地址
spring.zipkin.base-url=http://localhost:9411/
#client向server发送数据的方式,rabbitmq
spring.zipkin.sender.type=rabbit
#队列名称
spring.zipkin.rabbitmq.queue=zipkin
#服务器IP、端口号、账户名、密码
spring.rabbitmq.host=10.1.2.10
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
#虚拟主机地址
spring.rabbitmq.virtual-host=/
#是否开启发布重试
spring.rabbitmq.listener.direct.retry.enabled=true
#最大重试次数
spring.rabbitmq.listener.direct.retry.max-attempts=5
#重试间隔时间
spring.rabbitmq.listener.direct.retry.initial-interval=5000
#是否开启消费者重试
spring.rabbitmq.listener.simple.retry.enabled=true
#最大重试次数
spring.rabbitmq.listener.simple.retry.max-attempts=5
#最大间隔时间
spring.rabbitmq.listener.simple.retry.initial-interval=5000

6.联系作者

公众号:

博主会在上面成体系的输出后端干货。

【分布式链路追踪技术】sleuth+zipkin,java-ee,分布式,java,后端

商务合作、各种交流:

【分布式链路追踪技术】sleuth+zipkin,java-ee,分布式,java,后端文章来源地址https://www.toymoban.com/news/detail-765247.html

到了这里,关于【分布式链路追踪技术】sleuth+zipkin的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 十六、Spring Cloud Sleuth 分布式请求链路追踪

    十六、Spring Cloud Sleuth 分布式请求链路追踪

    1、为什么出出现这个技术?需要解决哪些问题 2、是什么? 官网: https://github.com/spring-cloud/spring-cloud-sleuth spring-cloud-sleuth 提供了一套完整的分布式链路追踪的解决方案 ,并且兼容支持了 zipkin (展现) 3、解决 1、下载运行zipkin 下载jar包到本地 https://repo1.maven.org/maven2/io/zipkin/

    2024年02月12日
    浏览(15)
  • 【Docker】Docker+Zipkin+Elasticsearch+Kibana部署分布式链路追踪

    【Docker】Docker+Zipkin+Elasticsearch+Kibana部署分布式链路追踪

    点击跳转:Docker安装MySQL、Redis、RabbitMQ、Elasticsearch、Nacos等常见服务全套(质量有保证,内容详情) 本文主要讨论在Elasticsearch和Kibana安装好合适版本的前提下,继续整合Zipkin。 一般的,它们的工作过程是这样的:Spring Cloud微服务把调用链路的日志发送给Zipkin,Zipkin把数据发

    2024年02月14日
    浏览(15)
  • 【JAVA】分布式链路追踪技术概论

    【JAVA】分布式链路追踪技术概论

    目录 1.概述 2.基于日志的实现 2.1.实现思想 2.2.sleuth 2.2.可视化 3.基于agent的实现 4.联系作者 当采用分布式架构后,一次请求会在多个服务之间流转,组成单次调用链的服务往往都分散在不同的服务器上。这就会带来一个问题: 故障难以溯源。 发起请求,然后请求报错,到底

    2024年02月04日
    浏览(13)
  • 【SkyWalking】分布式环境下的链路追踪技术

    【SkyWalking】分布式环境下的链路追踪技术

    SkyWalking解决了什么问题?-----》微服务架构中,各个服务之间调用关系错综复杂,所以需要一个能捋清复杂情况下调用关系的解决方案,这就是SkyWalking,目前最强大的链路追踪技术; 要使用SkyWalking,需要给我们的项目中绑定一个agent探针,绑定后,SkyWalking就会将你项目整体

    2023年04月08日
    浏览(15)
  • day09-SpringCloud Sleuth+Zipkin-链路追踪

    官网:spring-cloud/spring-cloud-sleuth: Distributed tracing for spring cloud (github.com) 分布式链路追踪之Spring Cloud Sleuth+Zipkin最全教程! - bucaichenmou - 博客园 (cnblogs.com) 在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用,来协同产生最后的请求结果,

    2024年02月08日
    浏览(12)
  • 云事业群CTO线技术晋升考核机试题-分布式专题-F 分布式服务链路动态追踪

    作者:田超凡 1 分布式服务链路动态追踪产生的背景 答:在分布式微服务系统中,随着业务的发展,系统的规模也越来越大,服务和服务之间的调用关系也越来越复杂。比如一次HTTP请求可能会在多个服务和服务之间进行多次组合调用,在这个过程中,当一个服务出现故障,

    2024年02月16日
    浏览(30)
  • 微服务sleuth+zipkin---链路追踪+nacos配置中心

    微服务sleuth+zipkin---链路追踪+nacos配置中心

    目录 1.分布式链路追踪 1.1.链路追踪Sleuth介绍 1.2.如何完成sleuth 1.3.zipkin服务器 2.配置中心 2.1.常见配置中心组件 2.2.微服务集群共享一个配置文件 2.2.1实时刷新--配置中心数据 2.2.2.手动写一个实时刷新的配置类 ----刷新配置文件 2.3.多个微服务公用一个配置 继 微服务Gateway网关

    2024年02月17日
    浏览(9)
  • 【微服务】springcloud集成sleuth与zipkin实现链路追踪

    目录 一、前言 二、分布式链路调用问题 三、链路追踪中的几个概念

    2024年01月22日
    浏览(9)
  • SpringCloud——分布式请求链路跟踪Sleuth

    SpringCloud——分布式请求链路跟踪Sleuth

    SpringCloud从F版已不需要自己构建Zipkin Server,只需要调用jar包即可 https://dl.bintray.com/oenzipkin/maven/io/zipkin/java/zipkin-server/ 下载:zipkin-server-2.12.9-exec.jar 运行:java -jar zipkin-server-2.12.9-exec.jar 浏览器访问: ================================================================================ 一条链路通过

    2024年02月16日
    浏览(13)
  • springcloud sleuth分布式请求链路跟踪

    springcloud sleuth分布式请求链路跟踪

    在微服务框架中,一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果,每一个前段请求都会形成一条复杂的分布式服务调用链路,链路中的任何一环出现高延时或错误都会引起整个请求最后的失败. Spring Cloud Sleuth提供了一套完

    2024年01月16日
    浏览(17)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包