Jaeger 概述
Jaeger 是 Uber 开发并开源的一款分布式追踪系统,兼容 OpenTracing API,适用于以下下场景:
- 分布式跟踪信息传递
- 分布式事务监控
- 问题分析
- 服务依赖性分析
- 性能优化
特性
高扩展性
Jaeger后端的设计没有单点故障,可以根据业务需求进行扩展。
原生支持 OpenTracing
Jaeger后端,Web UI和工具库已完全设计为支持OpenTracing标准。
- 通过跨度引用将迹线表示为有向无环图(不仅是树);
- 支持强类型的跨度标签和结构化日志
baggage - 支持通用的分布式上下文传播机制
多存储后端
Jaeger支持两个流行的开源NoSQL数据库作为跟踪存储后端:Cassandra 3.4+和Elasticsearch 5.x / 6.x / 7.x。Jaeger还附带了一个简单的内存存储区,用于测试设置。
现代化的UI
Jaeger Web UI是使用流行的开源框架(如React)以Javascript实现的。v1.0中发布了几项性能改进,以允许UI有效处理大量数据,并显示具有成千上万个跨度的跟踪

云原生部署
Jaeger后端作为Docker映像的集合进行分发。- 这些二进制文件支持各种配置方法,包括命令行选项,环境变量和多种格式(
yaml,toml等)的配置文件。 Kubernetes模板和Helm图表有助于将其部署到Kubernetes集群。
可观察性
- 所有
Jaeger后端组件都公开Prometheus指标(也支持其他指标后端)。 - 使用结构化日志库
zap将日志写到标准输出。
系统架构

-
Jaeger Client- 为不同语言实现了符合OpenTracing标准的SDK。应用程序通过API写入数据,client library把trace信息按照应用程序指定的采样策略传递给jaeger-agent。 -
Agent- 是一个监听在UDP端口上接收span数据的网络守护进程,它会将数据批量发送给collector。它被设计成一个基础组件,推荐部署到所有的宿主机上。Agent将client library和collector解耦,为client library屏蔽了路由和发现collector的细节。 -
Collector- 接收jaeger-agent发送来的数据,然后将数据写入后端存储。Collector被设计成无状态的组件,因此您可以同时运行任意数量的jaeger-collector。 -
Data Store- 后端存储被设计成一个可插拔的组件,支持将数据写入cassandra、elastic search。 -
Query- 接收查询请求,然后从后端存储系统中检索trace并通过UI进行展示。Query是无状态的,您可以启动多个实例,把它们部署在nginx这样的负载均衡器后面。
采样速率
如果所有的请求都开启 Trace 显然会带来比较大的压力,另外,大量的数据也会带来很大存储压力。为此,jaeger 支持设置采样速率,根据系统实际情况设置合适的采样频率。
Jaeger 官方提供了多种采集策略,可以根据时间情况按需使用
const- 全量采集,采样率设置0,1分别对应打开和关闭probabilistic- 概率采集,默认万份之一,0~1之间取值,rateLimiting- 限速采集,每秒只能采集一定量的数据remote- 一种动态采集策略,根据当前系统的访问量调节采集策略


















