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

关于 Prometheus 2.43 字符串标签(String Labels)优化的常见问题解答

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

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

什么是 stringlabels 版本?

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

为什么不使用可以切换的功能标志(Feature Flag)?

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

这些优化何时会正式发布?

这些优化将在即将发布的 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 客户端行为变得更加容易。

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