Prometheus 2.43 字符串标签优化常见问题

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 客户端行为变得更加容易。

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