[关闭]
@levinzhang 2019-08-06T08:14:27.000000Z 字数 3742 阅读 567

开源分布式跟踪方案概览

摘要

分布式跟踪领域有太多的新术语、框架和工具,而且目前这是一个尚未规范化的领域,所以对于初学者来说,有着较高的入门门槛。本文整理了流行的分布式跟踪工具,并对它们进行了分类和对比。


本文最初发表于RedHat的开发者博客,经RedHat和原作者Juraci Paixão Kröhling授权由InfoQ中文站翻译分享。

入门分布式跟踪可能是一项很艰难的任务。这个领域有太多新术语、框架和工具,它们有着明显互相重叠的功能,初学者很容易迷失或偏离主题。本文对最流行的工具进行了概述和分类,能够帮助你掌握分布式跟踪领域的概况。

虽然跟踪和采样分析是密切相关的两个学科,但是分布式跟踪通常被理解将应用中不同工作单元的信息连接在一起,以便理解整个事件链的技术,这些工作单元会在不同的进程或主机中执行。在现代应用程序中,这意味着分布式跟踪可以用来描述HTTP请求在穿越大量微服务时的情况。

这里所列的大多数工具可以大致分为instrumentation库、tracer、分析工具(analysis tool,后端+UI),以及它们的任意组合。博文“各种跟踪方式的差异”很好地描述了分布式跟踪的这三个方面。

对于本文来讲,我们将instrumentation定义为用来告诉记录哪些信息的库,将tracer定义为如何记录并提交数据的库,将分析工具定义为接收跟踪信息的后端。在现实中,这些分类是不断变化的,instrumentation和tracer的区别并不会始终那么明显。类似的,分析工具这个术语可能会过于宽泛,因为有些工具会关注探索跟踪信息,而有些则是完整的可观察性平台。

本指南只列出了开源的项目,不过还有一些其他的厂商和解决方案值得关注,比如AWS X-Ray、Datadog、Google Stackdriver、Instana、LightStep等。

Apache SkyWalking

Instrumentation Tracer 分析工具

Apache SkyWalking最初是在2015年作为一个理解分布式系统的培训项目而开发的。创建之后,它在中国流行起来,致力于成为一个完整的应用程序性能监控平台(Application Performance Monitoring,APM),它主要关注通过代理实现自动化的instrumentation并与现有的tracer(比如Zipkin和Jaeger的tracer)或基础设施组件进行集成(如服务网格)。Skywalk已经被提升为Apache基金会的顶级项目。

Apache(Incubating) Zipkin

Instrumentation Tracer 分析工具

Apache(Incubating) Zipkin最初是由Twitter开发的并于2012年开源。它是最成熟的开源跟踪系统之一,并激发了几乎所有的现代分布式跟踪工具。Zipkin是一个完整的跟踪解决方案,包括instrumentation库、tracer和分析工具。数据的传播格式B3目前是分布式跟踪的通用语言,另外它的数据格式也得到了其他工具的原生支持,比如数据生成端的Envoy Proxy和消费端的其他跟踪解决方案。Zipkin的优势之一是拥有大量高质量的框架instrumentation库。

Haystack

Instrumentation Tracer 分析工具

Haystack是一个具有类似APM能力的跟踪系统,比如异常检测(anomaly detection)和趋势可视化。它最初是Expedia开发的,其技术架构非常关注高可用性。Haystack利用OpenTracing作为它主要的instrumentation库,并且像Pitchfork这样的附加组件可以以其他格式摄取数据。

Jaeger

Instrumentation Tracer 分析工具

Jaeger最初是由Uber开发的,并于2017年开源,在此之后,该项目转移至了云原生计算基金会(Cloud Native Computing Foundation,CNCF)。我们可以在Jaeger最初的架构、数据模型和命名法中看到来自Dapper和Zipkin的灵感,但是它的发展已经超出了这个范围。对于instrumentation部分,Jaeger利用OpenTracing API,该API从一开始就是一等公民。分析工具非常轻量级,非常适合用于开发阶段和高度弹性的环境(例如多租户Kubernetes集群),并且它是Istio等工具的默认跟踪器。

OpenCensus

Instrumentation Tracer 分析工具

OpenCensus最初是谷歌基于其内部跟踪平台开发的,它既是一个tracer,也是一个instrumentation库。它的tracer可以连接到“导出器”,向Jaeger、Zipkin和Haystack等开源分析工具发送数据,也可以向Instana和谷歌Stackdriver等该领域的供应商发送数据。除了tracer之外,OpenCensus Agent还可以用作进程外的导出器,允许instrumented的应用程序完全不受数据终点的分析工具的影响。OpenCensus的另一个方面就是跟踪,最终得到度量指标。它在框架instrumentation库方面还没有那么丰富,但是一旦与OpenTracing项目的合并完成,这一点可能会有所改观。

OpenTracing

Instrumentation Tracer 分析工具

如果说在分布式跟踪的instrumentation方面有什么接近标准的东西的话,那就是OpenTracing。这个由CNCF托管的项目是由在各种场景中实现分布式跟踪系统的人员启动的,包括供应商、用户和内部实现的开发人员。在项目的一端,有许多框架instrumentation库,比如JAX-RS、Spring Boot或JDBC。另一方面,有一些tracer完全支持OpenTracing API,包括Jaeger和Haystack,以及该领域的知名的供应商,如Instana、LightStep、Datadog和New Relic。Zipkin也有兼容的实现。

OpenTracing + OpenCensus

Instrumentation Tracer 分析工具
?/✓ ?/✓

OpenTracing最近宣布将与OpenCensus合并。虽然目前还不清楚未来的工具会是什么样子,甚至不知道它将如何命名,但这肯定是值得关注的。目前,它们已经发布了一个暂定的路线图以及一些具体的代码建议,展示了这个新工具的方向。

Pinpoint

Instrumentation Tracer 分析工具

Pinpoint最初是由Naver在2012年开发的,并于2015年开源。它包含APM功能,具有网络拓扑、JVM遥测图和跟踪视图的特性。Instrumentation只能通过代理完成,可以通过插件进行扩展。这种方法的优点是,instrumentation不需要代码变更,但缺点是,它缺乏对显式instrumentation的支持。Pinpoint适用于基于PHP和JVM的应用程序,在这个领域,它对框架和库提供了广泛的支持。

Veneur

Instrumentation Tracer 分析工具

Veneur项目是由Stripe发起的,它可以描述为可观察性数据的管道。它与本指南中几乎所有其他工具的不同之处在于,它对可观察性应该是什么有自己的见解:span。它附带了一组本地代理(称为“sink”),这些代理能够接收span,从中提取或聚合数据,并将输出发送到像Kafka这样的外部系统。为了更好地实现这一点,Veneur提供了自己的数据格式SSF。指标可以嵌入到span中,也可以基于“常规”span数据进行汇总/聚合。

Dapper

Dapper分布式跟踪解决方案起源于谷歌,并在2010年的一篇论文中进行了描述。它是这里所列的大多数工具的共同祖先,包括Zipkin、Jaeger、Haystack、OpenTracing和OpenCensus。虽然Dapper并不是一种可以直接下载和安装的解决方案,但是该论文依然是现代分布式跟踪解决方案中所使用原语(primitive)的参考资料,并且有助于了解设计决策背后的原因。

W3C Trace Context

在当前分布式跟踪生态系统中,一个很大问题就是使用不同tracer检测的应用程序之间的互操作性。为了解决这个问题,万维网联盟(World Wide Web Consortium,W3C)成立了分布式跟踪工作组(Distributed Tracing Working Group ),负责传播格式的Trace Context推荐方案。

所有项目的概览

项目 Instrumentation Tracer 分析工具
Apache SkyWalking
Apache (Incubating) Zipkin
Haystack
Jaeger
OpenCensus
OpenTracing
OpenTracing + OpenCensus ?/✓ ?/✓
Pinpoint
Veneur
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注