1.10 监控系统的对比

下面针对 Prometheus、Zabbix、Nagios 和 Open-Falcon 这几种监控系统进行横向对比,如表1-1所示。

表1-1

从开发语言上看,为了应对高并发和快速迭代的需求,监控系统的开发语言已经慢慢从C转移到Go。不得不说,Go凭借简洁的语法和优雅的并发,在Java占据业务开发领域、C 占领底层开发领域的情况下,准确定位中间件开发需求,在当前的开源中间件产品中被广泛应用。

从系统成熟度方面来看,Zabbix 和 Nagios 都是老牌的监控系统:Zabbix 是在1998年出现的,Nagios 是在1999年出现的,系统功能比较稳定,成熟度较高。而Prometheus和Open-Falcon都是最近几年才诞生的,虽然功能还在不断迭代、更新,但它们站在巨人的肩膀之上,在架构设计上借鉴了很多老牌监控系统的经验。

从系统扩展性方面来看,Zabbix 和 Open-Falcon 都可以自定义各种监控脚本。Zabbix不仅可以做到主动推送,还可以做到被动拉取;Prometheus则定义了一套监控数据规范,并通过各种exporter扩展系统采集能力。

从数据存储方面来看,Zabbix采用关系数据库存储数据,这极大限制了 Zabbix的数据采集性能。Nagios和Open-Falcon都采用了RDD数据存储方式。Open-Falcon还加入了一致性 Hash 算法进行数据分片,并且可以对接到 OpenTSDB,而且Prometheus 自研的一套高性能时序数据库,在 V3版本时可以达到每秒千万级别的数据存储,可通过对接第三方时序数据库扩展对历史数据的存储性能。

从社区活跃度方面来看,目前 Zabbix 和 Nagios 的社区活跃度比较低,尤其是Nagios,Open-Falcon 的社区虽然也比较活跃,但基本都是国内的公司在参与。Prometheus的社区活跃度很高,并且得到CNCF的支持,后期的发展值得期待。

从容器支持方面来看,由于 Zabbix 和 Nagios 出现得比较早,当时容器还没有诞生,所以它们对容器的支持自然也比较差。Open-Falcon虽然提供了容器监控功能,但支持力度有限。Prometheus的动态发现机制,不仅支持Swarm原生集群,还支持Kubernetes 容器集群监控,是目前容器监控的最佳解决方案。Zabbix 在传统监控系统中,尤其是在服务器相关监控方面,占据绝对优势。Nagios则在网络监控方面有广泛应用。伴随着容器的发展,Prometheus 开始成为容器监控方面的标配,并将被广泛应用。总体来说,Prometheus可以说是目前监控领域最锋利的“瑞士军刀”了。