我们对 OpenTelemetry 的承诺

2024 年 3 月 13 日作者 Goutham Veeramachaneni (@Gouthamve) 和 Carrie Edwards (@carrieedwards)

OpenTelemetry 项目 是一个可观测性框架和工具包,旨在创建和管理遥测数据,如链路追踪、指标和日志。由于其信号之间的一致规范以及减少供应商锁定的承诺,它正在被广泛采用,这也是我们感到兴奋的地方。

回顾 2023 年

在过去几年里,我们与 OpenTelemetry 社区合作,确保 OpenTelemetry 和 Prometheus 能够双向相互支持。这促使我们起草了在两个系统之间进行转换的官方规范,以及允许您将 Prometheus 指标采集到 OpenTelemetry Collector 中(反之亦然)的实现。

从那时起,我们花费了大量时间来了解 OpenTelemetry 用户在 Prometheus 中存储指标时面临的挑战 ,并基于这些挑战探讨了如何解决这些问题 。一些提议的变更需要仔细考虑,以避免破坏任何一方的运营承诺,例如同时支持推送(push)和拉取(pull)。在 2023 年柏林 PromCon 大会上,我们尝试在其中一个演讲中 总结我们的想法。

在我们于柏林举行的开发者峰会 上,我们花了大部分时间深入讨论这些变更以及我们对 OpenTelemetry 的总体立场,达成的广泛共识是,我们希望“成为 OpenTelemetry 指标的默认存储” 

我们已经组建了一个核心开发小组来领导这项计划,并将在 2024 年发布 Prometheus 3.0,其中 OTel 支持将是其最重要的功能之一。以下是 2024 年即将推出的功能预告。

未来一年

OTLP 数据采集正式发布 (GA)

在 2023 年 9 月 6 日发布的 Prometheus v2.47.0  中,我们为 Prometheus 添加了对 OTLP 数据采集的实验性支持。我们正在不断改进,并计划增加对过时性(staleness)的支持,并使其成为一个稳定功能。我们还将把对乱序数据采集的支持标记为稳定。这还包括正式发布我们对原生/指数型直方图的支持。

支持 UTF-8 指标和标签名称

OpenTelemetry 语义约定  推动使用 “.” 作为命名空间分隔符。例如,http.server.request.duration。然而,Prometheus 目前要求使用更有限的字符集,这意味着在采集到 Prometheus 时,我们会将该指标转换为 http_server_request_duration

这导致了不必要的差异,我们正在通过为所有标签和指标名称添加 UTF-8 支持来消除这一限制。进展情况可在此处跟踪 

对资源属性的原生支持

OpenTelemetry 区分指标属性(用于识别指标本身的标签,如 http.status_code)和资源属性(用于识别指标来源的标签,如 k8s.pod.name),而 Prometheus 的标签模式则更为扁平。这导致了许多可用性问题,具体细节可在此处 查看。

我们正在从多个方面(查询、用户体验、存储等)探索多种解决方案 来解决这个问题,我们的目标是让根据资源属性进行筛选和分组变得相当容易。这项工作仍在进行中,欢迎提供反馈和帮助!

生态系统中的 OTLP 导出

Prometheus 远程写入功能已得到大多数领先的可观测性项目和供应商的支持。然而,OpenTelemetry 协议(OTLP)正日益普及,我们希望在整个 Prometheus 生态系统中支持它。

我们希望为 Prometheus 服务器、SDK 和导出器添加对 OTLP 的支持。这意味着任何使用 Prometheus SDK 检测的服务也将能够*推送* OTLP,这将为 OpenTelemetry 用户解锁丰富的 Prometheus 导出器生态系统。

然而,我们打算保留并发展 OpenMetrics 公开格式,作为一种为 Prometheus 和基于拉取(pull-based)的用例优化/简化的格式。

Delta 时间性 (Delta temporality)

OpenTelemetry 项目还支持 Delta 时间性 ,这在可观测性生态系统中有一些用例。我们仍有许多 Prometheus 用户出于各种原因在使用 statsd 和 statsd_exporter。

我们希望在 Prometheus 服务器中支持 OpenTelemetry 的 Delta 时间性,并正在为此努力 

征集贡献!

如您所见,Prometheus 即将迎来许多令人兴奋的新变化!如果您觉得在可观测性领域两个最相关的开源项目的交汇点工作充满挑战和乐趣,我们欢迎您的加入!

今年,我们还在进行治理变更,这将使成为维护者的过程比以往任何时候都更容易!如果您曾想对 Prometheus 产生影响,现在是开始的最佳时机。

我们一直以来的首要重点是尽可能公开透明地组织上述所有工作,以便您也能参与贡献。我们正在寻找贡献者来支持这项计划并帮助实现这些功能。请查看 Prometheus 3.0 公共看板 Prometheus OTel 支持里程碑 来跟踪功能开发的进展,并了解您可以做出贡献 的方式。

结论

一些提议的变更规模较大、侵入性强,或者涉及到对 Prometheus 原始数据模型的根本性改变。然而,我们计划平稳地引入这些变更,以便 Prometheus 3.0 不会有重大的破坏性变更,大多数用户可以无影响地升级。

我们很高兴能为 Prometheus 开启这个新篇章,并希望听到您对所提议变更的反馈。