分布式链路追踪工具-Jaeger
持续坚持原创输出,点击蓝字关注
作者:软件质量保障
知乎:https://www.zhihu.com/people/iloverain1024
什么是 Jaeger?
Jaeger 是用于追踪分布式服务之间事务的开源软件,它为微服务场景而生。它主要用于分析多个服务的调用过程,图形化服务调用轨迹,是诊断性能问题、分析系统故障的利器。
什么是分布式跟踪?
分布式跟踪是用来查看和了解复杂的微服务间交互中的整个活动链。
现代的云原生软件开发十分依赖微服务,因为每个独立的服务都提供不同的核心功能。当用户在应用中发出请求时,许多单独的服务都会做出响应,产生相应的结果。
应用中的一个调用可能会涉及几十项彼此交互的服务。当出现问题或某个请求变慢时,开发和测试人员该如何查明问题所在?所以我们需要一种能跟踪所有连接的方法。这就是分布式跟踪的意义所在。它通常是作为服务网格(管理和监控微服务的一种方式)的一部分运行。
Jaeger 使用分布式跟踪来了解不同微服务的请求路径。我们可以直观地看到调用流,无需凭空猜测。
整理有序的事务信息对于调试和优化而言非常有用。Jaeger 内含的工具可用于监控分布式事务、优化性能和延迟以及执行根本原因分析(RCA)。
Jaeger 架构及术语
Jaeger 将执行请求显示为一条条迹线(trace)。
-
迹线代表系统中的数据/执行路径。一个迹线包含一个或多个跨度(span)。
-
跨度是 Jaeger 中作业的逻辑单元。每个跨度都由作业名称、开始时间和持续时间组成。跨度可以进行嵌套和排序。
Jaeger 内含多个组件,这些组件可以协同工作,一起收集、存储和可视化跨度与迹线。
-
Jaeger-client 包括含用于分布式跟踪的 OpenTracing API 的特定语言实施。Jaeger客户端代码库,便于不同语言的项目来介入到Jaeger中,当我们的应用程序装载上之后,client会负责收集并发送数据到Agent。
-
Jaeger-agent 是一个网络守护进程,可侦听通过用户数据报协议发送的跨度。该代理应与所检测的应用放置在同一主机上。这通常是通过 Kubernetes 等容器环境中的 sidecar 实现的。
-
Jaeger-collector 从agent收集traces信息,并通过处理管道处理他们,再写入后端存储(backends)。当前的collector工作主要是管理trace,建立索引,执行相关转换,并最终存储它们。
-
Jaeger 控制台是用于直观查看分布式跟踪数据的用户界面。Query查询是一种从存储中检索trace,并提供UI以显示它们的服务。上图中就展示了一次Trace的数据流向,作为一次系统作用的数据传播/执行图,即可以在Jaeger UI上展示出来
本地搭建运行
官网下载 https://www.jaegertracing.io/download/ 安装包,解压后本地执行下面执行启动:
./jaeger-all-in-one --collector.zipkin.host-port=:9411
本地打开 http://127.0.0.1:16686/search,即可看到如下页面
Jaeger UI 可以使我们更好地利用这个强大的分布式服务追踪工具。
搜索页面:
我们可以使用搜索窗格搜索具有特定属性的trace:它们来自哪个服务、进行了哪些操作、跟踪中包含的特定标签(例如,http 状态代码)、响应多长时间。
在此窗格中完成自定义搜索后,单击 Find Traces。
搜索结果如下:
在本例中,我选择查询 jaeger-query 服务。我可以在时间线或列表中看到我的trace。单击所需的trace以深入了解它。
具体trace视图如下,当我们找到可能存在问题的trace并单击它时,看到如下所示内容:
在这里,我们可以找到有关执行时间、进行了哪些调用、它们的响应时间、http 状态代码、路由路径(在 http 调用的情况下)等特定属性的特定信息。
此外,jaeger还提供trace比对功能,感兴趣的同学可以尝试动手做一下。
总结一下吧,jaeger可以改变测试工程师传统的在服务器上捞错误日志排查问题的方式,因为每一笔请求对应唯一的链路,我们可以基于trace去排查这笔请求的链路上可能存在的问题。
- END -
关注 软件质量保障,与质量君一起学习成长、共同进步,做一个职场最贵Tester!
往期推荐