原文为Alan West和Lavanya Chockalingam在New Relic博客上发表的客座文章
这篇博文是了解OpenTelemetry系列的一部分。第一部分概述了OpenTelemetry以及为什么它是仪器的未来。第二部分探讨了OpenTelemetry开源项目的一些核心组件。现在,在第三部分中,我们将重点讨论OpenTelemetry的主要数据源。
在OpenTelemetry项目中,有三个主要的数据源:跟踪、度量和日志。让我们来看看每个数据源和相关的应用编程接口(API)和软件开发工具包(SDK)。
OpenTelemetry跟踪
OpenTelemetry跟踪捕捉到通过系统的单个请求的细节,由称为跨度的工作单位组成。跨度代表追踪中的单个操作,或者是请求中涉及的单个服务或组件在流经系统时所做的工作。例如,HTTP调用或数据库调用。
一个跟踪是一棵跨度树。每个跟踪包含一个根跨度,它通常描述整个请求的端到端延迟。另外,它还可以包含一个或多个子操作的子跨度。跨度包含元数据,如跨度名称,开始时间,结束时间,以及一组键:值
对属性。
下面的视频演示了一个简单的例子,说明图书馆作者如何使用Trace API。它还展示了用于跨服务关联特定领域数据的Context API,以及应用程序开发人员如何使用Trace SDK。https://newrelic.com/media/oembed?url=https%3A//newrelic.wistia.com/medias/z5ejwb4ka0&max_width=0&max_height=0&hash=yXbZs93pbeaVqAelGIB7SYsh8jzpoh-uhQxyyrcLVLg
今天就开始吧
- 查看OpenTelemetry快速入门指南。
- 查看New Relic的OpenTelemetry实例。
- 注册New Relic的本地OTLP摄取端点。
追踪API
应用程序或库开发人员需要将Trace API作为依赖项添加。OpenTelemetry Trace API提供了一个追踪器 ,你可以用它来创建跨度,由 tracerProvider实例化。追踪器生成的每个跨度将与生成该跨度的库的版本名称有关。
上下文API
一个跨度包含一个跨度上下文,它是一组全局唯一的标识符(spanID
和traceID
),代表跨服务边界移动跟踪信息所需的数据。你使用Context API将上下文传播给下游服务并创建分布式跟踪。正如视频中所解释的,OpenTelemetry支持不同的标准来传播跟踪上下文,包括W3C跟踪上下文、B3和Jaeger。然后,由OpenTelemetry和New Relic这样的可观察性平台监测的服务会出现在同一个分布式跟踪中。
此外,你还可以使用该上下文将指标和日志与跟踪关联起来。OpenTelemetry支持W3C包袱标准,所以开发者可以捕捉任意的键:值
对来丰富跟踪、度量和日志数据。
追踪SDK
应用程序开发人员需要依赖OpenTelemetry Trace SDK。他们可以配置一个适合其应用需求的tracerProvider
。这包括关联一个资源,配置采样,以及注册一个跨度处理器的管道和一个输出器与追踪器提供者。
- 资源是描述应用程序运行环境的属性集合,如服务的名称,或者如果服务运行的主机或在Kubernetes环境中,它可能是节点或pod的名称。
- 采样使你能够通过减少收集和发送至后台的痕迹数量来控制仪器化带来的噪音和开销。SDK提供了一些现成的采样器,开发者可以根据具体的应用需求来配置采样器。你并不局限于跟踪SDK-你可以用OpenTelemetry收集器配置额外的采样(如基于尾部的采样)。
- 你可以向追踪器提供者注册一个跨度处理器的管道和一个输出器。跨度处理器按其注册的顺序被调用,你可以使用跨度处理器来过滤或丰富跨度的属性。在使用导出器将跨度发送到你的后端观察平台之前,使用批处理程序来批处理跨度的集合。
正如你所看到的,跟踪数据包含了关于向你的应用程序发出的单个请求的详细信息。另外,我们还讨论了它是如何经常被采样的。
OpenTelemetry度量数据
OpenTelemetry 度量数据代表了汇总的测量结果--时间序列数据,这些数据是从特定时间点上关于服务的测量中捕获的。与跟踪数据相比,度量数据提供的信息颗粒度较小。但是,指标对于指示你的服务的可用性和性能是很有用的。度量的例子包括CPU和内存利用率、请求持续时间、吞吐量和错误率。
下面的视频展示了一个例子,说明开发者如何使用Metric API来检测他们的代码,用SDK实现一个度量衡提供者,这样他们就可以将度量衡与应用程序如何被检测分开配置。
公制API
OpenTelemetry需要初始化一个仪表提供者,以便创建生成度量的仪器。OpenTelemetry Metric API使你能够以属性的形式将元数据添加到你的度量中,然后你可以使用这些属性来切分你的数据。Metric API有一个meterProvider
,你可以使用metric SDK来配置一个metric集合。Metric API提供了对各种类型仪器的访问,这些仪器被用来捕获特定的测量值。例如,一个计数器是一个随时间变化而加总的值。
OpenTelemetry Metric规范定义了仪器的数量,在短期内可能会发生变化,因为该规范仍在发展中。Java和Go拥有最成熟的Metric APIs。
Metric SDK
就像Trace SDK一样,Metric SDK使应用开发者能够为他们的特定应用配置一个仪表提供者。你可以关联一个资源,你可以注册一个公制处理器的管道和一个输出器。
你使用公制处理器来过滤或充实公制属性。度量管道还包括一个指示度量如何聚合的聚合器和一个将数据发送到后端可观察平台的输出器。
OpenTelemetry日志
OpenTelemetry项目的最后一种数据类型是日志数据,也许是遥测数据的最简单形式之一。 它是一种结构化格式的带时间戳的文本记录,可以通过战略属性进行过滤。
OpenTelemetry对日志数据的支持仍然是非常早期的。 你可以采取两种策略来使用OpenTelemetry的日志数据。
- 为现有的语言日志库实现导出器,使用扩展来与当前的跟踪相关联,并提供具有额外背景的日志数据。
- 使用带有OpenTelemetry收集器的日志转发器,并将其导出到后端可观察平台。
下面的视频显示了这两种方法的架构图。
现在你对OpenTelemetry开源项目中的三个主要数据源的工作原理有了基本的了解:traces、metrics和logs。