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