继最近在柏林 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 和内存使用所做的效率改进。下面你可以看到在具有 8 个 CPU 和 49 GB 可分配内存的节点上,3 个 Prometheus 版本之间的性能数字。
- 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,但不能回滚到更早的版本。
与往常一样,我们欢迎来自社区的反馈和贡献!