SpringCloud学习(二十二):Sleuth分布式请求链路跟踪

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

一、概述


     

1、为什么需要Sleuth

   

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


2、Sleuth是什么


Spring Cloud Sleuth提供了一套完整的服务跟踪的解决方案 。


在分布式系统中提供追踪解决方案并且兼容支持了zipkin。


二、搭建链路监控



1、下载zipkin


SpringCloud从F版起已不需要自己构建Zipkin Server了,只需调用jar包即可 。


下载地址:https://dl.bintray.com/openzipkin/maven/io/zipkin/java/zipkin-server/


如果forbidden就换这个:Central Repository: io/zipkin/zipkin-server  


7a491797169d46aaa6f088344ebb190b.png


下载后缀为jar的。

 

2、运行jar包


命令为

java -jar

5023e4239ac64792abc4ef2d528b82b1.png


3、访问可视化界面


http://localhost:9411/zipkin/


b6858b89f9454ac0b278e6ee42b6b0c3.png

在这个界面中我们可以看到完整的微服务调用链路


类似下图

29b70a7431164387bf933a1a1e8ceaf1.png


4、两个术语


一条链路通过Trace Id唯一标识,Span标识发起的请求信息,各span通过parent id 关联起来。

d6b4a30d53784759a173ba961f5965ae.png

f225bc141a9f4239b5f7d1e7dfbc6b08.png


(1)Trace


Trace:类似于树结构的Span集合,表示一条调用链路,存在唯一标识


(2)Span


span:表示调用链路来源,通俗的理解span就是一次请求信息


三、服务提供者和消费者搭建



为了方便,我们就不再新建模块了,直接在之前写好的服务提供者8001(cloud-provider-payment8001)和服务调用者80(cloud-consumer-order80)的基础上进行修改。


80和8001要修改的内容相同。


1、pom文件修改


增加zipkin的依赖

<!--包含了sleuth+zipkin-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>


2、yml文件修改


zipkin:
    base-url: http://localhost:9411
  sleuth:
    sampler:
      probability: 1


注意缩进关系

3b16c1be0b0f4793b926d6e0e67b6633.png


3、controller类修改

 

// ====================> zipkin+sleuth
@GetMapping("/consumer/payment/zipkin")
public String paymentZipkin()
{
    String result = restTemplate.getForObject("http://localhost:8001"+"/payment/zipkin/", String.class);
    return result;
}


四、运行测试



依次启动eureka7001、8001、80。  


访问         http://localhost:90//consumer/payment/zipkin 如果启动时报500错误,则将80中配置的负载均衡注解去掉(我也不知道为什么,如果有大佬知道的话麻烦评论区教教我)

13e92fdc3a5f47be83c0b4150082eacb.png

多刷新几次,模拟80调用了几次8001。


然后访问        http://localhost:9411  


选好后,点击查找 6683a850bd5844b9b1bbac02052c0812.png


点击依赖也可以清楚地看到链路的调用关系


2f2ba2e153c54f43a686f3f50a9297fa.png


相关文章
|
4月前
|
监控 前端开发 Java
分布式链路监控系统问题之执行原方法时不能调用method.invoke的问题如何解决
分布式链路监控系统问题之执行原方法时不能调用method.invoke的问题如何解决
|
4月前
|
存储 缓存 监控
分布式链路监控系统问题之kywalking在后期维护过程中可能会遇到中间件版本升级的问题如何解决
分布式链路监控系统问题之kywalking在后期维护过程中可能会遇到中间件版本升级的问题如何解决
|
4月前
|
存储 监控 Java
分布式链路监控系统问题之使用Byte Buddy进行字节码增强时的问题如何解决
分布式链路监控系统问题之使用Byte Buddy进行字节码增强时的问题如何解决
|
2月前
|
监控 Java 对象存储
监控与追踪:如何利用Spring Cloud Sleuth和Netflix OSS工具进行微服务调试
监控与追踪:如何利用Spring Cloud Sleuth和Netflix OSS工具进行微服务调试
45 1
|
4月前
|
监控 Java 应用服务中间件
分布式链路监控系统问题之Eagleeye的traceId设计的问题如何解决
分布式链路监控系统问题之Eagleeye的traceId设计的问题如何解决
102 1
|
4月前
|
消息中间件 数据采集 监控
分布式链路监控系统问题之Skywalking提供了哪些数据传输方式
分布式链路监控系统问题之Skywalking提供了哪些数据传输方式
|
4月前
|
监控 Java 测试技术
分布式链路监控系统问题之Skywalking和Eagleeye在数据收集方面的问题如何解决
分布式链路监控系统问题之Skywalking和Eagleeye在数据收集方面的问题如何解决
|
4月前
|
监控 API 开发者
分布式链路监控系统问题之ASM的开发体验被认为是噩梦般的问题如何解决
分布式链路监控系统问题之ASM的开发体验被认为是噩梦般的问题如何解决
|
4月前
|
监控 Java API
分布式链路监控系统问题之对Java应用实现字节码增强的方式的问题如何解决
分布式链路监控系统问题之对Java应用实现字节码增强的方式的问题如何解决
|
4月前
|
监控 中间件
分布式链路监控系统问题之当某个Segment数据缺失时还原调用树的问题如何解决
分布式链路监控系统问题之当某个Segment数据缺失时还原调用树的问题如何解决