Prometheus 的本地存储仅限于单个节点的可扩展性和可靠性。Prometheus 提供了一系列接口,允许与远程存储系统集成,而不是试图在 Prometheus 本身解决集群存储问题。
Prometheus 可通过三种方式与远程存储系统集成:
Prometheus 可以将采集到的样本以标准格式写入远程 URL。
Prometheus 可以从其他 Prometheus 服务器接收标准格式的样本。
Prometheus 可以从远程 URL 读取(返回)标准化格式的样本数据。
读写协议都通过 HTTP 使用快速压缩协议缓冲区编码,这些协议尚未被视为稳定的 API,将来可能会改为通过 HTTP/2 使用 gRPC,届时 Prometheus 和远程存储之间的所有跳转都可以安全地假定为支持 HTTP/2。
可通过设置 --web.enable-remote-write-receiver 命令行标志启用内置远程写接收器。启用后,远程写接收器地址为 /api/v1/write。
请注意,在读取路径上,Prometheus 只从远端获取一组标签选择器和时间范围的原始序列数据。对原始数据的所有 PromQL 评估仍在 Prometheus 本身进行。这意味着远程读取查询有一定的可扩展性限制,因为所有必要的数据都需要先加载到查询的 Prometheus 服务器中,然后在 Prometheus 服务器中进行处理。如下图:
不过,支持完全分布式的 PromQL 评估(即在远程服务中执行 PromQL,然后将执行结果返回到 Prometheus 服务,Prometheus 服务汇总结果输出给用户)暂时不支持。