写点什么

Zabbix VS Prometheus :哪个更适合你

用户头像
耳东@Erdong
关注
发布于: 刚刚

最近几年一直在使用监控系统,主要使用 Zabbix 和 Prometheus 两个监控工具,对于这两个监控系统有一些使用实践方面的经验,通过对比的方式来和大家分享一下。


一、Zabbix 和 Prometheus 的出现和发展

Zabbix 和 Prometheus 都是监控系统中很流行的工具,Zabbix 的出现要更早一些,在 2001 年的时候发布了 0.1,彼时时序数据库还没有应用在监控领域,Zabbix 基于当时的环境采用了关系型数据库来存储数据。


最早的时序数据库 RRDTool 出现于 1999 年 7 月 16 日,Influxdb 在 2013 年 10 月 24 日发布了 0.0.1 版本,Prometheus 于 2014 年 3 月 13 日发布了 0.1.0 版本  ,直到 2016 年,时序数据库彻底火了起来。


现在 Zabbix 按照每 6 个月一个稳定版本,每 2 年一个大版本的节奏在逐步发展,当前是 5.x 版本,6.x 版本也在规划中了。


Prometheus 按照每 6 周一个小版本的迭代在逐步前进,目前已经在 2.X 时代,最新版本是 2.30.0。


站在当前这个时间节点,Prometheus 即将发布 2.31.0 ,Zabbix 也已经发布了 5.4.0 。Zabbix 看到了时序数据库在监控领域的前景,在 5.x 开始支持使用时序数据库来存储数据,并且在 4.4 的时候就支持收集 Prometheus 的 数据存储在自己的关系型数据库中。Zabbix 站在企业级监控系统的角度,开始支持包含各种监控工具,进一步向一个臃肿的大而全的系统演进,并且开始小范围的尝试新的技术。Prometheus 按照自己最初的设计,只做监控,其他部分交给更专业的人来做,基于时序数据库,基于 Golang,不断优化,提高性能。目前来看,Prometheus 基本已经是云原生监控系统的事实标准,最佳选择。Zabbix 扎根企业市场以功能大而全的优点毅力不倒。


二、 Zabbix 和 Prometheus 的优缺点


最近在使用 Zabbix 时被同事写的一个接口调用的 bug 导致 Zabbix 的主机信息、模版信息、以及他们的关联关系全丢了,因为配置了自动注册,在这些数据丢失以后,Zabbix Agent 又把自己注册了一次,然后通过备份数据恢复的时候这两部分就发生了冲突,一个表一个表的解决问题。恢复好以后,这个事情又发生了一次。不同的是,第一次恢复紧急恢复花费了一晚上十几个小时的时间,全部恢复大概花了一周时间,第二次全部恢复花了两个小时。


另外的一个事情就是 Zabbix Server 版本升级,由于一些安全原因和实际碰到的 BUG,我们决定对 Zabbix Server 进行版本升级。仅仅是从 4.4.0 升级到 4.4.10 花费了大约一周时间,各种测试,各种升级回滚解决问题。当然这也和当前的部署结构有关系,结构不合理,负载不均衡等等。


这个月主要就耗费在这里了。


针对 Zabbix 总结一下,有以下的优点:

1、监控模版可以包含多个指标,在不涉及自定义采集脚本等其他方式的情况下,使用 SNMP、Zabbix Agent 的情况下可以做到开箱即用;

2、指标和触发器(Zabbix 的告警规则叫触发器)的关联交互挺好用;

3、宏和宏变量的使用可以大大的提高告警的便捷性,基本可以做到每个 label 不同的阈值;

4、Zabbix 的指标采集挺丰富的,包括采集间隔,是否要一直采集还是每天固定时间段来采集;

5、Zabbix 的管理页面,这个不愧是企业级软件,Zabbix 很大一部分的优势是靠它来体现的。


说完了优点来看看缺点:


1、Zabbix 架构原生是单点,没有集群方案,官方推荐的是使用 keepalived 来进行 3 个点的负载均衡,这个方案在现在来说还是有很大的优化空间的。


2、Zabbix 的数据存储使用关系型数据库,在 Zabbix 刚发布的时候,这个没的选择,但放在现在这是个很大的问题,当指标数量增加以后,数据的存储空间、查询时间都变成了一个恐怖的事情。当前使用了 6TiB 的空间来存储了每帧 80 万条数据,采集间隔一分钟,详细数据 1 个月,历史数据大概 1 年半的数据,Prometheus 存储比这个节省多了。当然 zabbix 也可以支持更大的数据收集规模,只是不知道资源会按什么比例增长。


3、升级复杂,体验了 4.4.0 升级到 4.4.10 以后,升级太麻烦,使用 Zabbix 你的团队最好配置一个 DBA 来处理各种问题。


4、Zabbix 和 Grafana 的结合不太好,语句写起来挺生硬的,也能用,但是不如 Prometheus 灵活。


对于 prometheus 这个月我也做了例行升级,大概花了一个小时左右,我升级完了十多个实例,配套的 Thanos 和存储数据的 Minio。和 Zabbix 相比,这太让人舒服了。


Prometheus 具备以下优点:

1、结构简单,但是可以水平扩展,通过和 thanos 结合可以做到无缝的水平扩展。不喜欢 thanos 也可以使用自带的联邦功能进行扩展,Prometheus 的思想就是:我尽量简单但是好用,剩下的功能尽管放给其他人做


2、采用时序数据库,大大的节省了存储空间,并且提升了查询效率。我使用 3TiB 的空间存储了每帧 300 万条数据,30 秒采集一次,大约有 120 万条数据是 15 秒采集一次,详细数据存 2 个月,5 分钟降准数据存半年,一小时降准数据存一年,而且我还不需要 DBA 参与。


3、采集配置简单,简单配置以后就可以收取丰富的指标,不用自己一个指标一个指标的添加。


4、原生支持收集很多服务暴露的监控数据,Zabbix 很难收集应用自身提供的监控数据。


对于 Prometheus 的缺点,

1、当前告警规则无法快捷的支持每个 label 一个阈值,要么统一阈值,要么一个 label 一条规则,量大了以后真的不好管理。大家如果这方面有什么好的办法还请指导我一下。

其他感觉和 zabbix 比起来没啥缺点了。


另外有一个不同点就是,当采集内容较多的时候会出现一个机器上有多个 Agent 的问题。对于这个方面来说,Zabbix 只有一个 Agent ,但是很多内容需要自己编写采集脚本,Agent 还是比自己编写脚本的可靠性更高一些。另外对于单节点多 Agent 来说,Prometheus 也有对应的解决方案。


三、Zabbix 和 Prometheus 的适用场景


在使用 Zabbix 和 Prometheus 的过程中,曾经将 Zabbix 和 Prometheus 放在各种场景下进行过使用,比如单个集群、多个集群、超级集群、企业业务环境等等场景。


我们先来看看集群环境。

对于单个中小规模的集群(500 或者 1000 节点以下)来说,使用 Zabbix 和 Prometheus 没有什么差别,无论使用哪种工具,做好规划和设计,使用起来基本没有问题,单机的资源使用、数据库的压力、场景的复杂度,都不是太大的问题。随便使用就好。


对于多集群来说,我们需要考虑 Master 节点的资源使用情况、数据库的压力承载情况、集群扩展的方便性。对于 Zabbix 来说,当节点数量直线上升的时候,Master 的压力会一直增大,对于单点 Master 的配置要求越来越大,当数量达到一定规模以后,单点就无法支撑这个规模的系统,然而官方也没有提出很好的集群方案。另外当节点规模增大以后,数据库的压力会变大,监控数据的查询会变的很慢,数据库会变成一个集群来解决遇到的问题,硬件资源的成本会直线上升。对于集群扩展来说,Zabbix 可以基于自动注册和 Proxy 来实现,但是数据是采取 Agent 到 Server Push 回来的,当你想要摘除一个被监控集群的时候操作很繁琐。


对于 Prometheus 来说,在多集群的时候,可以每个集群使用一个 Prometheus ,通过 Thanos 来进行汇总,水平扩展特别方便,也不会有单点压力很大的情况,而且可以通过 Label 来区分不同的集群,单点 Server 承载节点的能力比 Zabbix 强很多。而且 Prometheus 使用时序数据库来存储监控数据,可以用很少的硬件资源提供更强的查询能力。Prometheus 使用 从 Server 到 Agent 拉取的方式获取数据,可以在 Server 端很轻易的操作采集那些节点,放弃某些节点的采集。


对于单集群超过 5000 节点的超级集群,建议直接使用 Prometheus ,可以不用 Zabbix 了,性能差太多。在不考虑冗余的情况下,Prometheus 单点就可以支持 5000 节点存储 1 个月的监控数据,Zabbix 使用同配置的机器至少要 3~4 台机器才能实现相同的效果。而且 Prometheus 相较 Zabbix 维护简单,使用方便。


对于企业的业务环境来说,超过 2000 台节点、业务服务数量大于 1000 个的时候建议直接上 Prometheus 。这个时候是需要一个完整的监控观测系统,需要和 Grafana、Kafka、Redis、MySQL 等等中间件和各种系统进行结合、直接获取服务自身暴露的监控指标,在这种场景下,Prometheus 是最适合的。Zabbix 和其他中间件的结合较差,完全依赖自定义脚本来实现,没有依托社区的力量。


四、小结


对于 Zabbix 和 Prometheus 的选取主要看自己的使用场景,Zabbix 和 Prometheus 都有大规模使用的场景,在使用过程中选取适合自己的才是最好的。


对于 Zabbix 和 Prometheus 我也在持续的使用,很多新的特性和功能也在持续探索验证当中,如果有新的发现也会和大家分享。



发布于: 刚刚阅读数: 2
用户头像

耳东@Erdong

关注

还未添加个人签名 2020.05.24 加入

主要研究分享运维技术,专注于监控、CICD、操作系统、云原生领域,公众号【耳东学堂】,知识星球同名,坚持原创,希望能和大家在运维路上结伴而行 邮箱:erdong@mail.erdong.site

评论

发布
暂无评论
Zabbix VS Prometheus :哪个更适合你