请参与 Prometheus 用户调研(2026 年 3 月版) ,帮助社区确定未来开发工作的优先级!

发布 Prometheus 3.0

2024 年 11 月 14 日作者 Prometheus 团队

继最近在柏林 PromCon 大会上发布 Prometheus 3.0 测试版之后,Prometheus 团队很高兴地宣布 Prometheus 3.0 版本现已正式发布!

这是自 7 年来的首次重大版本更新,标志着一个重要的里程碑。在这段时间里,Prometheus 取得了长足的进步,从一个面向早期采用者的项目,演变为云原生监控栈中的标准组件。Prometheus 3.0 旨在延续这一历程,在保持稳定性和与旧版本兼容性的同时,加入了一些令人兴奋的新功能。

正式发布的 3.0 版本在测试版的基础上新增了一些功能,并引入了一些我们将在本文中详细说明的破坏性变更。

新特性

以下是测试版中发布的部分令人兴奋的改进汇总,以及测试版之后新增的内容:

全新的用户界面

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

New UI query page

新 UI 经过全面重写,减少了视觉杂乱,外观更具现代化,并引入了诸如 PromLens 风格的树状视图等新功能,同时采用更现代的技术栈,使未来的维护工作更加轻松。

有关新 UI 的更多信息,请查阅 Julius 在 PromLabs 博客上撰写的详细文章 。用户可以通过 old-ui 功能标志暂时启用旧版 UI。

由于新 UI 尚未经过大规模实战检验,仍有可能存在 Bug。如果您发现了任何问题,请在 GitHub 上报告 

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

New UTF-8 UI

远程写入 2.0

Remote-Write 2.0 在之前的协议版本基础上进行了迭代,增加了对元数据、Exemplars(示例)、创建时间戳和原生直方图等一系列新元素的原生支持。它还使用字符串驻留技术(string interning)来减小有效负载大小,并降低压缩与解压缩时的 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 指标协议的原生接收端,在 /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”策略允许使用特殊字符,但为了获得最佳体验,它仍然会添加必要的后缀。请参阅关于未来实现无后缀支持的提案 

原生直方图

原生直方图(Native Histograms)是一种 Prometheus 指标类型,它提供了比经典直方图更高效率、更低成本的替代方案。原生直方图无需根据数据集手动选择(且可能需要后续更新)桶边界,而是采用基于指数增长的预设桶边界。

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

破坏性变更

Prometheus 社区努力做到在大版本发布中不破坏现有功能。借此次重大版本发布之机,我们清理了一些长期存在的小问题。换句话说,Prometheus 3.0 包含了一些破坏性变更,涉及功能标志、配置文件、PromQL 和抓取协议。

请务必阅读迁移指南,了解您的环境是否受到影响以及应采取的措施。

性能

回顾 Prometheus 2.0 以来的社区成就令人印象深刻。我们都喜欢数据,所以让我们来庆祝一下在 TSDB 模式下 CPU 和内存使用率方面的效率改进。下图展示了在拥有 8 个 CPU 核心和 49GB 可分配内存的节点上,三个 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 升级,请查阅迁移指南,了解需要做的调整。请注意,我们强烈建议先升级到 v2.55 版本,然后再升级到 v3.0。从 v3.0 回滚到 v2.55 是可行的,但不支持回滚到更早的版本。

一如既往,我们欢迎社区提供反馈和贡献!