概述
目前主流的Prometheus长期存储及集群解决方案,包括Thanos、Cortex、VictoriaMetrics以及Grafana近期发布的Mimir,出现大一统趋势,其中以Thanos(receive模式)、Cortex、Mimir为代表的S3存储解决方案,架构、功能可以说基本一致,三者的集群结构如下:
Thanos receive模式架构
Cortex架构
Grafana Mimir架构
这些解决方案共同的特性包括:
- 支持较低成本的长期存储,支持配置数据保留时长
- 支持水平扩容
- 支持多租户
- 为来自不同prometheus的数据提供集群视图
- 高可用,可复制多份数据已应对设备宕机
仅从读写逻辑看,四种解决方案中又以VictoriaMetrics架构最为简单。本文将从读写性能、资源成本、维护成本三个角度,简单对比Thanos与VictoriaMetrics的差异与优劣。
读写性能对比
先来比对两者的读写架构:
在忽略ruler等组件的情况下,Thanos读写架构如下:
而VictoriaMetrics读写架构如下:
可以看出,由于引进了S3对象存储,Thanos组件相对较多,而VictoriaMetrics采用文件系统存储,读写架构更为简单。
写方面看,Thanos专为Prometheus打造,而VictoriaMetrics支持的数据来源则更为丰富,包括Promethues remote write、InfluxDB、OpenTSDB、json、csv等等。在以Prometheus+exporter为基础构建的监控系统中,VictoriaMetrics可使用自有的组件vmagent(vmagent · VictoriaMetrics)替代Prometheus抓取exporter并远程写入VictoriaMetrics,相关测试显示其较Prometheus性能更佳。
存储机制方面,两者相似。Thanos receive接收到数据后,首先存入内存中,然后每两小时刷新到磁盘上并上传至对象存储,本地磁盘保留的数据时长取决于配置。VictoriaMetrics vmstorage接收数据后首先缓存在内存中,然后以每秒1次的频率刷新到磁盘中。这也意味当节点意外宕机时(不配置复制因子的情况下),Thanos丢失的数据最多可达2小时,而VictoriaMetrics则最多为几秒钟。
读方面看,当读取近期数据时,看两者都从内存和本地磁盘中直接读取,效率应当相差无几。但当读取长期大量数据时,Thanos需要通过storegateway从远程对象存储拉取数据,而VictoriaMetrics仍然是从本地磁盘拉取数据,因此VictoriaMetrics占优。
资源成本对比
Thanos采用与Prometheus完全一致的block形式存储,而VictoriaMetrics的存储形式压缩率更高。根据官方的测试结果https://valyala.medium.com/prometheus-vs-victoriametrics-benchmark-on-node-exporter-metrics-4ca29c75590fhttps://valyala.medium.com/prometheus-vs-victoriametrics-benchmark-on-node-exporter-metrics-4ca29c75590f
从计算资源看,两者所需的CPU资源几乎一样,Victoria所需的内存资源为Thanos/Cortex/Prometheus的1/5。
从存储资源看,Thanos所需的本地存储空间很少,大量的数据保存在成本较低的对象存储上,而VictoriaMetrics全部使用本地存储存储,尽管压缩率是Thanos的约7倍,但对于长期存储,Thanos的存储成本仍然占优。
从流量资源看,Thanos的组件receive、storegateway与对象存储之间会产生大量的网络流量,而VictoriaMetrics则多为内网流量,因此VictoriaMetrics的流量成本占优。
维护成本对比
从部署角度看,Thanos组件更多,组件间调用关系更为复杂,部署难度较VictoriaMetrics更高。两者均可以相对方便地部署于k8s中。
从扩容角度看,两者均支持不停机水平扩容,扩容难度相当。
从迁移角度看,Thanos的数据多存储在外部对象存储中,因此迁移难度较低。而VictoriaMetrics需要借助vmbackup、vmrestore工具进行停机迁移,迁移难度较大。
总结
下表为两个解决方案的对比总结:
Thanos | VictoriaMetrics | ||
读写性能 | 读 | - | ↑ |
写 | - | ↑ | |
资源成本 | 计算资源成本 | - | ↑ |
存储类型 | 对象存储 | 仅本地磁盘 | |
存储资源成本 | ↑ | - | |
网络流量成本 | - | ↑ | |
部署维护 | 部署 | - | ↑ |
扩容 | - | - | |
迁移 | ↑ | - |
以上表格中符号"↑"表示性能更优/成本更低/难度更低。