利用Prometheus 打造企业分布式监控平台(1)--扩展性

Screen-Shot-2019-03-20-at-8.07.19-AM.png

Prometheus是CNCF基金会管理的一个开源监控项目,因为其良好的架构设计和完善的生态,迅速成为了监控领域事实上的标准,尤为是在云原生领域。数据库

随着深刻地了解Prometheus,你会发现一些很是好的功能:服务器

  • 服务发现使配置更加容易。Prometheus支持consul,etcd,kubernetes以及各家公有云厂商自动发现。对于监控目标动态发现,这点特别契合Cloud时代,应用动态扩缩的特色。咱们没法想象,在Cloud时代,须要运维不断更改配置。
  • 开源社区创建了数百个exporter。基本上涵盖了全部基础设施和主流中间件。
  • 工具库可从您的应用程序获取自定义指标。基本上主流开发语言都有对应的工具库。
  • 它是CNCF旗下的OSS,是继Kubernetes以后的第二个毕业项目。Kubernetes已经与Promethues深度结合,并在其全部服务中公开了Prometheus指标。
  • Pushgateway,Alermanager等组件,基本上涵盖了一个完整的监控生命周期。

01_Initial_Prometheus_setup.png

对于一家小型单位,Prometheus足够了。几乎不须要任何的开发,就足以应对全部监控需求。架构

咱们都知道Prometheus,自身的时序数据库TSDB是一个单机的数据库,不支持分布式是其天生的劣势。当你的 metrics 数量足够多的时候,单机Prometheus就显得捉襟见肘。您的Prometheus服务器开始崩溃,大多时候是内存问题。Prometheus中的内存使用量与存储的时间序列数量成正比,而且随着时间序列数量的增长,Prometheus会OOM。具备数百万个指标的Prometheus可使用超过100GB的RAM,不少时候咱们受限制于一些主机自己的大小,咱们没法不断的经过纵向调整机器大小来解决这个问题。并发

所以解决Prometheus的扩展性,是打造企业分布式监控平台的关键。运维

如何解决Prometheus的扩展性

联邦

官方的解决方案是集群联邦,主要提供了分层联邦和跨服务联邦。分布式

分层联邦

分层联邦容许 Prometheus 可以扩展到十几个数据中心和上百万的节点。在此场景下,联邦拓扑相似一个树形拓扑结构,上层的 Prometheus 服务器从大量的下层 Prometheus 服务器中收集和汇聚的时序数据。工具

dOinJCq.png

跨服务联邦

在跨服务联邦中,一个服务的 Prometheus 服务器被配置来提取来自其余服务的 Prometheus 服务器的指定的数据,以便在一个 Prometheus 服务器中对两个数据集启用告警和查询。spa

ism3t0M.png

这两种联邦,其实有很大的问题,本质上Prometheus的单机能力依旧没有获得解决。架构设计

拆分

拆分永远是解决问题的一个好思路。尤为是当你的场景是,不须要一个全局的监控视图。设计

咱们能够根据环境(test,uat, prod)或是业务类型(基础设施,中间件,业务),甚至是根据部门类型来拆分。

02_Two_cluster_Prometheus_setup.png

固然能够经过grafana配置不一样的数据源,给使用方营造一种总体的假象。

04_Global_view_using_grafana.png

可是这种方案,会带来不少问题:

  • 随着你metrics量的增长,切分的维度会愈来愈细。
  • 缺少一个全局的视图,咱们仍然没法跨不一样集群查询服务,而且没法真正执行全局查询。
  • 给统一报警增长了困难。
  • 若是群集是动态的或变化的,则每次群集中部署Prometheus时,您一般都须要实现一种自动向Grafana添加数据源的方法。

长期存储

Prometheus社区也意识到了一样的问题,因而提供了远程读写两个接口,让你们可使用一些社区的时序数据库方案,来扩展prometheus。

当前,有几个提供长期存储(LTS)的开源项目,而这些社区项目则领先于其余项目:Cortex,Thanos或M3。

06_Using_LTS_for_Prometheus.png

固然这些项目实现的方式是不一样的,均有不一样的优点和劣势,须要你们根据本身单位实际的场景需求来选择。

诸如Thanos,最终的储存是S3等对象存储,总体架构比较复杂。

M3db社区活跃度不够,文档比较少,可是M3db相比其余几个,是典型的时序数据库。

Influxdb集群版本没有开源。

Victoria 数据是没有副本的。

我曾经在生产环境中,使用过Clickhouse做为长期存储。该解决方案存在的问题是,Clickhouse并发查询能力比较低,致使查询的时候慢。固然写入却是没有什么大的问题。

这种架构的好处是:

  • 全局视图
  • 统一的报警
  • 借助于第三方时序数据库,实现Prometheus采集和查询分离。总体监控系统更加稳定。

采集端hash mod

尤为当Prometheus部署到kubernetes当中,而且咱们使用了Prometheus的kubernetes sd 服务发现时,当咱们集群变得很是大的时候,单台的Prometheus采集能力也成为一个瓶颈。此时,咱们可使用hash mod, 对采集任务进行分片。

config01.jpg

总结

本文是利用Prometheus 打造企业分布式监控平台系列中的第一篇文章。主要讲了Prometheus的可扩展性上的一些解决方案。其实没有百分百完美的方案,你们须要根据本身metrics的数量来选择最合适本身的方案。

相关文章
相关标签/搜索