Jaeger主要用于监视和诊断基于微服务的分布式系统,包括: 分布式上下文传播、分布式事务监控、根本原因分析、服务依赖性分析、性能/延迟优化。用于程序间(服务间)轨迹追踪、行为追踪、调用关系追踪。
Logging主要是记录当前点离散事件(文本型描述数据),Metrics主要是记录当前点数值(度量值),Logging、Metrics只是对当前系统状况的离散记录,而tracing是对过程的一个记录,一个用户请求会调用多个服务,tracing用于记录这个过程中每一步的log Metrics数据(如 事件内容 执行时间),和每一步之间的调用顺序和调用关系,是一个有向无环图。Logging Metrics 是点数据,Tracing则是线数据(面数据),是一个过程记录。
Jaeger可以跨进程跨服务构建Tracing,适用于有复杂调用关系的异构的微服务框架系统,用于解决异构系统互相调用关系,追踪服务间调用来找到具体哪个环节出现问题,如找出性能瓶颈节点,可以说是微服务不可或缺的帮手和推手。
Jaeger Tracing使用需要代码埋点来实现,也就是在代码定义trace span逻辑,也可以针对特定框架(如rails)定义tracing架构,来减少代码的的侵入性,实现可插拔使用。Jaeger既实现了白盒监控的理念来提供高度定制化,也可以通过绑定框架实现对业务代码的低侵性,入方便使用。
Jaeger 最初是基于OpenTracing标准构建的。基于OpenTracing标准构建的各种tracking框架可以实现数据互通,这也是采用标准的好处。想了解open-tracing 可以访问 https://opentracing.io 网站,目前OpenTracing已经被合并到了OpenTelemetry这个项目,OpenTelemetry 具体细节可以访问https://opentelemetry.io/获取。OpenTelemetry包含log、Metrics、tracing三部分,Jaeger实际是OpenTelemetry的Tracing的标准实现,Prometheus是Metrics的标准实现,logs目前还在讨论过程中,具体进度可以关注官网。
Jaeger完全兼容zipkin,Jaeger最初也是借鉴了很多zipkin的思想,Jaeger最终战胜zipkin加入Cloud Native Computing Foundation。
一些APM (Application Performance Management)集成了Jaeger实现Tracing功能,如elastic APM,实现了对集成了Jaeger的封装,将数据存储到ES中,方便更多维度的分析。
Tracing系统APM系统的鼻祖是Dapper,一个为开源的google内部系统,理论基础来源于这片论https://ai.google/research/pubs/pub36356,trace、 span、 context 等概念都出自这个论文,感兴趣的同学可以参考下。