Jaeger介绍
什么是Jaeger
Jaeger是Uber发布的一个开源系统,受到Dapper和OpenZipkin启发,用来监控和排查微服务的分布式系统。包括:
- 分布式上下文传递
- 分布式事务监控
- 自顶向下的原因分析
- 服务依赖分析
- 性能优化
Uber发布了一篇博客,讲述了分布式追踪系统在其内部的发展过程,以及Jaeger选用当前架构的原因。
特性
- 兼容OpenTracing数据模型和相关开发库,现在已经有Go,Java,NodeJs,Python,C++的实现。
- 对服务进行持续的采样
- 支持多种存储系统:Cassandra,Elasticsearch,内存
- 自适应采样(开发中)
- 数据处理管道(pipeline)(开发中)
在这里查看更多细节
技术
- 后端使用Go语言实现
- React/Javascript UI
- 支持的后端存储:Cassandra 3.4+,Elasticsearch 5.x, 6.x,Kafka,内存
系统截图
跟踪界面
追踪细节
特性详情
高扩展性
Jaeger的后端设计旨在不会出现单点故障,并且会随着业务扩容。
对OpenTracing原生支持
Jaeger的后端,前端UI,开发库都是一开始就被设计为支持OpenTracing标准的。
- 通过span的概念,使用痕迹线(traces)表示有向非循环图,
- 支持强类型span标记(tags)和结构化日志
- 通过baggage支持通用的分布式上下文的传递机制
多种存储后端
Jaeger支持两种流行的开源NoSql数据库作为trace存储后端,分别是Cassandra 3.4+ 和 Elasticsearch 5.x/6.x。社区也正在实验使用其他的数据库,例如ScyllaDB, InfluxDB, Amazon DynamoDB。Jaeger同样也提供了基于内存的存储,作为测试使用。
现代化Web UI
Jaeger Web UI使用流行的开源框架(如React),在1.0版本以后有了性能上的改进,可以处理大量的数据。
云原生部署
Jaeger的后端是分布式的,可以用Docker镜像部署,并支持多种配置模式,包括命令行,环境变量,多种格式的配置文件(yaml、toml等)。可以通过Kubernetes operator、Kubernetes templates、Helm chart的方式部署到Kubernetes集群中。
观测
所有的Jaeger后端组件都会默认暴露Prometheus监控指标(其他的监控后端也支持),使用结构化日志后端zap来记录日志。
向下兼容Zipkin
如果你已经使用了Zipkin相关的库,那么不需要重写所有的代码。从Zipkin后端切换只需要将流量路由到Jaeger后端。