本文档采用自动化机器翻译技术翻译。 尽管我们力求提供准确的译文,但不对翻译内容的完整性、准确性或可靠性作出任何保证。 若出现任何内容不一致情况,请以原始 英文 版本为准,且原始英文版本为权威文本。

调试高内存使用

在 Prometheus 中,每个时间序列通过其 指标名称 和可选的键值对 标签,唯一标识。

这些标签允许过滤和聚合时间序列数据,但它们也会增加 Prometheus 收集的数据量。

每个时间序列都有一组定义的标签,Prometheus 为所有唯一的标签组合生成一个新的时间序列。如果一个指标附加了两个标签,则会为该指标生成两个时间序列。更改任何标签值,包括添加或删除标签,将创建一个新的时间序列。

Prometheus 被优化为存储基于系列的索引数据。它被设计用于相对一致数量的时间序列,以及需要从导出器中收集的相对大量样本。

相反,Prometheus 并未针对快速变化的时间序列数量进行优化。因此,当监控安装在创建和销毁许多资源的集群上时,尤其是在多租户集群上,可能会发生大量内存使用的突发情况。

减少内存突发

为了减少内存消耗,Prometheus 可以配置为存储更少的时间序列,通过抓取更少的指标或通过将更少的标签附加到时间序列。要查看哪些系列使用了最多的内存,可以在 Prometheus UI 中检查 TSDB(时间序列数据库)状态页面。

分布式 Prometheus 解决方案,如 ThanosCortex,使用一种替代架构,其中部署多个小型 Prometheus 实例。在 Thanos 的情况下,每个 Prometheus 的指标被聚合到共同的 Thanos 部署中,然后这些指标被导出到持久存储中,例如 S3。这种更强大的架构避免了给任何单个 Prometheus 实例施加过多的时间序列负担,同时也保留了在全球范围内查询指标的能力。