宣布 Prometheus 3.0
2024年11月14日作者 Prometheus 团队
继最近在柏林 PromCon 上发布 Prometheus 3.0 beta 后,Prometheus 团队很高兴地宣布 Prometheus 3.0 版本正式发布!
这个最新版本标志着一个重要的里程碑,因为这是 7 年来的第一个主要版本。在这段时间里,Prometheus 取得了长足的进步,从一个早期采用者的项目发展成为云原生监控技术栈的标准组成部分。Prometheus 3.0 旨在延续这一旅程,在很大程度上保持与先前版本的稳定性和兼容性的同时,增加了一些令人兴奋的新功能。
完整的 3.0 版本在 beta 版的基础上增加了一些新功能,并引入了一些额外的破坏性变更,我们将在本文中对此进行描述。
新特性
以下是 beta 版本中发布的一些激动人心的变化,以及此后新增内容的摘要。
全新 UI
Prometheus 3.0 的亮点之一是默认启用的全新 UI。

该 UI 已经完全重写,界面更简洁,外观和感觉更现代化,并增加了新功能,如 PromLens 风格的树状视图。通过使用更现代的技术栈,未来的维护也将变得更加容易。
要了解更多关于新 UI 的信息,请阅读 Julius 在 PromLabs 博客上发表的详细文章。用户可以通过使用 old-ui 功能标志临时启用旧 UI。
由于新 UI 尚未经过实战检验,很有可能仍然存在漏洞。如果您发现任何问题,请在 GitHub 上报告。
自 beta 版本以来,用户界面已更新以支持 UTF-8 指标和标签名称。

远程写入 2.0
Remote-Write 2.0 在之前的协议版本上进行了迭代,增加了对元数据、范例、创建时间戳和原生直方图等一系列新元素的原生支持。它还使用字符串驻留来减少压缩和解压缩时的有效负载大小和 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”策略允许使用特殊字符,但为了获得最佳体验,它仍然会添加必需的后缀。关于未来在 Prometheus 中实现无后缀的工作,请参见相关提案。
原生直方图
原生直方图是一种 Prometheus 指标类型,它提供了一种比传统直方图更高效、成本更低的替代方案。原生直方图无需根据数据集选择(并可能需要更新)桶边界,而是基于指数增长预设了桶边界。
原生直方图仍处于实验阶段,尚未默认启用,可以通过传递 --enable-feature=native-histograms 来开启。原生直方图的某些方面,如文本格式和访问函数/操作符,仍在积极设计中。
破坏性变更
Prometheus 社区致力于在一个主要版本内不破坏现有功能。随着新的主要版本的发布,我们借此机会清理了一些虽小但长期存在的问题。换句话说,Prometheus 3.0 包含一些破坏性变更。这包括对功能标志、配置文件、PromQL 和抓取协议的更改。
请阅读迁移指南,以确定您的设置是否受到影响以及需要采取哪些措施。
性能
自 Prometheus 2.0 以来,我们在社区中取得的成就令人印象深刻。我们都喜欢数字,所以让我们来庆祝一下我们在 TSDB 模式下对 CPU 和内存使用效率的提升。下面您可以看到 3 个 Prometheus 版本在具有 8 核 CPU 和 49 GB 可分配内存的节点上的性能数据。
- 2.0.0 (7 年前)
- 2.18.0 (4 年前)
- 3.0.0 (现在)


更令人印象深刻的是,这些数据是通过我们的 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,但不能回滚到更早的版本。
一如既往,我们欢迎来自社区的反馈和贡献!