Prometheus 3.0 发布公告

继近期在柏林 PromCon 大会上发布 Prometheus 3.0 beta 版 之后,Prometheus 团队激动地宣布 Prometheus 3.0 版本即日起正式发布!

这个最新版本标志着一个重要的里程碑,因为它是 7 年来的第一个主要版本。在这段时间里,Prometheus 经历了漫长的发展历程,从早期采用者的项目演变为云原生监控堆栈的标准组成部分。Prometheus 3.0 旨在通过增加一些令人兴奋的新功能,同时在很大程度上保持与先前版本的稳定性和兼容性,来继续这一旅程。

完整的 3.0 版本在 beta 版的基础上增加了一些新功能,并且还引入了一些额外的重大更改,我们将在本文中进行描述。

新特性

以下是 beta 版本中已发布以及此后新增的令人兴奋的更改摘要

全新 UI

Prometheus 3.0 的亮点之一是其默认启用的全新 UI

New UI query page

UI 已被完全重写,减少了混乱,外观更加现代,具有 PromLens 风格的树状视图等新功能,并通过使用更现代的技术堆栈,使未来的维护更加容易。

要了解有关新 UI 的更多信息,请阅读 Julius 在 PromLabs 博客上发表的详细文章。用户可以使用 old-ui 功能标志临时启用旧 UI。

由于新 UI 尚未经过实战检验,因此很可能仍然存在错误。如果您发现任何错误,请在 GitHub 上报告

自 beta 版以来,用户界面已更新以支持 UTF-8 指标和标签名称。

New UTF-8 UI

Remote Write 2.0

Remote-Write 2.0 在之前的协议版本上进行了迭代,增加了对许多新元素的原生支持,包括元数据、 exemplars、创建时间戳和原生直方图。它还使用字符串驻留来减少压缩和解压缩时的有效负载大小和 CPU 使用率。对于部分写入,它提供了更好的处理,以便在发生这种情况时向客户端提供更多详细信息。更多详细信息请参见 此处

UTF-8 支持

Prometheus 现在默认允许在指标和标签名称以及标签值中使用所有有效的 UTF-8 字符,这在 2.x 版本中也是如此。

用户需要确保他们的指标生产者配置为传递 UTF-8 名称,如果任何一方不支持 UTF-8,指标名称将使用传统的下划线替换方法进行转义。可以使用新的引号语法编写 PromQL 查询以检索 UTF-8 指标,或者用户可以手动指定 __name__ 标签名称。

目前只有 Go 客户端库已更新以支持 UTF-8,但对其他语言的支持将很快添加。

OTLP 支持

为了与 我们对 OpenTelemetry 的承诺保持一致,Prometheus 3.0 具有多项新功能,以提高与 OpenTelemetry 的互操作性。

OTLP 摄取

Prometheus 可以配置为 OTLP Metrics 协议的本机接收器,在 /api/v1/otlp/v1/metrics 端点上接收 OTLP 指标。

请参阅我们的 指南,了解将 OTLP 指标流量导入 Prometheus 的最佳实践。

UTF-8 规范化

借助 Prometheus 3.0,由于 UTF-8 支持,用户可以存储和查询 OpenTelemetry 指标,而无需对指标和标签名称进行烦人的更改,例如 将点更改为下划线

值得注意的是,这减少了用户和工具在 OpenTelemetry 语义约定或 SDK 中定义的内容与实际可查询内容之间差异方面的困惑

为了实现 OTLP 摄取,Prometheus 3.0 实验性地支持不同的转换策略。有关详细信息,请参阅 Prometheus 配置中的 otlp 部分

注意: 虽然 “NoUTF8EscapingWithSuffixes” 策略允许特殊字符,但它仍然会添加所需的后缀以获得最佳体验。请参阅 关于在 Prometheus 中启用无后缀的未来工作的提案

原生直方图

原生直方图是一种 Prometheus 指标类型,它为经典直方图提供了更高效率和更低成本的替代方案。原生直方图不必根据数据集选择(并可能需要更新)桶边界,而是具有基于指数增长的预设桶边界。

原生直方图仍处于实验阶段,尚未默认启用,可以通过传递 --enable-feature=native-histograms 来启用。原生直方图的某些方面,例如文本格式和访问器函数/运算符,仍在积极设计中。

重大更改

Prometheus 社区努力 在主要版本中不破坏现有功能。在新主要版本中,我们借此机会清理了一些长期存在但很小的问题。换句话说,Prometheus 3.0 包含一些重大更改。这包括对功能标志、配置文件、PromQL 和抓取协议的更改。

请阅读 迁移指南,以了解您的设置是否受到影响以及需要采取哪些措施。

性能

令人印象深刻的是,我们自 Prometheus 2.0 以来在社区中取得的成就。我们都喜欢数字,所以让我们庆祝我们在 TSDB 模式下为 CPU 和内存使用量所做的效率改进。在下面,您可以看到在具有 8 个 CPU 和 49 GB 可分配内存的节点上,3 个 Prometheus 版本之间的性能数字。

  • 2.0.0(7 年前)
  • 2.18.0(4 年前)
  • 3.0.0(现在)

Memory bytes

CPU seconds

更令人印象深刻的是,这些数字是使用我们的 prombench 宏基准测试 获得的,该测试使用相同的 PromQL 查询、配置和环境——突出了核心功能的向后兼容性和稳定性,即使是 3.0 也是如此。

下一步是什么

在 Prometheus 和生态系统中,我们仍然可以进行大量令人兴奋的功能和改进。以下是一个非详尽的列表,让您感到兴奋,并… 希望能激励您做出贡献并加入我们!

  • 新的、更具包容性的 治理
  • 更多的 OpenTelemetry 兼容性和功能
  • OpenMetrics 2.0,现在由 Prometheus 治理!
  • 原生直方图稳定性(以及自定义桶!)
  • 更多优化!
  • 更多 SDK 和工具中的 UTF-8 支持覆盖

立即试用!

您可以从我们的 官方二进制文件容器镜像 下载 Prometheus 3.0 进行试用。

如果您是从 Prometheus 2.x 升级,请查看迁移指南,以获取有关您需要进行的任何调整的更多信息。请注意,我们强烈建议在升级到 v3.0 之前升级到 v2.55。可以从 v3.0 回滚到 v2.55,但不能回滚到更早的版本。

与往常一样,我们欢迎来自社区的反馈和贡献!