关于 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 客户端的行为更加容易。
您可以在完整的更新日志 中了解更多关于功能和错误修复的信息。