1、本地存储

1.1 磁盘布局

  • 摄取的样本分为两小时的块。每个两小时的块包含一个目录,其中包含一个或多个块文件,其中包含该时间窗口的所有时间序列样本,以及元数据文件和索引文件(将度量标准名称和标签索引到块文件中的时间序列) )。通过API删除系列时,删除记录存储在单独的逻辑删除文件中(而不是立即从块文件中删除数据)。
  • 当前传入样本的块保存在内存中,但尚未完全保留。通过预写日志(WAL)防止崩溃,可以在崩溃后重新启动Prometheus服务器时重放。预写日志文件以128MB段存储在wal目录中。这些文件包含尚未压缩的原始数据,因此它们比常规块文件大得多。 Prometheus将保留至少3个预写日志文件,但是高流量服务器可能会看到三个以上的WAL文件,因为它需要保留至少两个小时的原始数据。

1.2 目录结构

  1. .
  2. ├── 01EEN596GBAWFBC9SA5R9XKGNM
  3. ├── chunks
  4. └── 000001
  5. ├── index
  6. ├── meta.json
  7. └── tombstones
  8. ├── lock
  9. └── wal
  10. ├── 00000000
  11. ├── 00000001
  12. ├── 00000002
  13. └── 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服务器的容量,您可以使用粗略的公式

  1. needed_disk_space = retention_time_seconds * ingested_samples_per_second * bytes_per_sample

如果您的本地存储因任何原因而损坏,最好的办法是关闭Prometheus并删除整个存储目录。

1.5 prometheus远程存储/读取

prometheus以两种方式与远程存储系统集成:
Prometheus可以以标准格式将其提取的样本写入远程URL。 Prometheus可以以标准格式从远程URL读取(返回)样本数据。
prometheus存储参数 - 图1
读写协议都使用基于HTTP的snappy压缩协议缓冲区编码。这些协议尚未被视为稳定的API,并且可能会在将来更改为使用gRPC over HTTP/2,此时可以安全地假设Prometheus和远程存储之间的所有跃点都支持HTTP/2。
有关在Prometheus中配置远程存储集成的详细信息,请参阅Prometheus配置文档的远程写入远程读取部分。