来源:cnblogs.com/xiaoyuxixi/p/12235979.html新公司想去监控。采访中提到Prometheus是公司需要的监控解决方案。当然,我选择了效仿。之前主要做的是Zabbix。既然公司需要Prometheus,那也没有别的办法,只能去对比了解。但是再深入一点,我体会到了Prometheus的优势,总结了这两种监控方式。两大监控工具简史PrometheusKubernetes自2012年开源以来,以势不可挡的势头成为容器领域调度编排的领头羊。Kubernetes是GoogleBorg系统的开源实现,而Prometheus是一个开源的GoogleBorgMon的源代码实现。Prometheus是SoundCloud开发的开源监控报警系统和时序数据库。从字面上理解,Prometheus由两部分组成,一是监控报警系统,二是内置的时序数据库(TSDB)。2016年,谷歌发起的Linux基金会的子公司云原生计算基金会(CloudNativeComputingFoundation)将Prometheus列为第二大开源项目。Prometheus在开源社区中也非常活跃。它在GitHub上有20000多个star,系统每隔一两周就会有一个小版本更新。Prometheus和它的“兄弟”Kubernetes都有自己的云原生光环。自然能够友好合作。ZabbixZabbix的正式发布最早可以追溯到2012年,比Prometheus早了四年。Zabbix是AlexeiVladishev开源的分布式监控系统。是企业级分布式开源监控解决方案。能够监控各种网络参数以及服务器健康和完整性的软件。使用灵活的通知机制,允许用户为几乎任何事件配置基于电子邮件的警报。这允许对服务器问题进行快速反馈。基于存储的数据提供出色的报告和数据可视化功能。架构对比PrometheusPrometheus的基本原理是通过HTTP周期性的抓取被监控组件的状态。任何组件只要提供相应的HTTP接口,并符合Prometheus定义的数据格式,就可以接入Prometheus监控。PrometheusServer负责定期抓取目标上的Metrics数据,并保存到本地存储。Prometheus采用Pull(拉取)方式获取数据,不仅降低了客户端的复杂度,客户端只需要收集数据而无需了解服务端的情况,服务端可以更方便的进行横向扩展。如果监控数据达到告警阈值,PrometheusServer会通过HTTP将告警发送给告警模块alertmanger,告警抑制后触发email或webhook。Prometheus支持PromQL以提供多维度的数据模型和灵活的查询。通过将多个标签与监控指标进行关联,实现监控数据在任意维度上的组合聚合。ZabbixZabbix由2部分组成,ZabbixServer和可选的ZabbixAgent。ZabbixServer可以通过SNMP、ZabbixAgent、ping、端口监控等方式提供远程服务器/网络状态监控、数据采集等功能。它可以运行在Linux、Solaris、HP-UX、AIX、FreeBSD、OpenBSD、OSX等平台上。核心组件主要是Agent和Server。Agent主要负责收集数据,并以主动或被动的方式发送给Server/Proxy。此外,为了扩展监控项,Agent还支持自定义脚本的执行。Server主要负责接收Agent发送过来的监控信息,汇总存储,触发告警等。ZabbixServer将采集到的监控数据存储在ZabbixDatabase中。ZabbixDatabase支持常用的关系型数据库,如MySQL、PostgreSQL、Oracle等,默认为MySQL,并提供ZabbixWeb页面(PHP编写)数据查询。由于Zabbix使用关系型数据存储时序数据,在监控大规模集群时,往往在数据存储方面捉襟见肘。所以从Zabbix4.2开始就支持了TimescaleDB时序数据库,但是成熟度还不高。综合上表对比,从开发语言来看,为了满足高并发、快速迭代的需求,监控系统的开发语言已经逐渐从C语言转移到Go。不得不说,Go以其简洁的语法和优雅的并发性,准确定位了Java占据业务开发、C占据底层开发的中间件开发需求,被广泛应用于当前的开源中间件产品中。从系统成熟度来看,Zabbix是一个老牌的监控系统:Zabbix出现于1998年,系统功能比较稳定成熟。普罗米修斯诞生于近年。虽然其功能还在迭代更新中,但站在巨人的肩膀上,在架构设计上借鉴了很多老牌监控系统的经验。从数据存储来看,Zabbix采用关系型数据库存储,极大限制了Zabbix集合的性能,而Prometheus自研了一套高性能的时序数据库,在V3中可以达到每秒千万级的数据存储版本。第三方时序数据库扩展了历史数据的存储。从配置复杂度来看,Prometheus只有一个核心服务器组件,可以通过一条命令启动。相比之下,其他系统配置就相对麻烦一些。从社区活跃度来看,Zabbix目前比较活跃,但基本都是国内公司参与。普罗米修斯在这方面具有绝对优势。虽然社区活动没有现在那么活跃,但得到了CNCF的支持。后期的发展值得期待。从容器支持来看,由于Zabbix出现的比较早,那时候容器还没有诞生,自然对容器的支持比较差。Prometheus的动态发现机制不仅可以支持Swarm原生集群,还可以支持Kubernetes容器集群的监控,是目前容器监控最好的解决方案。总结总体来说Zabbix更成熟,上手更快,但是集成性更好导致灵活性较差。更大的问题是,监控数据的复杂度增加后,Zabbix很难再做进一步的定制。自定义后,之前收集的数据不能再用了(关系型数据库导致的问题)。普罗米修斯基本上是相反的。上手难度较大,但由于高度的定制化灵活性和更多的数据聚合可能性,上手后的使用难度远低于Zabbix。但是,如果您对传统监控系统已经有了一定的技术积累,则应慎重考虑更换监控系统。如果你监控的是物理机,Zabbix没有任何问题。Zabbix在传统监控系统中具有绝对优势,尤其是在服务器相关的监控方面。即使环境变化不是很频繁,Zabbix也会比Prometheus好;但是如果是云环境,除非Zabbix很溜,可以做各种定制,或者Prometheus,毕竟是人做的。Prometheus已经开始成为容器监控的主导和标准配置,并且在可预见的未来将会得到广泛的应用。如果你只是想使用监控系统,不要犹豫,Prometheus就对了。近期热点文章推荐:1.1000+Java面试题及答案(2022最新版)2.厉害了!Java协程来了。..3.SpringBoot2.x教程,太全面了!4.不要用爆破爆满画面,试试装饰者模式,这才是优雅的方式!!5.《Java开发手册(嵩山版)》最新发布,赶快下载吧!感觉不错,别忘了点赞+转发!
