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

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

前言

大家好,一直以来我都本着用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 基础知识 的铺垫。目前正在出一个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,包括:

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


追踪视图dbc33d6cafaa438cb1e6778a4a1d4b89_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


  • 详情

16cf4d2f4b044b1b9448561df72da7a0_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


  • 服务性能监控

26bc6ecdba7c47aa845874497e944b57_tplv-k3u1fbpfcp-zoom-in-crop-mark_4536_0_0_0.png


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的服务追踪, 其实功能还是挺多的,大家可以自己去官网看一下,有兴趣的朋友可以研究一下,建议大家自己多去尝试 ~


下期预告

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

相关实践学习
分布式链路追踪Skywalking
Skywalking是一个基于分布式跟踪的应用程序性能监控系统,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据,提供了一种简便的方式来清晰地观测分布式系统,具有分布式追踪、性能指标分析、应用和服务依赖分析等功能。 分布式追踪系统发展很快,种类繁多,给我们带来很大的方便。但在数据采集过程中,有时需要侵入用户代码,并且不同系统的 API 并不兼容,这就导致了如果希望切换追踪系统,往往会带来较大改动。OpenTracing为了解决不同的分布式追踪系统 API 不兼容的问题,诞生了 OpenTracing 规范。OpenTracing 是一个轻量级的标准化层,它位于应用程序/类库和追踪或日志分析程序之间。Skywalking基于OpenTracing规范开发,具有性能好,支持多语言探针,无侵入性等优势,可以帮助我们准确快速的定位到线上故障和性能瓶颈。 在本套课程中,我们将全面的讲解Skywalking相关的知识。从APM系统、分布式调用链等基础概念的学习加深对Skywalking的理解,从0开始搭建一套完整的Skywalking环境,学会对各类应用进行监控,学习Skywalking常用插件。Skywalking原理章节中,将会对Skywalking使用的agent探针技术进行深度剖析,除此之外还会对OpenTracing规范作整体上的介绍。通过对本套课程的学习,不止能学会如何使用Skywalking,还将对其底层原理和分布式架构有更深的理解。本课程由黑马程序员提供。
相关文章
|
2月前
|
消息中间件 SpringCloudAlibaba Java
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
【Springcloud Alibaba微服务分布式架构 | Spring Cloud】之学习笔记(八)Config服务配置+bus消息总线+stream消息驱动+Sleuth链路追踪
788 0
|
10月前
|
存储 Kubernetes 监控
基于 Jaeger 进行微服务链路追踪
基于解决不同行业、业务应用的可扩展性、可用性等一系列问题,由此而生的微服务架构得到了各大厂商的、组织以及个人的青睐,随之而来便广泛应用于各种行业场景应用中。然而,随着时间的推移,越来越多的问题慢慢地呈现在大众的视野中。
219 0
|
10月前
|
存储 消息中间件 NoSQL
浅谈分布式链路追踪之Jaeger
随着微服务生态的盛行,在基于不同的业务场景中,一个简单的请求往往可能会涉及到多个不同服务类型,此时,若某个服务所提供的业务出现异常,从而可能会导致整个业务处理链路中的问题跟踪、定位及其分析较为困难,服务之间的依赖梳理、组件排查就变得尤为复杂。
634 0
|
12月前
|
存储 Prometheus 监控
(16)go-micro微服务jaeger链路追踪
(16)go-micro微服务jaeger链路追踪
181 0
|
消息中间件 监控 Cloud Native
基于SpringCloud体系实现的一套支持云原生的分布式微服务架构,提供OAuth2/JWT权限认证、分布式事务、灰度、限流、链路追踪等功能,支持Docker容器化部署、镜像交付、K8S容器编排
lion是基于Spring Cloud体系实现的一套支持云原生的分布式微服务架构,为了让中小型公司解决当下技术瓶颈,快速将现有应用服务架构拆分改造为分布式微服务架构,进入 All-in-Cloud 时代,只需在本架构上进行相关业务开发即可,大大减少了分布式微服务架构的门槛,仅在本框架上做&quot;减法&quot;的目的,使架构师及开发人员不必过多的关注架构本身,只需专注于业务开发
基于SpringCloud体系实现的一套支持云原生的分布式微服务架构,提供OAuth2/JWT权限认证、分布式事务、灰度、限流、链路追踪等功能,支持Docker容器化部署、镜像交付、K8S容器编排
|
运维 前端开发 程序员
基于Dapper的分布式链路追踪入门——Opencensus+Zipkin+Jaeger
最近做了一些分布式链路追踪有关的东西,写篇文章来梳理一下思路,或许可以帮到想入门的同学。下面我将从原理到demo为大家一一进行讲解,欢迎评论区交流~。
245 0
基于Dapper的分布式链路追踪入门——Opencensus+Zipkin+Jaeger
|
监控 Java Maven
(十七)、SpringCloud Sleuth分布式请求链路追踪
(十七)、SpringCloud Sleuth分布式请求链路追踪
(十七)、SpringCloud Sleuth分布式请求链路追踪
|
监控 网络协议 Java
分布式链路追踪- SkyWalking使用手册
分布式链路追踪- SkyWalking使用手册
948 0
分布式链路追踪- SkyWalking使用手册
|
6月前
|
存储 监控 数据可视化
Golang链路追踪:实现高效可靠的分布式系统监控
Golang链路追踪:实现高效可靠的分布式系统监控
|
6月前
|
消息中间件 监控 安全
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(3)
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践
66 0
RocketMQ x OpenTelemetry 分布式全链路追踪最佳实践(3)