方案 1:Prometheus + Remote-Write 到 vmstorage(集中存储)

架构

​ • 各集群都部署 Prometheus,配置 remote_write 将数据写入集中存储(vmstorage)。

​ • Grafana 通过 vmstorage 查询数据。

优点

集中存储,数据统一管理

​ • vmstorage 作为集中存储,所有数据存放在一起,方便管理、扩展和备份。

​ • Grafana 只需要连接 vmstorage,而不需要管理多个 Prometheus 数据源。

支持长时间存储和查询优化

​ • Prometheus 本地存储受限于磁盘大小和保留策略,而 vmstorage 可以更长时间存储数据。

​ • vmstorage(VictoriaMetrics)在查询大规模数据时更优化,查询性能比 Prometheus TSDB 更好。

可扩展性强

​ • vmstorage 可以水平扩展(通过 vminsert + vmselect + vmstorage 分层架构),适用于大规模监控数据。

缺点

Remote-Write 可能带来写入压力

​ • Prometheus 需要将数据批量写入 vmstorage,如果网络抖动或者写入速率过高,可能导致数据丢失或积压。

​ • 需要调优 remote_write 缓冲区 (queue_config) 以适应高吞吐。

集中存储单点风险

​ • vmstorage 作为单点,可能成为瓶颈。如果 vmstorage 挂了,所有集群的历史数据都无法访问。

​ • 需要高可用方案,例如多副本存储、备份策略。

跨区域网络开销

​ • 如果集群分布在不同区域,跨区域写入 vmstorage 可能有延迟和带宽成本。

方案 2:各集群 Prometheus 本地存储,Grafana 统一查询

架构

​ • 各个集群独立运行 Prometheus,并本地存储数据。

​ • Grafana 配置多个数据源,每个 Prometheus 作为独立的数据源。

优点

各集群完全独立,降低单点风险

​ • 每个集群的 Prometheus 自己存储数据,即使某个 Prometheus 挂了,其他集群不受影响。

​ • 网络问题不会影响其他集群的数据存储。

本地查询更快

​ • Prometheus 本地查询数据,比远程查询更快(避免 remote_read 可能带来的延迟)。

​ • 适用于数据量较小、查询需求不复杂的环境。

网络流量更少

​ • 监控数据不会跨集群传输,避免了 remote_write 带来的带宽消耗,适合跨数据中心场景。

缺点

存储管理分散

​ • 每个 Prometheus 自己存储数据,无法进行全局去重或存储优化。

​ • 需要为每个集群分配足够的磁盘空间,否则可能因为存储不足丢失数据。

查询复杂度增加

​ • Grafana 需要配置多个数据源,每次查询可能需要手动选择不同的数据源,或者使用 prometheus federation 进行部分聚合。

​ • 例如,想要跨多个集群计算某个服务的 QPS 之和时,需要在 Grafana 进行多个 Prometheus 查询合并。

数据保留受限

​ • Prometheus 本地存储数据通常只保留 15 天~30 天(受磁盘空间影响),不适合长期历史数据分析。

瓶颈对比

方案存储瓶颈查询瓶颈网络开销维护难度可用性
方案 1:remote-write 到 vmstoragevmstorage 可能成为写入瓶颈查询时可能受集中存储压力影响,但优化后较好Remote-Write 可能带来带宽和延迟需要集中管理 vmstorage需要 vmstorage 高可用,否则影响全局数据
方案 2:Prometheus 本地存储各个 Prometheus 需要管理本地存储空间Grafana 查询多个数据源时可能较慢无跨集群网络消耗需要管理多个 Prometheus 数据源各个集群独立,单点故障影响较小

适用场景

​ • 如果你希望全局数据统一存储,方便管理、长期存储历史数据,并优化查询性能,建议选择 方案 1(remote-write 到 vmstorage)

​ • 如果你的集群相对独立,想要避免集中存储的单点问题,并且可以接受 Grafana 查询多个数据源的复杂性,建议选择 方案 2(本地存储)