微服务

什么是 Jaeger?

Jaeger 是用于追踪分布式服务之间事务的开源软件。它用来监控复杂的微服务环境并对其进行故障排除。

什么是分布式跟踪?

分布式跟踪是用来查看和了解复杂的微服务间交互中的整个活动链。

现代的云原生软件开发十分依赖微服务,因为每个独立的服务都提供不同的核心功能。当用户在应用中发出请求时,许多单独的服务都会做出响应,产生相应的结果。

应用中的一个调用可能会涉及多项彼此交互的服务。当出现问题或请求运行放缓时,开发人员和工程师该如何把问题隔离出来?所以我们需要一种能跟踪所有连接的方法。

这就是分布式跟踪的意义所在。它通常是作为服务网格(管理和监控微服务的一种方式)的一部分运行。

Jaeger 使用分布式跟踪来了解不同微服务的请求路径。我们可以直观地看到调用流,无需凭猜测工作。

整理有序的事务信息对于调试和优化而言非常有用。Jaeger 内含的工具可用于监控分布式事务、优化性能和延迟,以及执行根本原因分析(RCA)(一种问题解决方法)。

Jaeger 开源社区

作为一个开源项目,一个由数百个贡献者组成的社区不断改进完善着 Jaeger。Jaeger 基于与供应商无关的 OpenTracing API 和工具。

共享出行公司 Uber 在 2015 年开发了开源项目 Jaeger。2017 年,Jaeger 纳入云原生计算基金会(CNCF)的孵化项目,2019 年,Jaeger 正式毕业。

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 的向后兼容性。

红帽 OpenShift 服务网格入门