关于 Prometheus 2.43 字符串标签优化 FAQ

2023 年 3 月 21 日作者 Julien Pivotto (@roidelapluie)

Prometheus 2.43 已发布,带来了令人兴奋的新功能和增强。其中一项重要的改进是 stringlabels 版本,它使用了新的标签数据结构。这篇博文将回答有关 2.43 版本和 stringlabels 优化的常见问题。

什么是 stringlabels 版本?

stringlabels 版本是 Prometheus 2.43 的一个版本,它使用了新的标签数据结构。它将所有标签/值存储在单个字符串中,从而减小了堆大小并在大多数情况下提高了速度。这些优化没有包含在默认二进制文件中,需要使用 Go 标签 stringlabels 编译 Prometheus。

为什么不使用我们可以切换的功能标志?

我们考虑过使用功能标志,但它会带来不值得的内存开销。因此,我们决定为有兴趣在生产环境中测试和衡量收益的用户提供一个单独的版本,其中包含这些优化。

这些优化何时可以普遍获得?

这些优化将在即将发布的 Prometheus 2.44 版本中默认提供。

如何获取 2.43 版本?

Prometheus 2.43 版本可在官方 Prometheus GitHub 发布页面上找到,用户可以直接从那里下载二进制文件。此外,还提供 Docker 镜像供偏好使用容器的用户选择。

stringlabels 优化未包含在这些默认二进制文件中。要使用此优化,用户需要下载 2.43.0+stringlabels 版本  二进制文件或 标记为 v2.43.0-stringlabels 的 Docker 镜像 

为什么发布版本是 v2.43.0+stringlabels 而 Docker 标签是 v2.43.0-stringlabels

在语义化版本控制中,加号 (+) 用于表示构建元数据。因此,带有 stringlabels 优化的 Prometheus 2.43 版本命名为 2.43.0+stringlabels,以表明它包含实验性的 stringlabels 功能。然而,Docker 标签不允许在其名称中使用加号。因此,加号被替换为连字符 (-),使 Docker 标签为 v2.43.0-stringlabels。这使得 Docker 标签能够通过下游项目(如 Prometheus Operator)的语义化版本检查。

Prometheus 2.43 版本还有哪些其他值得注意的功能?

除了 stringlabels 优化之外,Prometheus 2.43 版本还带来了多项新功能和增强。一些重要的添加包括:

  • 我们增加了对 scrape_config_files 的支持,以便从不同文件中包含抓取配置。这使得管理和组织配置更加容易。
  • HTTP 客户端现在包含两个新的配置选项:no_proxy 用于排除代理请求中的 URL,proxy_from_environment 用于从环境变量读取代理。这些功能使得在不同环境中更容易管理 HTTP 客户端的行为。

您可以在 完整的变更日志  中了解更多关于功能和错误修复的信息。