前言
大家好,一直以来我都本着用最通俗的话理解核心的知识点, 我认为所有的难点都离不开 基础知识 的铺垫。目前正在出一个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
的服务追踪, 其实功能还是挺多的,大家可以自己去官网看一下,有兴趣的朋友可以研究一下,建议大家自己多去尝试 ~
下期预告
前面的学习都是服务端,下期带大家快速入门前端学习, 下期给大家整理一些比较好的前端资源和文章,如果你是前端方向的同学,相信对你会有帮助。关注我,不迷路, 下期不见不散 ~