Spring Cloud系列教程八:分布式链路追踪Spring Cloud Sleuth(F版)
发布日期:2021-06-29 11:56:08 浏览次数:3 分类:技术文章

本文共 2663 字,大约阅读时间需要 8 分钟。

介绍

当系统拆分后,一个前端请求的调用链路会变长,会调用多个不同的后端服务。当一个请求变慢或不可用时,为了方便定位问题,于是就有了分布式链路追踪。

分布式链路追踪会在请求中增加traceId和spanId,一个链路包含一个traceId多个spanId

例如一个前端请求调用订单系统,而订单系统再去调用库存系统。

订单系统的日志如下(默认不是如下这种格式,可以配置成如下格式,默认格式后面会提到)

[INFO][traceId=aaa][SpanId=123]

库存系统的日志如下

[INFO][traceId=aaa][SpanId=456]

一个请求链路有一个traceId,在不同系统中值一样,有多个spanId,在不同系统中值不一样。

分布式链路追踪有很多实现,这里简单介绍一下与Zipkin的整合

github地址:https://github.com/erlieStar/spring-cloud-learning

与Zipkin进行整合

创建zipkin-service

spring boot 2.x版本后,官方不推荐自己编译,而是提供了编译好的jar包供我们使用,直接下载启动即可

curl -sSL https://zipkin.io/quickstart.sh | bash -sjava -jar zipkin.jar

启动后访问http://localhost:9411/zipkin

在这里插入图片描述

创建消费者服务

示例项目:consumer-zipkin(spring-cloud-sleuth)

1.项目配置如下

pom.xml

org.springframework.cloud
spring-cloud-starter-zipkin

application.yaml

server:  port: 8080spring:  zipkin:    base-url: http://localhost:9411  application:    name: consumer-zipkin  sleuth:    sampler:      probability: 1.0 # 采样比例,1.0表示全部采集

2.启动类如下

@Slf4j@RestController@SpringBootApplicationpublic class ConsumerZipkin {
public static void main(String[] args) {
SpringApplication.run(ConsumerZipkin.class); } @Autowired private RestTemplate restTemplate; @Bean public RestTemplate restTemplate() {
return new RestTemplate(); } @GetMapping("hello") public String hello() {
log.info("start invoke"); return restTemplate.getForObject("http://localhost:8090/hello", String.class); }}

创建生产者服务

示例项目:producer-zipkin(spring-cloud-sleuth)

1.项目配置如下

pom.xml

org.springframework.cloud
spring-cloud-starter-zipkin

application.yaml

server:  port: 8090spring:  zipkin:    base-url: http://localhost:9411  application:    name: producer-zipkin  sleuth:    sampler:      probability: 1.0 # 采样比例,1.0表示全部采集

2.启动类如下

@Slf4j@RestController@SpringBootApplicationpublic class ProducerZipkin {
public static void main(String[] args) {
SpringApplication.run(ProducerZipkin.class); } @RequestMapping("hello") public String hello() {
log.info("new request"); return "hi zipkin"; }}

开始调用

访问http://localhost:8080/hello

zipkin分析出如下调用关系

在这里插入图片描述
consumer-zikpin打印日志如下

INFO [consumer-zipkin,53836e18c9552b3f,53836e18c9552b3f,true] 6664 --- [nio-8080-exec-1] com.javashitang.ConsumerZipkin           : start invoke

producer-zipkin打印日志如下

INFO [producer-zipkin,53836e18c9552b3f,6eefb28892009df6,true] 20832 --- [nio-8090-exec-1] com.javashitang.ProducerZipkin           : new request

分析一下日志格式

[consumer-zipkin,53836e18c9552b3f,53836e18c9552b3f,true]

第一个值:应用名称

第二个值:traceId
第三个值:spanId
第四个值:是否将该信息输出到zipkin等服务中来收集和展示

输入traceId,分析出如下调用链路

在这里插入图片描述

欢迎关注

在这里插入图片描述

转载地址:https://blog.csdn.net/zzti_erlie/article/details/104335926 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Mybatis源码解析:详解Mybatis一级缓存和二级缓存
下一篇:这几个IDEA高级调试技巧,用完就是香

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月09日 18时50分04秒