我目前正在运行 Prometheus + Thanos 堆栈来获取指标,它......好吧......但它非常耗内存。如果提交更昂贵的查询,而不是简单地花费更长的时间来处理它们,它也往往会失败并出现 OOM。
VictoriaMetrics 比 Prometheus 更节省内存,因此我想考虑将其换入。但我需要跨多个存储进行联合查询,并将回溯指标卸载到对象存储。目前,这两个任务都是由 Thanos Receive 处理,从 Prometheus sidecar 收集数据,将其输入 Thanos Store 并使用 Thanos Query 访问它。尚不清楚该模型是否能够很好地与 VictoriaMetrics 一起使用 - 如果 VM TSDB 与 Thanos Sidecar 兼容。还有 PromQL 方言问题需要考虑。
但是 VM 似乎不支持扇出联合查询或使用对象存储,所以我也不能直接用它来取代 Thanos。是否有一种合理、可维护的方式来集成VictoriaMetrics和Thanos,以便Thanos处理积压保留和扇出,但使用VictoriaMetrics代替Prometheus进行抓取、热数据查询、记录规则处理等?
如果没有,关于如何让 Prometheus 执行更昂贵的查询而不使用接近无限的 RAM 有什么建议吗?我来自 PostgreSQL,其中更昂贵的查询只会更慢,因为 RDBMS 执行引擎将使用临时文件和磁带排序以及各种其他执行策略来处理远远超出可用 RAM 的数据集。普罗米修斯...似乎只是需要更多 RAM。
是的,VictoriaMetrics 不支持历史数据的对象存储。但它在数据压缩方面非常有效,因此将所有内容存储在磁盘上可能会花费相同的钱,并且会提供更好的查询性能。在VM生态系统中不需要扇出查询。通常,Prometheus(或无状态抓取代理)用于抓取指标并将其传递到中央虚拟机集群。数据通常有30-60s左右的新鲜度,可以从中心集群立即查询,提供全局查询视图。