Prometheus是CNCF基金会管理的一个开源监控项目,因为其良好的架构设计和完善的生态,迅速成为了监控领域事实上的标准,尤为是在云原生领域。数据库
随着深刻地了解Prometheus,你会发现一些很是好的功能:服务器
对于一家小型单位,Prometheus足够了。几乎不须要任何的开发,就足以应对全部监控需求。架构
咱们都知道Prometheus,自身的时序数据库TSDB是一个单机的数据库,不支持分布式是其天生的劣势。当你的 metrics 数量足够多的时候,单机Prometheus就显得捉襟见肘。您的Prometheus服务器开始崩溃,大多时候是内存问题。Prometheus中的内存使用量与存储的时间序列数量成正比,而且随着时间序列数量的增长,Prometheus会OOM。具备数百万个指标的Prometheus可使用超过100GB的RAM,不少时候咱们受限制于一些主机自己的大小,咱们没法不断的经过纵向调整机器大小来解决这个问题。并发
所以解决Prometheus的扩展性,是打造企业分布式监控平台的关键。运维
官方的解决方案是集群联邦,主要提供了分层联邦和跨服务联邦。分布式
分层联邦容许 Prometheus 可以扩展到十几个数据中心和上百万的节点。在此场景下,联邦拓扑相似一个树形拓扑结构,上层的 Prometheus 服务器从大量的下层 Prometheus 服务器中收集和汇聚的时序数据。工具
在跨服务联邦中,一个服务的 Prometheus 服务器被配置来提取来自其余服务的 Prometheus 服务器的指定的数据,以便在一个 Prometheus 服务器中对两个数据集启用告警和查询。spa
这两种联邦,其实有很大的问题,本质上Prometheus的单机能力依旧没有获得解决。架构设计
拆分永远是解决问题的一个好思路。尤为是当你的场景是,不须要一个全局的监控视图。设计
咱们能够根据环境(test,uat, prod)或是业务类型(基础设施,中间件,业务),甚至是根据部门类型来拆分。
固然能够经过grafana配置不一样的数据源,给使用方营造一种总体的假象。
可是这种方案,会带来不少问题:
Prometheus社区也意识到了一样的问题,因而提供了远程读写两个接口,让你们可使用一些社区的时序数据库方案,来扩展prometheus。
当前,有几个提供长期存储(LTS)的开源项目,而这些社区项目则领先于其余项目:Cortex,Thanos或M3。
固然这些项目实现的方式是不一样的,均有不一样的优点和劣势,须要你们根据本身单位实际的场景需求来选择。
诸如Thanos,最终的储存是S3等对象存储,总体架构比较复杂。
M3db社区活跃度不够,文档比较少,可是M3db相比其余几个,是典型的时序数据库。
Influxdb集群版本没有开源。
Victoria 数据是没有副本的。
我曾经在生产环境中,使用过Clickhouse做为长期存储。该解决方案存在的问题是,Clickhouse并发查询能力比较低,致使查询的时候慢。固然写入却是没有什么大的问题。
这种架构的好处是:
尤为当Prometheus部署到kubernetes当中,而且咱们使用了Prometheus的kubernetes sd 服务发现时,当咱们集群变得很是大的时候,单台的Prometheus采集能力也成为一个瓶颈。此时,咱们可使用hash mod, 对采集任务进行分片。
本文是利用Prometheus 打造企业分布式监控平台系列中的第一篇文章。主要讲了Prometheus的可扩展性上的一些解决方案。其实没有百分百完美的方案,你们须要根据本身metrics的数量来选择最合适本身的方案。