当前位置: 首页 > 科技观察

整合Zabbix和Prometheus,打造可视化监控无短板难!

时间:2023-03-20 16:27:21 科技观察

1。监控工具介绍1、ZabbixZabbix是AlexeiVladishev开源的分布式监控系统,企业级分布式开源监控解决方案。1.0稳定版发布于2004年3月,比Prometheus早了10多年。能够监控各种网络参数以及服务器健康和完整性的软件。使用灵活的通知机制,允许用户为几乎任何事件配置基于电子邮件的警报。后台使用数据库存储监控配置和历史数据,可以更方便的对接数据分析、报表定制等渠道。前端开放丰富的RESTfulAPI,供第三方平台调用。整体架构符合当前DevOps趋势。2.PrometheusPrometheus是一个开源的监控报警系统和时序数据库,由前谷歌员工创立的公司SoundCloud开发。相对于k8s是GoogleBorg系统的开源实现,Prometheus是GoogleBorgMon的开源实现。Prometheus由两部分组成,一是监控报警系统,二是内置时序数据库(TSDB)。Prometheus在开源社区中非常活跃。它在GitHub上有超过40000个Star,系统每两三周会有一个小版本更新。Prometheus和它的“兄弟”k8s自带云原生光环,自然是友好合作。二、架构对比1、Zabbix架构ZabbixServer的核心组件,用C语言编写,负责接收Agent和Proxy发送的监控数据,也支持JMX、SNMP等协议直接采集数据。同时还负责数据的汇总存储和告警触发。ZabbixProxy可选组件,针对被监控机器较多的情况,可以使用Proxy进行分布式监控。可以代Server采集部分监控数据,减轻Server的压力。ZabbixAgentd部署在被监控的主机上,从本机收集数据,发送给Proxy或Server。其插件机制支持用户自定义数据采集脚本。Agent可以在Server端手动配置,也可以通过自动发现机制来识别。数据采集??方式支持主动Push和被动Pull两种方式。数据库用于存储配置信息和采集的数据,支持MySQL、Oracle等关系型数据库。同时最新版本的Zabbix已经开始支持时序数据库,但成熟度还不高。WebServerZabbix的GUI组件,用PHP编写,提供监控数据展示和告警配置。2.Prometheus架构PrometheusServer用于定时抓取数据指标(metrics)和存储时序数据(TSDB)。TSDB在存储监控方面的性能会优于传统的关系型数据库。工作/出口商普罗米修斯使用各种出口商进行监控。exporter的作用类似于Zabbix的Agent,负责从监控对象端采集数据。Pushgateway监控端的数据会通过push的方式主动发送给这个组件,然后这个组件的数据会被Prometheus服务周期性的拉取。Alertmanageralarm组件,类似于Zabbix的Action,可以触发告警,比如发送短信和邮件。WebUI用于各种UI展示,一般是Grafana,还有一些比如配置自动发现目标和后端存储组件的widgets。三、Zabbix和Prometheus的优缺点一、Zabbix的优势和成熟的产品由于诞生时间长,用途广泛,文档丰富,开源的数据采集插件种类繁多,可以覆盖大部分监控场景,支持多种不同的类型。设备和平台。丰富的采集方式支持Agent、SNMP、JMX、SSH等多种采集方式,以及主动和被动的数据传输方式,Agent可以更好的进行统一规范的配置。扩展性强支持Proxy分布式监控,Agent自动发现功能,插件式架构支持自定义数据采集脚本。便捷的配置管理可通过Web界面进行监控和告警配置,操作简单,使用方便。2、Prometheus的优势在于强大的处理能力。监控数据直接存储在PrometheusServer本地时序数据库中,单实例可处理百万级Metrics。灵活的数据模型引入Tag,属于多维数据模型,更方便聚合统计,支持不同团队的个性化呈现。强大的查询语句PromQL允许在同一个查询语句中对多个Metrics进行加法、连接、分位数等操作。支持云环境可以自动发现容器,K8s、Etcd等项目原生支持Prometheus,是目前最流行的容器监控方案。3、相比老牌监控系统Zabbix,数据量大,功能全面稳定,90%以上的配置都可以通过web端操作实现,比Prometheus方便,这在很大程度上依赖于配置文件。Prometheus拥有灵活的数据模型,更成熟的时序数据库,在大数据量的情况下性能更高。支持与Grafana快速集成,结合美观强大的视觉体验,支持针对不同团队更个性化的呈现。对于纯容器环境,毫无疑问Prometheus是更合适的选择。Prometheus是为容器化平台构建的监控系统。环境非常复杂,有各种操作系统、硬件、中间件、数据库、机房等,所以Zabbix是一个比较合适的监控平台,Zabbix兼顾了监控的深度和广度,实现了监控的目的统一监控平台;但当监控服务器数万台,或者监控周期超过一年,需要针对不同团队进行灵活可视化时,Prometheus也有很强的优势。4、Zabbix使用情况公司根据业务条线划分了多套zabbix,运行稳定,但监控数据分散,无法集中管理。多维可视化能力弱,数据存储周期过短,不利于容量预测和管理。实时监控数据监控趋势图主机组1.Zabbix数据库表结构1)配置数据①hosts表存储被监控主机的信息。常用字段介绍如下:Hostid:唯一标识Host在Zabbix和数据库中的id。不同表之间的关联也是使用hostid。Proxy_hostid:如果启用“代理服务器”架构,将出现被监控机器的proxy_hostid。主机:被监控机器的名称。状态:机器的当前状态。“0”表示正常监控,“1”表示禁用。②items表存放所有监控项,使用hostid查询items表中主机的监控项,itemid为监控项id,name为监控项名称,key_为key值,即,表达式,如何监控item值。itemid:项目的id。type:item的类型,对应前端会议配置的item类型。在数据库中,该列的值是0到17之间的一个数字,代表不同的类型。hostid:item所在主机的hostid。如果项目属于模板,则此处显示templateid。名称:项目的名称。key_:项目的键。状态:项目的状态。value_type:item返回值的类型,配置item时配置的“TypeofInformation”。③hosts_groups表存储了主机(host)和主机组(hostgroup)的关系。④Host_groups表主机组,zabbix上主机组的命名是规范的,方便多维查找。Name_Department_Product_ClusterName⑤问题表存储问题事件。查询Top10未恢复问题事件,将时间戳转化为格式化时间。选择p.eventid作为事件id,FROM_UNIXTIME(p.clock,'%Y-%m-%d%H:%i:%s')作为时钟,p.name作为触发事件,p.severity作为事件级别FROM问题pWHEREp.source='0'ANDp.object='0'ANDNOTEXISTS(SELECTNULLFROMevent_suppressesWHEREes.eventid=p.eventid)ANDp.r_eventidISNULLORDERBYp.eventidDESCLIMIT10;2)历史数据Zabbix系统每次采集时都会对每个监控项进行数据采集,这些数据保存在Zabbix系统数据库的历史表中。当被监控的主机数量较多时,每个zabbix系统产生的数量都非常大,对数据库是一种负担。建议对数据库进行分区或者尽量减少历史数据的保留天数,以免给数据库系统造成很大的压力。①历史表:存储信息类型为浮点数的监控项的历史数据。history_log表:存储监控项的历史数据,信息类型为日志。history_str表:存储信息类型为字符的监控项的历史数据。history_text表:存储信息类型为文本的监控项的历史数据。history_uint表:存储监控项的历史数据,信息类型为数字(无正负)。②历史表结构itemid:监控项的唯一标识id。clock:时间戳的整数部分。value:监控项的值。ns:纳秒。查询2022/06/0700:00:00-2022/06/0800:00:00itemid29175浮点监控项的历史数据。选择itemid,from_unixtime(clock)作为时间,历史值,其中itemid=29175和clock>=unix_timestamp('2022/06/0700:00:00')andclock<=unix_timestamp('2022/06/0800:00:00');五、super_exporter为了解决zabbix的不足,我们开展了zabbix和Prometheus融合监控项目,通过为每个zabbix数据库开发部署一套super_exporter,定时从数据库中抓取zabbix下所有监控服务器的性能数据,报告给普罗米修斯。为了减轻主库压力,提高响应速度,为每套zabbix增加了一个独立的从库,专门用于super_exporter抓取数据。Prometheus配置爬虫任务。当主机较多时,单个zabbix下的总监控项会达到数万个。性能优化后,保证总执行时间不超过30s。Metrics返回zabbix管理的所有监控主机对应的多个监控项性能指标,涉及dba、主机、产品部、产品、集群、机房等标签。super_exporter从hosts表中获取本zabbix实例管理的监控主机集合,从中获取主机对应的运维负责人、部门、产品、集群名称等业务层多维数据hstgrp表。从zabbix实例本身的部署中获取机房位置等数据,从item中获取需要集中管理的监控项,从历史表中抓取最新采集周期的监控数据。6.Grafana展示将zabbix采集的监控数据抓取,存入TSD时序数据库,使用PromQL语言进行相关监控项的多标签聚合计算。利用grafana灵活强大的多维可视化能力,方便及时识别性能风险,预估长生命周期的资源容量。通过数据行列转换、实例健康指标得分计算排序、风险实例表头展示、相邻性能值趋势对比,实时查看实例整体运行状态。实时聚合多个机房的zabbix监控告警,集中展示当前告警项;同时记录历史告警,审计告警趋势。zabbix与prometheus的融合,可以将zabbix成熟的生态和配置的灵活性与Prometheus的存储和展示优势相结合,提供更强大的监控能力,支持百亿级人机物连接相关监控数据的存储。家族企业。单个Prometheus支持百万级的metrics,但是随着zabbix访问量的增加,监控数据的时间存储周期变长。未来会引入灭霸来长期存储普罗米修斯。同时,super_exporter未来将接入cmdb系统,匹配更多的业务标签数据,支持更多维度的统计计算能力,满足公司不同团队定制化的数据展示需求。