我们对 OpenTelemetry 的承诺

作为可观测性框架和工具包,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 的支持,使其成为稳定功能。我们还将把对乱序摄取的支持标记为稳定。这还包括将对原生/指数直方图的支持正式发布 (GA)。

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

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

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

原生支持 resource attributes

OpenTelemetry 区分 metric attributes(用于识别指标本身的标签,如 http.status_code)和 resource attributes(用于识别指标来源的标签,如 k8s.pod.name),而 Prometheus 具有更扁平的标签模式。这导致了许多可用性问题,详细信息在这里

我们正在从多个方面(查询、用户体验、存储等)探索多种解决方案来解决这个问题,但我们的目标是使其能够非常容易地根据 resource attributes 进行过滤和分组。这是一项正在进行的工作,欢迎提供反馈和帮助!

生态系统中的 OTLP 导出

Prometheus remote write 已经得到大多数领先的可观测性项目和供应商的支持。然而,OpenTelemetry Protocol (OTLP) 正在日益突出,我们希望在 Prometheus 生态系统内支持它。

我们希望将对 OTLP 的支持添加到 Prometheus server、SDKs 和 exporters 中。这将意味着任何使用 Prometheus SDK 进行仪表化的服务也将能够 push OTLP,这将为 OpenTelemetry 用户解锁丰富的 Prometheus exporter 生态系统。

然而,我们打算保留和发展 OpenMetrics 导出格式,作为 Prometheus 和 pull-based 用例的优化/简化格式。

Delta temporality

OpenTelemetry 项目也支持Delta temporality,这在可观测性生态系统中有一些用例。我们有很多 Prometheus 用户仍然运行 statsd 并出于各种原因使用 statsd_exporter。

我们希望在 Prometheus server 中支持 OpenTelemetry 的 Delta temporality,并正在为此努力

号召贡献!

正如您所见,许多令人兴奋的新事物即将来到 Prometheus!如果您觉得在两个与可观测性相关的最重要的开源项目交集处工作具有挑战性和趣味性,我们欢迎您加入!

今年治理也在进行更改,这将使成为维护者的过程比以往更容易!如果您一直想对 Prometheus 产生影响,现在是开始的最佳时机。

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

结论

一些提议的更改是大型且侵入性的,或者涉及对 Prometheus 原始数据模型的根本性偏离。然而,我们计划平稳地引入这些更改,以便 Prometheus 3.0 没有重大的 breaking changes,并且大多数用户可以在没有影响的情况下升级。

我们很高兴为 Prometheus 开启这一新篇章,并期待您对建议的更改提供反馈。