概述
Jaeger 是用于追踪分布式服务之间事务的开源软件。它用来监控复杂的微服务环境并对其进行故障排除。
什么是分布式跟踪?
分布式跟踪是用来查看和了解复杂的微服务间交互中的整个活动链。
现代的云原生软件开发十分依赖微服务,因为每个独立的服务都提供不同的核心功能。当用户在应用中发出请求时,许多单独的服务都会做出响应,产生相应的结果。
应用中的一个调用可能会涉及几十项彼此交互的服务。当出现问题或某个请求变慢时,开发人员和工程师该如何查明问题所在?所以我们需要一种能跟踪所有连接的方法。
这就是分布式跟踪的意义所在。它通常是作为服务网格(管理和监控微服务的一种方式)的一部分运行。
Jaeger 使用分布式跟踪来了解不同微服务的请求路径。我们可以直观地看到调用流,无需凭猜测工作。
整理有序的事务信息对于调试和优化而言非常有用。Jaeger 内含的工具可用于监控分布式事务、优化性能和延迟,以及执行根本原因分析(RCA)(一种问题解决方法)。
Jaeger 组件及相关术语
Jaeger 将执行请求显示为一条条迹线(trace)。迹线代表系统中的数据/执行路径。
一个迹线包含一个或多个跨度(span)。跨度是 Jaeger 中作业的逻辑单元。每个跨度都由作业名称、开始时间和持续时间组成。跨度可以进行嵌套和排序。
Jaeger 内含多个组件,这些组件可以协同工作,一起收集、存储和可视化跨度与迹线。
Jaeger 客户端包括含用于分布式跟踪的 OpenTracing API 的特定语言实施。您可以手动使用这些实施,也可以将其与各种开源框架一起使用。
Jaeger 代理是一个网络守护进程,可侦听通过用户数据报协议发送的跨度。该代理应与所检测的应用放置在同一主机上。这通常是通过 Kubernetes 等容器环境中的 sidecar 实现的。
Jaeger 收集器可接收跨度并将它们放在队列中等待处理。
收集器需要持久的存储后端,因此 Jaeger 还具有可插拔的跨度存储机制。
查询是一项从存储中检索迹线的服务。
Jaeger 控制台是用于直观查看分布式跟踪数据的用户界面。
Jaeger 与红帽
Jaeger 是作为红帽® OpenShift® 服务网格的默认组件安装的,后者包括 Istio(一个开源服务网格)的实施。
这种分布式跟踪实施方案具有很多好处。Jaeger 可与 Kiali(Istio 的一个可观测性控制台)集成。Jaeger 后端支持根据业务需要大规模扩容,没有单点故障。Jaeger 可连接来自不同组件的数据,实现完整的端到端跟踪。Jaeger 还提供与 Zipkin 的向后兼容性。