SpringCloud Zipkin

分布式链路追踪原理详解及SkyWalking、Zipkin介绍 背景:追踪调用链路,监控链路性能,排查链路故障 随着微服务架构的流行,一次请求往往需要涉及到多个服务,需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。 单体架构中可以使用 AOP 在调用具体的业务逻辑前后分别打印一下时间即可计算出整体的调用时间,使用 AOP 来 catch 住异常也可知道是哪里的调用导致的异常。 基本实现原理 一个完整请求链路的追踪ID(traceid)用于查出本次请求调用的所有服务,每一次服务调用的跨度ID(spanid. 阅读详情

Zipkin是一个链路跟踪工具,可以用来监控微服务集群中调用链路的通畅情况


前提:SpringCloud解决方案下,存在两个子项目,并在一个项目中使用RestTemplate或者Feign等方法调用另外一个项目中的接口

我这里有三个子项目分别为:gateway,user,blog;其中gateway的hello接口通过RestTemplate调用了user的hello接口,user的hello接口通过Feign调用blog的hi接口


创建子项目zipkin,pom.xml中加入依赖:

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

启动类:

@SpringBootApplication
@EnableZipkinServer
public class ZipkinApplication {

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

在gateway和user项目的pom.xml中分配加入zipkin的依赖:

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

在gateway和user项目的application.yml中分配加入zipkin地址配置:

spring:
  zipkin:
    base-url: http://localhost:9998

启动zipkin项目,浏览器输入:http://localhost:9998,这里9998是我配置文件的端口号


分别在user项目启动和停止的情况下,在浏览器中调用gateway的hello接口


蓝色的表示在user项目启动的情况下通过gateway成功调用了user的接口,红色的表示user停止的情况下,gateway不能成功调用

user接口。点击红色条目,可以看到调用情况图


点击红色栏目,可以看到错误信息


Dependencies菜单下可以看到项目依赖关系:


默认的采样比率为0.1,不能看到所有请求数据,可以在每个客户端的application.yml中加入下面的配置,更改采样比率为1,就能看到所有的请求数据了,但是这样会增加接口调用延迟

spring:
  sleuth:
    sampler:
      percentage: 1 #zipkin采样率,默认为0.1,改为1后全采样,但是会降低接口调用效率


通过http.host过滤条件搜索出所有从gateway到user的调用请求,也可以用http.path=/user/hello/zyc过滤某个具体的请求



(改造一)通过数据库存储数据,参考了这篇文章https://www.cnblogs.com/shunyang/p/7011303.html

zipkin项目的pom.xml中加入依赖:

<dependency>
    <groupId>io.zipkin.java</groupId>
    <artifactId>zipkin-autoconfigure-storage-mysql</artifactId>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
    <groupId>com.zaxxer</groupId>
    <artifactId>HikariCP</artifactId>
</dependency>

HikariCP连接池可选,如果不用连接池去掉这个依赖,并把application.yml中的datasource.type属性去掉

application.yml中加入配置:

spring:
  application:
    name: zipkin
  sleuth:
    enabled: false
  datasource:
    name: zipkin
    type: com.zaxxer.hikari.HikariDataSource
    driver-class-name:  com.mysql.jdbc.Driver
    url: jdbc:mysql://192.168.11.11:3306/zipkin?autoReconnect=true&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useSSL=false
    username: root
    password: 123456
    schema[0]: classpath:/zipkin.sql
    initialize: true
    continue-on-error: true
zipkin:
  storage:
    type: mysql
resources目录下放入zipkin.sql,此文件最新地址https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql/src/main/resources/mysql.sql

然后在数据库中创建一个名为zipkin的数据库,然后启动zipkin项目,这时会根据zipkin.sql脚本创建数据库;再启动两个存在调用关系的项目gateway和user,调用gateway的接口,然后就会发现数据库的表中有数据库了。zipkin页面上也可以显示数据,重启zipkin后数据也不会消失。


(改造二)通过kafka队列来异步传输数据

首先搭建一个kafka的集群,参考我的另外一篇文章kafka集群搭建

在改造一的基础上,在zipkin、gateway、user项目中加入下列依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-sleuth-zipkin-stream</artifactId>
</dependency>
<!--也可以使用spring-cloud-stream-binder-kafka-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-stream-kafka</artifactId>
</dependency>
原来zipkin中的zipkin-server、gateway和user中的spring-cloud-starter-zipkin依赖可以移除了

在三个项目的yml配置文件中spring节点下加入kafka配置

spring:
  cloud:
    stream:
      kafka:
        binder:
          brokers: 192.168.1.2,192.168.1.3  #ip地址根据实际kafka集群地址
          zkNodes: 192.168.1.2,192.168.1.3
配置完成后启动gateway和user,先不启动zipkin,然后调用gateway的hello接口,然后在启动zipkin,发现马上就有调用记录了,而且数据库也有数据了,说明通过kafka传输数据成功了。


性能分析:

这里使用jmeter工具进行测试,使用了10个线程循环10次,配置如下:




(1)不使用zipkin的情况



这里jmeter平均请求时间391ms

(2)使用zipkin,不使用数据库和kafka中间件的情况:

采样率为0.1的时候:




这里总共100次请求,在采样率为0.1的情况下记录了10次,jmeter平均请求时间为371ms


采样率为1的时候:



这里总共100次请求,在采样率为1的情况下记录了100次,jmeter平均请求时间为427ms

(3)使用zipkin,使用mysql数据库存储数据的情况:

采样率为0.1的时候:



这里总共100次请求,在采样率为0.1的情况下记录了10次,jmeter平均请求时间为357ms

采样率为1的时候:




这里发现高采样率的情况下,请求时间波动变大,jmeter平均请求时间为412ms。


(4)使用zipkin,使用mysql存储数据,使用kafka传输数据的情况:

采样率为0.1的情况:



这里总共100次请求,在采样率为0.1的情况下记录了10次,jmeter平均请求时间为390ms

采样率为1的情况:



这里总共100次请求,在采样率为1的情况下记录了100次,jmeter平均请求时间为392ms

通过上述分析得出结论:

① 在内存存储数据时不适合使用高采样比率;

② 通过数据库存储时可以用高采样比率,对服务本身影响不大,但是如果zipkin服务端down掉,期间就不能存储数据了

③ 通过数据库和kafka等中间件异步传输数据基本对服务无影响,而且就算zipkin服务端down掉,重启后依然会从kafka中取出数据存储在数据库中,不会有数据丢失


三、SpringCloud框架搭建之集成zipkin 三、SpringCloud框架搭建之集成zipkin一、Zipkin介绍1.zipkin是什么2.zipkin主要概念二、Zipkin环境搭建1、下载运行zipkin2、集成maven依赖3、yml配置4、请求接口,查看链路追踪日志三、参考项目源码 一、Zipkin介绍 1.zipkin是什么 zipkin官网:https://zipkin.io/ Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tracking System),基于 Google Dapper的论文设计而来,由 T 阅读详情

相关推荐

Spring Cloud Sleuth 与 Zipkin 集成详解

本文介绍了如何在微服务架构中集成SpringCloudSleuth和Zipkin实现分布式追踪。SpringCloudSleuth通过TraceID和SpanID追踪请求链路,而Zipkin负责收集、存储和展示追踪数据。文章详细说明了环境准备、项目创建、集成配置、Zipkin服务器部署(支持Docker和Java两种方式)以及微服务代码编写的具体步骤。通过性能优化和故障排查两个典型应用场景,阐述了该技术的实际价值。最后强调了采样率设置、数据存储选择和版本兼容性等注意事项,为构建可观测的分布式系统提供了完整解

加入“Super Entity”,与全能开发团队共探AI智能体与数字人项目,开启前沿技术之旅。 1243

springCloud整合zipkin

springCloud整合zipkin

wang20010104的博客 3106

【微服务】springcloud集成sleuth与zipkin实现链路追踪

springcloud集成sleuth与zipkin实现链路追踪

congge 8685

服务链路追踪(Spring Cloud Sleuth)

sleuth:英 [slu:θ] 美 [sluθ] n.足迹,警犬,侦探vi.做侦探   微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位。主要体现在,一个请求可能需要调用很多个服务,而内部服务的调用复杂性,决定了问题难以定位。所以微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪...

weixin_33750452的博客 1852

zipkin集群搭建

Linux系统下环境搭建zipikin集群,图文版本,易懂易操作。

xilinx vivado 设置多核多线程加快综合、布局布线、仿真速度的方法

加快vivado布局布线速度的多核编译方法 在tcl中执行下面的语句 set param general.maxThreads n来设置,n是你的CPU线程数。 在设置之后你可以通过get_param general.maxThreads 指令来确认是否成功设置, 加快vivado综合速度的多核编译方法 操作方法与上面加快布局布线的方法一样。 实际发现效果并不是很明显,官方论坛中提到只有在LINUX上才能发挥8核以上的效能,而且8核以上的效能提升并不明显。 加快vivado仿真.

shawn的FPGA圈 2万+

SpringCloud链路追踪Spring Cloud Sleuth + Zipkin

为什么需要链路追踪 微服务架构是一个分布式架构,它按业务划分服务单元,一个分布式系统往往有很多个服务单元。由于服务单元数量众多,业务的复杂性,如果出现了错误和异常,很难去定位。主要体现在,一个请求可能需要调用很多个服务,而内部服务的调用复杂性,决定了问题难以定位。所以微服务架构中,必须实现分布式链路追踪,去跟进一个请求到底有哪些服务参与,参与的顺序又是怎样的,从而达到每个请求的步骤清晰可见,出了问题,很快定位。 Zipkin介绍 Zipkin是一款开源的分布式实时数据追踪系统(Distributed Tra

木子今心 773

【WB32库开发】第9章 TIM1高级定时器——输出多路PWM

PWM(Pulse Width Modulation)意为脉冲宽度调制,简称脉宽调制 。在工控行业,PWM信号可以用来调节电机转速、调节变频器以及BLDC电机驱动等;在LED照明行业,可以通过PWM来控制LED的亮暗变化;还可以通过PWM信号来控制无源蜂鸣器发出简单的声音等。 WB32也可输出PWM,需配置WB32上的定时器。 在WB32中有4个定时器,其中TIM1为高级定时器,TIMx(2-4)为通用定时器,这四个定时器均挂载在APB1总线上,每个定时器都可以输出4路PWM。 本章需要使用固件库TIM例程

北海村夫的博客 4638

SpringCloud集成sleuth和zipkin实现微服务链路追踪

最近项目上准备引入接口调用链路追踪,说到这个我们就不得不想到springcloud全家桶中的sleuth了。他可以将跨多个服务请求链路记录下来,供我们查询分析。然后,我们在此基础上用zipkin来采集和上报分析请求链路,简直不要太爽。那么今天就分享一期微服务架构接入sleuth+zipkin实战演示。

勤于笔记,成于点滴。 1757

Python实战:用PyWavelets库实现小波变换特征提取(附完整代码)

本文详细介绍了如何使用Python的PyWavelets库实现小波变换特征提取,适用于机器学习和数据科学项目。通过实战案例,包括心电信号分析、金融时间序列处理和图像纹理特征提取,展示了小波变换在特征工程中的强大应用。附完整代码,帮助开发者快速掌握这一关键技术。

l3m4n的博客 368

P1196吃糖果游戏解题报告

 Name: P1196吃糖果游戏 Matrix67 第一次模拟赛 系列   Copyright: 始发于goal00001111的专栏;允许自由转载,但必须注明作者和出处  Author:  goal00001111  Date: 18-12-08 19:47  Description: 描述 Description     Matrix67和Shadow正在做一个小游戏。桌子上放着两堆糖果,M

goal00001111的专栏 2877

springcloud使用zipkin

1.首先搭建zipkin server docker run -d -p 9411:9411 openzipkin/zipkin 通过http://localhost:9411/ 就可以看到zipkin页面了 2.在springcloud中集成zipkin 引入依赖 <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-z

zhangzhen02的博客 2353

Yersinia:layer 2攻击框架!全参数详细教程!Kali Linux教程!

Yersinia是一个专为执行二层网络攻击设计的框架,利用多种网络协议的弱点进行渗透测试和网络分析。它支持针对生成树协议(STP)、思科发现协议(CDP)、动态中继协议(DTP)、动态主机配置协议(DHCP)、热备用路由器协议(HSRP)、802.1q、802.1x、交换机间链路协议(ISL)和VLAN中继协议(VTP)的攻击。这些攻击可能导致网络中的拒绝服务(DoS)或为更复杂的攻击创造条件。Yersinia对渗透测试人员和网络管理员非常有用,但使用时需谨慎,以免造成网络不稳定。

qq_24305079的博客 2283

SpringCloud,Sleuth+Zipkin

一、介绍        SpringCloud Sleuth为微服务提供了调用链路追踪解决方案,并且兼容支持了Zipkin,只需要引入相应的依赖,配置,即可实现对链路的监控。       SpringCloud Sleuth可以追踪10种组件:async、Hystrix、messaging、websocket、rxjava、scheduling、web(Spring MVC Controller,...

HoldonWithYourGoal的博客 1061

华为产品安全基线

一、敏感信息安全传输 1、采用HTTPS安全协议传输 2、客户端本地保存的敏感信息,需要先加密再保存使用,不可逆支持PBKDF2(迭代10000次)加密保存,可逆支持AES256+IV保存,密钥支持可更新 二、认证鉴权 1、License中心与分析节点分布式部署,需要做用户名+口令安全认证,支持使用HTTPS安全协议。 2、客户端登录支持防暴力破解,支持验证码,多次连续尝试登陆失败后锁定账...

zileixu的博客 1万+

在ABAQUS中使用VUMAT子程序实现Hashin失效准则的详细解析与实践:深入探讨复合材料模拟仿真的高级编程技巧

Hashin失效准则是由材料科学家Shlomo Hashin于1962年提出的一种基于能量方法的多向失效理论,主要用于预测复合材料的破坏行为。与传统的单向失效理论不同,Hashin准则考虑了材料内部的多种独立破坏机制,如基体断裂、界面脱粘、纤维断裂等,这些机制在不同应力状态下可能同时或分别发生。通过计算各个机制的能量释放率,Hashin失效准则能够更为准确地预测复合材料在复杂应力状态下的破坏行为。

qq_38334677的博客 1950

【SpringCloud】五、Spring Cloud Sleuth分布式链路跟踪整合Zipkin

Zipkin是Twitter开源的分布式实时数据跟踪系统

weixin_43333483的博客 506

SKUA-GOCAD入门教程-第四节

本文介绍了软件界面中的几个关键功能模块。控制菜单允许用户通过按钮添加视图、对象窗口、工作流平台等工具到任务栏,并支持快速搜索。页面布局以任务为导向,包含3D、2D视图、工具栏等,用户可自定义页面和布局。对象窗口用于浏览和处理数据,如钻孔、断层等,支持显示、隐藏、分组和过滤数据。3D查看器的数据浏览器对象窗口包含列表、对象等,建模数据通常位于未分配对象窗口中。本文旨在帮助用户熟悉软件界面,特别是3D视图窗口和对象管理窗口,以便更高效地进行数据导入和建模操作。

江洋大葱的博客 1060

springcloud zipkin 链路监控

1. springcloud应用中引入: <!-- Zipkin 依赖 --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-zipkin</artifactId> </dependency> 2. yml

cn_yaojin 610

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

SpringCloud_Zipkin

SpringCloud_Zipkin依赖pom.xml配置文件bootstrap.yml配置源码 依赖pom.xml &lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mave...

一叶知秋 156

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Docker安装Zipkin,SpringCloud整合Zipkin

一、Zipkin概述 sleuth分布式请求链路跟踪,可以得知微服务之间的调用链路,由于监控信息只能输出到控制台不方便查看,因此我们需要一个图形化的工具zipkin。zipkin是twitter开源的分布式跟踪系统,主要用来收集系统的实时数据,从而追踪系统的调用问题。 官网:https://zipkin.io/ 完整的调用链路(sleuth结合zipkin 底层监控): 上图解释: 一条链路通过Trace Id 唯一标识,Span标识发起的请求信息,各span通过parent id关联起来。 二、

2516

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

23、SpringCloud Zipkin

一、简介 Zipkin是一个全链路跟踪工具,可以用来监控微服务集群中调用链路的通畅情况,聚合各业务系统调用延迟数据,达到链路调用监控跟踪 如图,在复杂的调用链路中假设存在一条调用链路...

lixiang987654321的专栏 932

SpringCloud源码-整合zipkin

- 添加 Zipkin 集成依赖 -->-- 如果你想使用 Zipkin 的 HTTP 追踪端点 -->

Ediwal的博客 391

【Spring Cloud Alibaba 温故而知新】(五)SpringCloud Sleuth + Zipkin:分布式日志追踪

目录 8.1.1 SpringCloud Sleuth 是什么 SpringCloud Sleuth 必知必会 SpringCloud Sleuth 实现的功能是:它会自动为当前应用构建起各通信通道的跟踪机制 通过诸如 RabbitMQ、Kafka(或者其他任何 SpringCloud Sleuth 绑定器实现的消息中间件)传递的请求 通过 Zuul、Gateway 代理传递的请求 通过 RestTemplate 发起的请求 SpringCloud Sleuth 跟踪实现原理 为了实现请求跟

Eddie'Blog 3182
上一篇: Windows下启动RabbitMQ服务及安装详解
下一篇: 微服务之springCloud-config-bus
liuyinfei_java
博客等级 码龄9年 71粉丝 104原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值