掘金 后端 ( ) • 2024-04-10 09:42

作者:Steve Gordon

采用 OpenTelemetry 的原生标准来对应用程序进行监测和观察。

如果你开发应用程序,你可能听说过 OpenTelemetry。在 Elastic®,我们对 OpenTelemetry 充满热情,认为它是标准化应用程监测和可观察性的未来。

在这篇文章中,我们将分享我们扩大对 OpenTelemetry 采用和承诺的计划,介绍 Elastic OpenTelemetry 各个语言 SDK 的发行版,这将补充我们现有的 Elastic APM 代理。

什么是 OpenTelemetry?

OpenTelemetry 是一个厂商中立的可观测性框架和工具包,支持在应用程序和分布式微服务架构中的跟踪、指标和日志等遥测信号。

OpenTelemetry 是由一系列标准推动的,旨在提供一致的方法来监测和观察应用程序行为。OpenTelemetry 是在云原生计算基金会(CNCF)的保护伞下孵化的项目,目前是第二活跃的项目,仅次于 Kubernetes。

你可以在 OpenTelemetry 网站上阅读更多关于采用 OpenTelemetry 的概念、术语和技术的内容。

一个更丰富的监测愿景

通过采用 OpenTelemetry,软件代码可以以与供应商无关的方式进行仪器化,将遥测信号以标准化格式导出到一个或多个供应商后端,如 Elastic APM。其设计为应用程序所有者提供了灵活性,可以在不进行代码更改的情况下切换供应商后端,并使用 OpenTelemetry 收集器将遥测数据发送到多个后端。

由于 OpenTelemetry 不是供应商特定的解决方案,因此语言生态系统更容易采用它并提供强大的监测。供应商不再需要自己实现特定的监测。OpenTelemetry 是一个标准,库开发人员有兴趣引入和维护监测,以使所有消费者受益。

因此,现在有更多的监测库可用,并且得到更好地更新。如果贵公司有开源库,你也可以贡献并创建自己的监测,以便让你的客户更容易采用 OpenTelemetry,并在其应用程序中获得更丰富的跟踪、指标和日志。

Elastic 与 OpenTelemetry 关系密切。在 2023 年,我们捐赠了 Elastic Common Schema,它正在与 Semantic Conventions 合并。在 2024 年,我们正在捐赠基于 eBPF 的性能分析代理。我们还在组织内部对 OpenTelemetry 的各个领域有多个贡献者。

因此,我们致力于帮助 OpenTelemetry 取得成功,这意味着在某些情况下,开始偏离 Elastic 特定组件,并推荐使用 OpenTelemetry 组件。

Elastic 致力于支持并为 OpenTelemetry 做出贡献。我们的 APM 解决方案已经接受原生 OTLP(OpenTelemetry 协议)数据,我们的许多 APM 代理已经将来自使用 OpenTelemetry API 仪器化的应用程序的数据收集和传输进行了桥接。

我们下一个旅程的下一步是推出语言 SDK 的 Elastic 分发版,并通过向 OpenTelemetry SDK 存储库贡献功能,将功能捐赠给 OpenTelemetry 社区。

Elastic 和 OpenTelemertry

Elastic 与 OpenTelemetry 关系密切。在 2023 年,我们捐赠了 Elastic Common Schema,它正在与 Semantic Conventions 合并。在 2024 年,我们正在捐赠基于 eBPF 的性能分析代理。我们还在组织内部对 OpenTelemetry 的各个领域有多个贡献者。

因此,我们致力于帮助 OpenTelemetry 取得成功,这意味着在某些情况下,开始偏离 Elastic 特定组件,并推荐使用 OpenTelemetry 组件。

Elastic 致力于支持并为 OpenTelemetry 做出贡献。我们的 APM 解决方案已经接受原生 OTLP(OpenTelemetry 协议)数据,我们的许多 APM 代理已经将来自使用 OpenTelemetry API 仪器化的应用程序的数据收集和传输进行了桥接。

我们下一个旅程的下一步是推出语言 SDK 的 Elastic 分发版,并通过向 OpenTelemetry SDK 存储库贡献功能,将功能捐赠给 OpenTelemetry 社区。

什么是 OpenTelemetry 分发?

OpenTelemetry 分发简单来说就是一个或多个 OpenTelemetry 组件的定制版本。每个分发都扩展了组件提供的核心功能,同时遵循其 API 和现有特性,利用内置的扩展点。

Elastic OpenTelemetry SDK 分发

随着 Elastic 发布了 OpenTelemetry SDK 的分发版,我们正在扩展我们对 OpenTelemetry 的支持,将其作为监测应用程序的首选和推荐选择。

OpenTelemetry 维护并发布了许多语言 API 和 SDK,用于使用 OpenTelemetry 观察应用程序。这些 API 提供了特定于语言的接口,用于监测应用程序代码,而 SDK 实现了该 API,使得可以收集和导出观察到的应用程序的信号。

我们目前的工作是扩展 OpenTelemetry 语言 SDK,引入额外的功能,并确保导出的数据与我们当前的后端具有最强的兼容性,同时它正在演变为更加符合 OpenTelemetry 原生的形式。

额外的功能包括重新实现当前 Elastic APM Agent 中可用但不属于 OpenTelemetry SDK 的概念。这些分发使我们能够附带针对所有已知提供与 Elastic 可观察性提供最佳集成的信号的倾向性默认设置。

无疑可以使用 OpenTelemetry API 对代码进行添加监测代码,然后引用 OpenTelemetry SDK 来启用收集应用程序产生的跟踪、指标和日志数据。Elastic APM 接受原生 OTLP 数据,因此你可以配置 OpenTelemetry SDK 直接将遥测数据导出到 Elastic 后端。我们称这种设置为使用 “原生” (又称 “vanilla”) OpenTelemetry SDK。

我们正在努力改进对在我们的后端原生存储和展示 OpenTelemetry 数据的支持,以便我们可以直接从各种遥测信号的数据驱动我们的可观察性 UI。我们的工作重点是确保 Elastic 精心策划的 UI 能够无缝处理 ECS 和 OpenTelemetry 格式。除此之外,我们还在开发语言 SDK 的分发版,以支持希望在其应用程序中采用 OpenTelemetry 原生监测的客户。

当前的 Elastic APM 代理支持诸如中央配置和跨度(span)压缩等功能,这些功能目前尚不是 OpenTelemetry 规范的一部分。我们正在投入我们的工程专业知识,通过将这些特性贡献给 OpenTelemetry,将这些特性带给更广泛的受众。由于标准化需要时间,通过提供分发,我们可以更快地将这些特性带给 OpenTelemetry 社区和我们的客户。

我们相信负责任的选择是集中精力促使并鼓励客户在其代码中偏好供应商中立的监测,并享受 OpenTelemetry 的好处。

分发最好地支持我们完全采用并推荐 OpenTelemetry 作为观察应用程序的首选解决方案的决定。通过提供当前 “原生” OpenTelemetry SDK 中尚不可用的功能,我们可以支持希望在其应用程序中采用 OpenTelemetry 原生、与供应商无关的监测的客户,同时仍然提供与现有 APM 代理相同的特性集合和后端能力。通过维护 Elastic 分发,我们还可以更好地支持我们的客户,在 “原生” OpenTelemetry SDK 的发布周期之外提供增强和修复,我们认为这是选择它们的一个至关重要的区别因素。

我们的愿景是,Elastic 将与 OpenTelemetry 社区合作,通过标准化流程捐赠功能,并贡献代码以在原生 OpenTelemetry SDK 中实现这些功能。随着时间的推移,我们希望看到许多 Elastic APM 代理独有的功能转移到 OpenTelemetry 中,以至于 Elastic 分发可能不再必要。在此期间,我们可以通过我们的 OpenTelemetry 分发提供这些功能。

然后,应用程序开发人员有几种选项可以从他们的应用程序中监测和收集遥测数据:

  • Elastic APM 代理:功能最齐全,但是特定于供应商

  • 带有 OpenTelemetry 桥接的 Elastic APM 代理:供应商中立的监测 API,但存在已知的限制:

    • 仅支持跟踪的桥接(不支持指标)
    • 不支持 OpenTelemetry 跨度事件
  • OpenTelemetry “原生” SDK:今天得到了全面的支持;但是,它缺少 Elastic APM 代理的一些功能,例如跨度压缩

  • Elastic OpenTelemetry 分发:

    • 默认情况下支持供应商中立的监测,代码中没有 Elastic 特定配置
    • 在使用 Elastic 可观察性作为后端时建议的默认设置
    • 使用 OpenTelemetry API 进一步定制我们的默认设置;无需学习新的 API

尽管我们将继续支持所有选项来监测你的代码,但我们认为通过引入第四个 OpenTelemetry 原生产品,我们正在为客户的成功铺平道路。我们预计这将在适当的时间成为 Elastic 客户的首选默认选项。

我们目前为 .NETJava 的分发版处于 alpha 版本状态,其他语言的分发版即将推出。我们鼓励你查看这些存储库,尝试分发版,并通过问题向我们提供反馈。你宝贵的意见使我们能够完善我们的设计,并引导我们的方向,以确保我们的分发版能够令消费者满意。

了解我们的新 Elastic OpenTelemetry SDK 分发版(针对 .NET)的 alpha 版发布

本文描述的任何功能或功能的发布和时间仍由 Elastic 自行决定。目前不可用的任何功能或功能可能不会按时或根本不会交付。

原文:Elastic now providing distributions for OpenTelemetry SDKs | Elastic Blog