1、本地存储
1.1 磁盘布局
- 摄取的样本分为两小时的块。每个两小时的块包含一个目录,其中包含一个或多个块文件,其中包含该时间窗口的所有时间序列样本,以及元数据文件和索引文件(将度量标准名称和标签索引到块文件中的时间序列) )。通过API删除系列时,删除记录存储在单独的逻辑删除文件中(而不是立即从块文件中删除数据)。
- 当前传入样本的块保存在内存中,但尚未完全保留。通过预写日志(WAL)防止崩溃,可以在崩溃后重新启动Prometheus服务器时重放。预写日志文件以128MB段存储在wal目录中。这些文件包含尚未压缩的原始数据,因此它们比常规块文件大得多。 Prometheus将保留至少3个预写日志文件,但是高流量服务器可能会看到三个以上的WAL文件,因为它需要保留至少两个小时的原始数据。
1.2 目录结构
.
├── 01EEN596GBAWFBC9SA5R9XKGNM
│ ├── chunks
│ │ └── 000001
│ ├── index
│ ├── meta.json
│ └── tombstones
├── lock
└── wal
├── 00000000
├── 00000001
├── 00000002
└── 00000003
1.3 存储运营
- —storage.tsdb.path:这决定了Prometheus写入数据库的位置。 默认为data/。
- —storage.tsdb.retention.time:这决定了何时删除旧数据。 默认为15d。 如果此标志设置为默认值以外的任何值,则覆盖storage.tsdb.retention。
- —storage.tsdb.retention.size:[EXPERIMENTAL]这确定了存储块可以使用的最大字节数(请注意,这不包括WAL大小,这可能很大)。 最早的数据将被删除。 默认为0或禁用。 此标志是实验性的,可以在将来的版本中进行更改。 支持的单位:KB,MB,GB,PB。 例如:“512MB”
- —storage.tsdb.retention:不推荐使用此标志,而使用storage.tsdb.retention.time。
1.4 存储预估
每个样本仅使用大约1-2个字节。 因此,要规划Prometheus服务器的容量,您可以使用粗略的公式
needed_disk_space = retention_time_seconds * ingested_samples_per_second * bytes_per_sample
如果您的本地存储因任何原因而损坏,最好的办法是关闭Prometheus并删除整个存储目录。
1.5 prometheus远程存储/读取
prometheus以两种方式与远程存储系统集成:
Prometheus可以以标准格式将其提取的样本写入远程URL。 Prometheus可以以标准格式从远程URL读取(返回)样本数据。
读写协议都使用基于HTTP的snappy压缩协议缓冲区编码。这些协议尚未被视为稳定的API,并且可能会在将来更改为使用gRPC over HTTP/2,此时可以安全地假设Prometheus和远程存储之间的所有跃点都支持HTTP/2。
有关在Prometheus中配置远程存储集成的详细信息,请参阅Prometheus配置文档的远程写入和远程读取部分。