融合Zabbix和Prometheus,打造无短板可视化的监控不难!
一、监控工具简介
1、Zabbix
Zabbix 是由Alexei Vladishev开源的分布式监控系统,是一个企业级的分布式开源监控方案。2004年3月发布1.0 稳定版,比Prometheus早了10年以上。能够监控各种网络参数以及服务器健康性和完整性的软件。使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警。
后端使用数据库存储监控配置和历史数据,可以较为方便地对接数据分析、报表定制等渠道,在前端开放了丰富的 RESTful API 供第三方平台调用,整体架构符合当前 DevOps 的趋势。
2、Prometheus
Prometheus是由前Google员工创办公司SoundCloud开发的开源监控报警系统和时序列数据库。相对于k8s是Google Borg系统的开源实现,Prometheus是Google BorgMon的开源实现。
Prometheus 由两个部分组成,一个是监控报警系统,另一个是自带的时序数据库(TSDB)。
Prometheus 在开源社区十分活跃,在 GitHub 上拥有四万多Star,并且系统每隔两三周就会有一个小版本的更新,Prometheus 与它的“师兄”k8s 自带云原生的光环,天然能够友好协作。
二、架构对比
1、Zabbix 架构
Zabbix Server
核心组件,C 语言编写,负责接收 Agent、Proxy 发送的监控数据,也支持 JMX、SNMP 等多种协议直接采集数据。同时,它还负责数据的汇总存储以及告警触发等。
Zabbix Proxy
Zabbix Agentd
部署在被监控主机上,用于采集本机的数据并发送给 Proxy 或者 Server,它的插件机制支持用户自定义数据采集脚本。
Agent 可在 Server 端手动配置,也可以通过自动发现机制被识别。数据收集方式同时支持主动 Push 和被动 Pull 两种模式。
Database
用于存储配置信息以及采集到的数据,支持 MySQL、Oracle 等关系型数据库。同时,最新版本的 Zabbix 已经开始支持时序数据库,不过成熟度还不高。
Web Server
Zabbix 的 GUI 组件,PHP 编写,提供监控数据的展现和告警配置。
2、Prometheus架构
Prometheus Server
用于定时抓取数据指标(metrics)、存储时间序列数据(TSDB),TSDB在存储监控的性能会优于传统关系型数据库。
Jobs/exporters
Prometheus 使用各种 exporter 进行监控,exporter 的功能类似于 Zabbix 的 Agent,负责收集监控对象端的数据。
Pushgateway
监控端的数据会用push的方式主动传给此组件,随后被 Prometheus 服务定时 pull 此组件数据即可。
Alertmanager
报警组件,类似于Zabbix的Action,可以进行报警触发,比如发送短信和邮件。
Web UI 用于多样的UI展示,一般为Grafana,还有一些例如配置自动发现目标的小组件和后端存储组件。