如何控制 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 set | 10d | 保留 10 天 |
不设置 | 20d | 10d | 保留 20 天 |
1TB | 不设置 | 不设置 | 保留 1TB 大小,时间不限制 |
1TB | 20d | 不设置 | 保留 1TB 大小或 20 天,以先到为准 |
1TB | 20d | 10d | 保留 1TB 大小或 20 天 ,以先到为准 |
如表格所示,--storage.tsdb.retention.time
覆盖了已弃用的 --storage.tsdb.retention
,并且基于时间和大小的保留可以同时生效。
我还想说明一个常见的混淆是 Prometheus 存储保留期不限于 15 天。这只是多年前选择的默认设置,完全可以将其设置得更高。