作为一名开发人员,您关心应用程序的性能,并且您知道找到捕获遥测数据的正确仪器是多么具有挑战性。一种选择是使用专有代理,但如果您不想被锁定在该代理的供应商中呢?

你可以使用开放标准之一,比如OpenCensusOpenTracing,但要决定哪个选项适合您的应用程序和工作流可能会比较棘手。您所选择的任何选项都必须能够随着应用程序的变化而扩展和适应您的需求。但是,您选择的检测工具必须遵循可以跨供应商和项目共享的标准,这一点也变得越来越重要。

厂商中立的开放标准很重要。和OpenTelemetry,一个云本地计算基金会(CNCF)项目创建了一个开放的规范,您可以使用它来标准化如何收集和发送遥测数据到后端平台。

在这篇文章中,我们将解释更多关于OpenTelemetry项目的内容——它是如何工作的,它提供的好处,以及如何开始。

OpenTelemetry是什么?

最初,OpenTelemetry是通过合并OpenTracing和opencenssus项目而形成的。OpenTelemetry提供了一套api和库来标准化如何收集和传输遥测数据。OpenTelemetry提供了一个安全的、与供应商无关的服务规范,以便您可以将数据发送到您选择的不同后端,如New Relic。

OpenTelemetry项目由以下组件组成:

  • 规范以保持所有项目的一致性
  • 包含基于规范的接口和实现的api
  • 专门为Java、Python、Go、Erlang等语言创建的sdk (api的参考实现)
  • 可以将数据发送到您选择的后端的导出器
  • 为处理和导出提供与供应商无关的实现的收集器

(我们将在下面的架构部分深入研究这些组件。)

关键术语

如果你是opentelementetry的新手,以下是你需要知道的关键术语:

  • 跟踪:通过分布式系统请求的活动记录。跟踪是有向无环图跨越。
  • 跨越:命名的、计时的操作表示跟踪中的单个操作。可以嵌套span以形成跟踪树。每个跟踪都包含一个根跨度,根跨度通常描述端到端延迟,并可选地描述其子操作的一个或多个子跨度。
  • 指标:关于服务的原始度量,在运行时捕获。OpenTelemetry定义了三种度量仪器:计数器、测量器和观察器。观察者支持一个异步API按需收集度量数据,每个收集间隔一次。
  • 背景:span包含跨环境,它是一组全局惟一的标识符,表示每个跨域都是其中一部分的惟一请求,表示跨服务边界移动跟踪信息所需的数据。OpenTelemetry也支持相关背景它可以携带任何用户定义的属性。不需要关联上下文,组件可以选择不携带或存储此信息。
  • 上下文传播:上下文在服务之间绑定和传输的方法,通常通过HTTP头。上下文传播是OpenTelemetry系统的关键部分,除了跟踪之外还有一些有趣的用例,例如在进行a /B测试时。OpenTelemetry支持用于上下文传播的多种协议,为了避免出现问题,在整个应用程序中使用单一方法是很重要的。例如,如果你使用W3C规范在一个服务中,您需要在系统的任何地方使用它。

OpenTelemetry的好处

通过将OpenTracing和OpenCensus组合成一个开放标准,OpenTelemetry提供了以下好处:

  • 简化的选择。您不需要在一个标准或另一个标准之间做出选择。您目前正在使用OpenTracing或OpenCensus吗?别担心,OpenTelemetry为两个项目都提供了向后兼容性。
  • 跨平台的。OpenTelemetry支持多种语言和后端。它代表了一条与供应商无关的路径,可以在不改变现有仪器的情况下捕获并将遥测数据传输到后端。这是一个重要的项目,满足了那些寻找这种自由的开发者。
  • 流线型的可观测性。正如OpenTelemetry所说,“有效的观测需要高质量的遥测。“希望看到更多的供应商转向OpenTelemetry,因为它更容易适应和测试一个单一的标准。

简而言之,您可以将精力集中在构建令人惊叹的、可靠的、基于解决方案的软件上,而不是陷入决策制定的本质问题中。亚博直播平台这就是一切。

使用OpenTelemetry

OpenTelemetry api和sdk附带了大量的快速入门指南和文档,因此您可以学习如何立即摄取数据。的Java快速入门指南例如,它概述了如何获取跟踪器、创建跨区、添加属性,以及在不同跨区之间传播上下文。

您还将找到一些常用用例的示例,以帮助您入门。它们提供了实际的工作代码,演示了如何检测HTTP/gRPC服务器和客户端、数据库连接器等。

在你用OpenTelemetry跟踪api来测试你的应用程序之后,你可以把跟踪数据发送到observable平台,比如New Relic或者任何使用预构建的后端在OpenTelemetry注册处的出口商

度量和日志规范仍处于开发阶段,但一旦发布,它们将在实现OpenTelemetry的主要目标方面发挥重要作用:确保库和框架拥有所有内置的遥测数据类型,这允许开发人员无需测量就能获取遥测数据。

OpenTelemetry架构组件

由于OpenTelemetry的目标是为供应商和可观察性后端提供一个跨语言的框架,所以它非常灵活和可扩展,但它也相当复杂。OpenTelemetry默认实现的架构分为三个部分:

  1. OpenTelemetry API
  2. OpenTelemetry SDK,包括:
    • 示踪剂管道
    • 计管道
    • 共享上下文层
  3. 收集器

让我们看一下每个体系结构组件。

OpenTelemetry API

应用程序开发人员使用开放的Telemetry API来检测他们的代码,库作者使用它直接将检测写入他们的库中。该API不处理操作问题,也不处理数据如何发送到供应商后端。

我们可以将API分为四个部分:

  1. 示踪剂的API
  2. 一个标准的API
  3. 一个上下文API
  4. 一组语义约定

示踪剂API

跟踪程序API支持跨的生成,跨是命名的、定时的操作,表示跟踪中的连续工作段。span可以被指定为atraceId还可以使用带有时间戳的事件进行注释。跟踪标记跨越一个名称和一个版本。在查看数据时,与跟踪程序关联的名称和版本允许您跟踪生成跨度的检测库。

度量API

度量API提供各种类型的度量仪器,例如计数器观察人士。计数器可以让你数东西。观察者允许你测量离散时间点的值;例如,您可以使用观察者来“观察”不在a上下文中发生的值跨度,例如当前CPU负载或磁盘上空闲的字节总数。参见a的规范工具列表它涵盖了所有可能的度量用例。

上下文API

上下文API增加了背景信息,如W3C跟踪上下文,Zipkin B3头,或新遗迹分布示踪标题——使用相同“上下文”的跨度和跟踪。此外,这个API允许你跟踪span如何在系统中传播。当跟踪从一个流程传播到下一个流程时,将更新上下文。度量工具总是能够访问当前上下文。

语义约定

最后,OpenTelemetry API包含了一组语义约定这包括命名跨度、属性以及将错误与跨度(以及其他事项)相关联的指导方针和规则。通过在API规范中进行编码,OpenTelemetry项目确保了所有的检测,无论作者或语言,都包含相同的语义信息。对于那些希望为所有用户提供一致APM体验的供应商来说,这个功能非常有价值。

OpenTelemetry SDK

接下来,OpenTelemetry SDK是一个实现OpenTelemetry API。SDK大致由三个部分组成,类似于我们刚才介绍的api——一个跟踪器、一个仪表和一个将它们连接在一起的共享上下文层。

理想情况下,SDK应该实现99%的标准用例,但如果需要,也可以自定义SDK。例如,在跟踪管道实现中,除了核心实现如何与共享上下文层交互之外,您还可以自定义任何内容。例如,在跟踪程序管道的实现中,您可以自定义它使用的采样算法。

示踪剂管道

配置SDK,您关联一个或多个SpanProcessors随示踪管道的实现。一个SpanProcessor监视跨度的生命周期,并将跨度交付给aSpanExporter在适当的时候。内置在SDK中的是一个简单的SpanProcessor,它将完成的跨直接转发给出口商一次一个。

SDK还包含一个批处理实现,以可配置的间隔分批转发完成的跨。然而,由于SpanProcessor实现接受插件,您可以实现自己的插件并为其分配自定义行为。例如,如果您的遥测后端支持查看“进行中”区域,您可以创建一个SpanProcessor在每次更改跨度状态时发送用于导出的跨度的实现。

示踪剂管道的末端是SpanExporter。出口商的工作很简单:将跨度从OpenTelemetry表示转换为遥测后端需要的任何东西,并将它们发送到该后端。提供一个自定义SpanExporter是遥测技术供应商参与OpenTelemetry生态系统的最简单方式。

计管道

仪表管线比示踪管线复杂得多,因为指标比跨距复杂得多。以下描述基于SDK的Java实现,在不同的语言中可能有所不同。

Meter管道创建并维护各种类型的度量工具,包括计数器和观察者。工具的每个实例都需要以某种方式进行聚合。默认情况下,计数器通过对值求和来聚合,观察者通过获取最后记录的值来聚合。所有的仪器类型都有一个默认的聚合定义。

(在撰写本文时,为度量工具配置自定义聚合的能力仍处于建议阶段。)

当前Meter管道的实现因语言不同而不同,但是在所有情况下,度量聚合都被交付到MetricExporter。同样,在跨越的情况下,供应商可以提供自己的导出器,将度量聚合器生成的聚合数据转换为遥测后端所需的类型。

OpenTelemetry支持两种类型的导出器:基于“推”的导出器,该导出器按一定时间间隔将数据发送到后端;以及基于“拉”的导出器,该后端将在需要数据时查询数据。New Relic是基于推送的后端的一个例子普罗米修斯是一个基于拉的后端。

共享上下文层

共享上下文层位于跟踪程序和仪表管道之间,允许所有非观察者的度量记录在执行范围的上下文中发生。您可以自定义上下文繁殖专家,它在系统内外传播span上下文。如前所述,所有OpenTelemetry SDK实现都提供了W3C跟踪上下文规范的实现,但是您可以选择包括Zipkin B3传播或其他。

收集器

OpenTelemetry收集器是一个独立的服务,它可以从各种来源(包括Zipkin,Jaeger, OpenCensus。收集器可以做到的tail-based抽样可以将跨度和指标导出到大量供应商和开源遥测系统,包括New Relic。

有关OpenTelemetry架构的更多信息,请查看完整规范

今天就开始探索眼动术吧

目前,钻孔术处于测试阶段。现在是开始探索这个项目能为您做什么的理想时间。

看看这个基本的Java示例它概述了如何测试代码,将指标和跟踪信息发送到New Relic这样的后端。

要了解更多关于New Relic参与的其他开源项目,请访问New Relic开源

约翰·沃森(John Watson)是New Relic公司的首席工程师。他目前专注于支持OpenTelemetry,是OpenTelemetry Java实现的维护者之一。Lavanya Chockalingam是New Relic APM products的高级产品营销经理。亚博最新版直播Lavanya以工程师的身份开始她的职业生涯,然后转到销售和产品营销岗位。Lavanya在硬件和软件行业都有工作经验,对技术以及如何利用技术解决现实世界的问题充满热情。查看贴子

有兴趣为New Relic博客写作吗?亚搏体育登入网给我们发一份建议书!