跳到主要内容

存储

Prometheus 容量规划 容量规划除了上边说的内存,还有磁盘存储规划,这和你的 Prometheus 的架构方案有关。

如果是单机Prometheus,计算本地磁盘使用量。 如果是 Remote-Write,和已有的 Tsdb 共用即可。 如果是 Thanos 方案,本地磁盘可以忽略(2H),计算对象存储的大小就行。

Prometheus 每2小时将已缓冲在内存中的数据压缩到磁盘上的块中。包括Chunks、Indexes、 Tombstones、Metadata,这些占用了一部分存储空间。一般情况下,Prometheus中存储的每一个样 本大概占用1-2字节大小(1.7Byte)。可以通过Promql来查看每个样本平均占用多少空间:

rate(prometheus_tsdb_compaction_chunk_size_bytes_sum[1h])/
rate (prometheus_tsdb_ compaction_chunk_samples_sum[1h])
{instance="0.0.0.0:8890",job="prometheus"} 1.252747585939941
如果大致估算本地磁盘大小,可以通过以下公式:
磁盘大小=保留时间*每秒获取样本数*样本大小

保留时间(retention_time_seconds)和样本大小(bytes_per_sample)不变的情况下,如果想减少本地磁 盘的容量需求,只能通过减少每秒获取样本数(ingested_samples_per_second)的方式。

查看当前每秒获取的样本数:
rate(prometheus_tsdb_head_samples_appended_total[1h])

有两种手段,一是减少时间序列的数量,二是增加采集样本的时间间隔。考虑到 Prometheus 会对时间 序列进行压缩,因此减少时间序列的数量效果更明显。

举例说明: 采集频率 30s,机器数量1000,Metric种类6000,1000600026024 约 200 亿,30G 左右磁盘。

只采集需要的指标,如 match[], 或者统计下最常使用的指标,性能最差的指标。 以上磁盘容量并没有把 wal 文件算进去,wal 文件(Raw Data)在 Prometheus 官方文档中说明至少会保

存3个 Write-Ahead Log Files,每一个最大为128M(实际运行发现数量会更多)。 因为我们使用了 Thanos 的方案,所以本地磁盘只保留2H 热数据。Wal 每2小时生成一份Block文件,

Block文件每2小时上传对象存储,本地磁盘基本没有压力。 关于 Prometheus 存储机制,可以看这篇。