微服务链路追踪Spring Cloud Sleuth整合Zipkin解析
作者:Lxlxxx 发布时间:2022-09-23 22:29:36
前言
如果在开发过程中,你还在靠查看服务器日志来寻找服务与服务之间的报错信息,那么这篇一定要来看下,通常在我们开发环境自测的时候,我们会将代码发布到开发环境,然后无论是通过postMan请求,还是通过页面请求,遇到报错的信息,我们都会去服务器上去看时实的日志,来寻找报错信息;
如果涉及到多个服务调用,这个时候会登陆多个服务器去查看服务的报错信息,这仅仅是在我们开发环境自测的时候我们会去这么操作;如果是在生产环境,还依靠这种方式,那么多少就会显得比较low了,这时候我们就要快速的定位到故障服务,就要引入“服务调用链路”的概念。
何为调用链路
一个大型分布式微服务系统往往由若干个微服务组成,这些微服务部署在若干个服务器上,为了实现高可用还会采取集群的方式,若干个服务相互调用就形成了调用链网络。
服务之间的调用出现异常、超时、宕机,某一个服务出现这样的情况,都会导致整个调用链路出现问题, 在出现这样问题的时候就要及时的解决,来避免整个业务系统的不可用,这个时候就必须快速定位问题。
Zipkin + Sleuth
作为为微服务提供调用链路支持的其实有很多组件,包括SkyWalking、CAT、Pinpoint、Zipkin + Sleuth,这些组件的实现方式、接入方式、颗粒度、traceid查询等方面可能有不同,但是最终目的其实都一样,就是把请求的链路记录下来供开发人员排错参考,这里我因为我项目使用的是Spring Cloud,协议也是使用的http,所选择的是 Spring Cloud Sleuth更加匹配项目,集成也相对容易。
Zipkin
Zipkin分布式追踪系统,简单的说在一个西瓜摊,里面的瓜有大有小、有熟有生、有好有坏,所有的瓜都混杂在一起,我们很难去找到比较合适的瓜买走, Zipkin所做的就是追踪分析,找到好的瓜,然后将坏的瓜卖不出去的瓜进行剔除。
这离涉及到几个概念,也是链路追踪的核心。
Traceld:用来标记服务调用链的标记,包括所有在请求链中的服务,都使用的一个链路追踪ID
SpanId:区域ID,调用链中某个服务的专属ID,无论是调用者和被调用者都会产生自己的SpanId
ParentId:父级ID,调用者的生成的SpanId,在去请求下游服务,SpanId会成为下游服务的ParentId,用来标记上下游的关系。
Spring Cloud Sleuth
可以理解为基于Zipkin的一个封装,sleuth可以记录调用的情况,而Zipkin可以收集这些调用信息。
Zipkin启动
下面基于Spring Cloud Sleuth整合Zipkin
docker run zipkin:
docker run -d -p 9411:9411 openzipkin/zipkin
Zipkin 启动完成
引入jar
使用的框架版本 spring-cloud.version:Hoxton.SR4 spring-boot.version:2.2.6.RELEASE
<!-- sleuth jar -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<!-- zipkin jar -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-sleuth-zipkin</artifactId>
</dependency>
引入sleuth和zipkin,nacos配置
sleuth:
enabled: true
sampler:
rate: 100
# 设置 Sleuth 收集信息的百分比
zipkin:
sender:
type: web
base-url: http://127.0.0.1:9411/
⚠️ zipkin:sender:type: web (这里type类型可以支持多种,web、kafka、rabbit、activemq都可以支持),这里只做web类型的演示。
服务调用测试
System2 服务提供feig接口,供system服务调用
@FeignClient(contextId = "iTestServiceClient", value = "Lxlxxx-system2", fallbackFactory = TestServiceFallbackFactory.class)
public interface ITestServiceClient {
/**
* 服务调用测试方法
* @return
*/
@GetMapping("/test/method")
public String testRequestMethod();
}
system服务调System2的feign接口
@RestController
@Slf4j
public class TestController {
@Autowired
private ITestServiceClient iTestServiceClient;
@GetMapping("/testMethod")
public void testMethod(){
log.info("通过feign调用system2服务~~~~~~~~~");
iTestServiceClient.testRequestMethod();
}
}
我这边注册了两个服务 分别是Lxlxxx-system 和 Lxlxxx-system2分服务
Zipkin查看调用情况
来源:https://juejin.cn/post/7198767799485071420


猜你喜欢
- mkdir函数用于创建目录。格式如下:#include<sys/types.h>#include<sys/stat.h&g
- 在上个星期阿里巴巴一面的时候,最后面试官问我如何把一篇文章中重复出现的词或者句子找出来,当时太紧张,答的不是很好。今天有时间再来亲手实现一遍
- 在安装过后出现了这样的问题:于是看了一下,是找不到这个版本,于是到gradle文件里加了一句话,指定好版本,切记不要低于26,然后去sdk
- 工厂模式和简单工厂有什么区别。废话不多说,对比第一篇例子应该很清楚能看出来。优点: 工厂模式弥补了简单工厂模式中违背开放-封闭原则,又保持了
- InetAddress类InetAddress类用来封装我们前面讨论的数字式的IP地址和该地址的域名。你通过一个IP主机名与这个类发生作用,
- Home键(小房子键)在键盘上映射的就是home键,这倒是很好记。Menu键用于打开菜单的按键,在键盘上映射的是F2键,PgUp键同样可以。
- 一、前言让我们先理一下springfox与swagger的关系。swagger是一个流行的API开发框架,这个框架以“开放API声明”(Op
- 样式如下所示:布局:layoutdialog_set_pwd.xml<?xml version="." encod
- 前言在日常的测试工作过程中,app可能会出现闪退崩溃的情况,这个时候就需要测试同学快速抓取到崩溃日志,来有效的辅助开发定位问题,快速的去解决
- 一、树概念及结构1.1 树的概念树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因 为
- 前言简单来说机器学习的核心步骤在于“获取学习数据;选择机器算法;定型模型;评估模型,预测模型结果”,下面本人就以判断日报内容是否合格为例为大
- 本文实例为大家分享了java抓取邮箱号码的具体代码,供大家参考,具体内容如下java抓取文件中邮箱号码的具体代码package reg;im
- 还原背景大家都做过b-s架构的应用,也就是基于浏览器的软件应用。现在呢有个场景就是FE端也就是前端工程是前后端分离的,采用主流的前端框架VU
- Spring Security OAuth2主要配置,注意application.yml最后的配置resource filter顺序配置,不
- 本文实例展示了C#自定义函数NetxtString实现生成随机字符串的方法,在进行C#项目开发中非常实用!分享给大家供大家参考。一、生成随机
- 一、前言最近自己在学习Spring boot的过程中开发了一个组件 multithreadpool-spring-boot-starter,
- 1.先看源码文档/** * Indicates that an annotation type is automatically inher
- 迭代器Iterator接口1.迭代器接口Iterable内置方法iterator(), 返回一个新建的 Iterator。如:public
- 现在很多的网站都提供有用户注册功能, 通常我们注册成功之后就会收到一封来自注册网站的邮件。邮件里面的内容可能包含了我们的注册的用户名和密码以
- 大致流程客户端根据远程服务的地址,客户端发送请求至服务端,服务端解析信息并找到对应的实现类,进行方法调用,之后将调用结果原路返回,客户端解析