嘉宾 | 霍秉杰 整理 | 西京刀客
出品 | CSDN云原生
Prometheus作为云原生时代崛起的标志性项目,已经成为可观测领域的事实标准。Prometheus是单实例不可扩展的,那么如果用户需要采集更多的数据并且保存更长时间该选择怎样的长期存储方案呢?
2022年8月9日,在CSDN云原生系列在线峰会第15期“Prometheus峰会”上,青云科技可观测与函数计算负责⼈霍秉杰分享了《Prometheus Long-Term Storage:海纳百川,有容乃大》。
云原生时代崛起的Prometheus已经在可观测领域得到了广泛应用,其影响力远远超出了云原生的范畴,具有两个显著特点。
单实例,不可扩展
Prometheus的作者及社区核心开发者都秉承一个理念:Prometheus只聚焦核心的功能,扩展性的功能留给社区解决,所以Prometheus自诞生至今都是单实例不可扩展的。
这对于很多从大数据时代走过来的工程师而言有点不可思议,大数据领域的很多开源项目比如Elasticsearch、HBase、Cassandra等无一不是多节点多角色的设计。
Prometheus的核心开发者曾这样解释,Prometheus结合Go语言的特性和优势,使得Prometheus能够以更小的代价抓取并存储更多数据,而Elasticsearch或Cassandra等Java实现的大数据项目处理同样的数据量会消耗更多的资源。也就是说,单实例、不可扩展的Prometheus已强大到可以满足大部分用户的需求。
Pull模式抓取数据
Prometheus倡导用Pull模式获取数据,即Prometheus主动地去数据源拉取数据。对于不便于Pull的数据源,Prometheus提供了PushGateway进行处理,但PushGateway在部分应用场景上存在限制。
尽管单实例的Prometheus已经足够强大,但还是存在部分需求是其无法满足的,如跨集群聚合、更长时间的存储等。为了扩展Prometheus,社区给出了多种方案。
在Prometheus长期存储出现之前,用户若需要跨集群聚合计算数据时,社区提供Federation方式实现。
在多个Prometheus实例的上一层有一个Global Prometheus,它负责在各个实例中抓取数据并进行计算,以此解决跨集群聚合计算的问题。但如果各个集群的数据量较大,单实例的GlobalPrometheus也会遇到瓶颈。
2017年,Prometheus加⼊Rem