如何控制 Prometheus 保留多少历史记录?

Prometheus 将时间序列及其样本存储在磁盘上。鉴于磁盘空间是一种有限资源,我们希望对 Prometheus 使用的磁盘空间进行一些限制。在以前的版本中,使用 --storage.tsdb.retention 参数即可完成配置。这个参数指定 Prometheus 将保持可用的时间范围。这是最低要求,因此如果其中一些仍在保留窗口内,它将保留整个块。如果您知道每秒样本的摄取率,那么您可以将其乘以每个样本的字节数(1.5ish,为了安全起见为 2)和保留时间,以了解将使用多少磁盘空间。

从 Prometheus 2.7 和 2.8 开始,retention 将使用新的参数。 2.7 引入了基于大小的保留选项 --storage.tsdb.retention.size,即指定块使用的最大磁盘空间量。这仍然是一个理想的指标,因为它还不包括 WAL 占用的空间或通过压缩填充的块。为了安全起见,为 WAL 留出空间和一个最大大小的块(这是保留时间的 10% 和一个月中较小的一个)。

所有这些标志如何相互作用?这种行为在 2.8 中变得更加明显。共有三个标志:--storage.tsdb.retention.size--storage.tsdb.retention.time--storage.tsdb.retention。 `

–storage.tsdb.retention已弃用,由–storage.tsdb.retention.time`取代。下表总结了它们叠加到一起时是如何工作的:

--storage.tsdb. retention.size--storage.tsdb. retention.time--storage.tsdb. retention结果
不设置不设置不设置默认保留 15 天
不设置20d不设置保留 20 天
不设置Not set10d保留 10 天
不设置20d10d保留 20 天
1TB不设置不设置保留 1TB 大小,时间不限制
1TB20d不设置保留 1TB 大小或 20 天,以先到为准
1TB20d10d保留 1TB 大小或   20 天 ,以先到为准

如表格所示,--storage.tsdb.retention.time 覆盖了已弃用的 --storage.tsdb.retention,并且基于时间和大小的保留可以同时生效。 我还想说明一个常见的混淆是 Prometheus 存储保留期不限于 15 天。这只是多年前选择的默认设置,完全可以将其设置得更高。