一起来学SpringCloud之整合Jaeger链路追踪

1,846 阅读6分钟

前言

大家好,一直以来我都本着用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 基础知识 的铺垫。目前正在出一个SpringCloud长期系列教程,从入门到进阶, 篇幅会较多~

适合人群

  • 有一定的Java基础
  • 想尝试微服务开发
  • 有SpringBoot开发基础
  • 想学习或了解SpringCloud
  • 想提高自己的同学

大佬可以绕过 ~

背景

如果你是一路看过来的,很高兴你能够耐心看完。之前带大家学了Springboot这门框架,熟练掌握了单体应用的开发,如今微服务开发盛行,对我们的技术要求也是越来越高,薪资也是令人兴奋。这个系列将会带大家学习SpringCloud微服务开发,我会带大家一步一步的入门,耐心看完你一定会有收获~

情景回顾

上期带大家一起认识了Zuul微服务网关过滤器的使用以及带大家实现了自定义过滤器,本期学习整合jaeger链路追踪,内容不多,就是带大家看一下,我们一起来看一下吧~

什么是链路追踪

在学习之前,还是带大家科普一下,什么是链路追踪,要明白它给我们解决的痛点是什么?

链路追踪是分布式系统下的一个概念,它的目的就是要解决上面所提出的问题,也就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如,各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。

我们知道,在微服务场景下, 服务调用是很复杂的,首先请求会到你的网关,然后网关转发到你的后端服务,服务之间又是互相调用的,如果单靠我们人为去找它的调用链是非常困难的,对于定位问题,过程会很痛苦,消耗了大量的时间。通过链路追踪我们就可以解决以下问题:

  • 实现接口数据采集
  • 数据分析,可以很方便的问题复现
  • 可以用于可视化,因为有了链路关系,通过可视化的工具我们会很方便的排查问题,比如grafana这个工具就很牛,它集成了很多工具,几乎用的监控工具都可以和它很好的扩展,有兴趣的朋友可以看下

链路追踪协议

OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。它的出现是为了解决不同的分布式追踪系统 API 不兼容的问题。

OpenTracing 通过提供与平台和厂商无关的 API,使得开发人员能够方便地添加追踪系统,就好比http协议,它可以是go写的http接口,也可以是java的,应该很好理解。

OpenTracing 的数据模型,主要有以下三个:

  • Trace:一个完整请求链路
  • Span:一次调用过程(需要有开始时间和结束时间)
  • SpanContext:Trace 的全局上下文信息,如里面有traceId

今天我们要集成的jaeger它也是基于这一协议

什么是jaeger

Jaeger 受Dapper和OpenZipkin的启发,是Uber Technologies以开源形式发布的分布式跟踪系统。它用于监控和故障排除基于微服务的分布式系统,官网: https://www.jaegertracing.io,包括:

  • 分布式上下文传播
  • 分布式事务监控
  • 根本原因分析
  • 服务依赖分析
  • 性能/延迟优化

追踪视图

  • 详情

  • 服务性能监控

jaeger 服务搭建

集成它,首先要搭建它的服务,这里学习,我们直接all-in-one:

docker run -d --name jaeger \
  -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \
  -p 5775:5775/udp \
  -p 6831:6831/udp \
  -p 6832:6832/udp \
  -p 5778:5778 \
  -p 16686:16686 \
  -p 14250:14250 \
  -p 14268:14268 \
  -p 14269:14269 \
  -p 9411:9411 \
  jaegertracing/all-in-one:1.34

推荐大家使用docker部署,没有用过也没关系,先安装它,运行后,直接输入上边的命令就好了。

SpringCloud 集成 jaeger

首先引入依赖

<!--        集成 jaeger-->
<dependency>
    <groupId>io.opentracing.contrib</groupId>
    <artifactId>opentracing-spring-jaeger-cloud-starter</artifactId>
    <version>3.3.1</version>
</dependency>

添加配置:

# jaeger ui: localhost:16681/search
opentracing:
  jaeger:
    enabled: true
    log-spans: true
    const-sampler:
      decision: true
    udp-sender:
      host: localhost
      port: 6831

打开localhost:16681/search可以查看我们的jaeger服务部署是否成功,打开后默认左上边的服务是空的,大家可以启动项目,写个接口测试一下,看下jaeger控制台的变化,会发现所有的请求都显示了,现在数据都是存在内存的,生产是需要持久化的。这里只供学习参考, jaeger还可以和grafana集成,可以实现很好看的面板,大家也可以去研究一下

结束语

本期到这里就结束了, 总结一下,本节主要讲了什么是链路追踪, 以及带大家实现了jaeger的服务追踪, 其实功能还是挺多的,大家可以自己去官网看一下,有兴趣的朋友可以研究一下,建议大家自己多去尝试 ~

下期预告

前面的学习都是服务端,下期带大家快速入门前端学习, 下期给大家整理一些比较好的前端资源和文章,如果你是前端方向的同学,相信对你会有帮助。关注我,不迷路, 下期不见不散 ~

更文时间

  • 工作日(周一 🍉 周五)
  • 周末不更 ☀️
  • 节假日不定时更

往期内容

项目源码(源码已更新 欢迎star⭐️)