如果我们现在有多个集群,并希望他们的监控数据存储到一起,可以进行聚合查询,用上述部署方案显然是不够的,因为上述方案中的Prometheus只能识别出本集群内的被监控目标,即服务发现无法跨集群。另外就是网络限制,多个集群之间的网络有可能是不通的,这就使得即使在某个集群中知道另一个集群的target地址,也没法去抓取数据。总结多集群的特点主要有:
服务发现隔离
网络隔离
那只用Prometheus能解决吗?答案其实是能,用联邦。
Prometheus支持拉取其他Prometheus的数据到本地,称为联邦机制。这样我们就可以在每个集群内部署一个Prometheus,再在他们之上部署一个Top Prometheus,用于拉取各个集群内部的Prometheus数据进行汇总。
联邦的方案其实也是社区所认可的,在集群规模普遍较小,整体数据量不大的情况下,联邦的方案部署简单,理解成本低,没有其他组件的引入,是一个很不错的选择。
但是联邦也有其问题。由于所有数据最终都由Top Prometheus进行存储,当总数据量较大的时候,Top Prometheus的压力将增大,甚至难抗重负,另外,每个集群中的Prometheus实际上也会保存数据(Prometheus2.x 不支持关闭本地存储),所以实际上出现了数据无意义冗余。总结而言,联邦的问题主要是。
Top Prometheus压力大
数据有无意义冗余
4.用Thanos实现多集群监控 Thanos简介Thanos 是一款开源的Prometheus 高可用解决方案,其支持从多个Prometheus中查询数据并进行汇总和去重,并支持将Prometheus本地数据传送到云上对象存储进行长期存储。官方架构图如下:
Query: query代理Prometheus作为查询入口,他会去所有Prometheus,Store, 以及 Ruler查询数据,汇总并去重。
Sidecar:将数据上传到对象存储,也负责接收Thanos query的查询请求。
Ruler:进行数据的预聚合及告警。
Store:负责从对象存储中查询数据。
简化版本图:
使用Thanos来替代联邦方案,我们只需要将上图中的Prometheus和Thanos sidecar部署到Kubernetes集群中,将Thano query等组件部署在原来Top Prometheus的位置即可。
使用Thanos相比于之前使用联邦,拥有一些较为明显的优势
由于数据不再存储在单个Prometheus中,所以整体能承载的数据规模比联邦大。
数据不再有不必要的冗余。
由于Thanos有去重能力,实际上可以每个集群中部署两个Prometheus来做数据多副本。
可以将数据存储到对象存储中,相比存储在本地,能支持更长久的存储。
5.总结我们首先介绍了Prometheus的基本原理,并介绍了最为常用的使用Prometheus监控单一小集群的方案。
随后,针对多集群场景,我们还谈了联邦方式与Thanos方式各有什么优缺点。
后续我应该还会分享下三篇内容
1.Prometheus具体的配置说明;
2.Prometheus-operator部署prometheus集群;
3.Grafana面板展示以及PromQL语法查询;