数据采集:采集的方式有很多种,包括 日志埋点进行采集(通过Logstash、Filebeat等进行上报和解析), JMX标准接口输出监控指标,被监控对象提供REST API进行数据 采集(如Hadoop、ES),系统命令行,统一的SDK进行侵入式的埋点和上报等。
数据传输:将采集的数据以TCP、UDP或者HTTP协议的形式上报给监控系统,有主动Push模式,也有被动Pull模式。
数据存储:有使用MySQL、Oracle等RDBMS存储的,也有使用时序数据库RRDTool、OpentTSDB、InfluxDB存储的,还有使用HBase存储的。
数据展示:数据指标的图形化展示。
监控告警:灵活的告警设置,以及支持邮件、短信、IM等多种通知通道。
02 主流监控系统介绍下面再来认识下主流的开源监控系统,由于篇幅有限,我挑选了3款使用最广泛的监控系统:Zabbix、Open-Falcon、Prometheus,会对它们的架构进行介绍,同时总结下各自的优劣势。
1. Zabbix(老牌监控的优秀代表)Zabbix 1998年诞生,核心组件采用C语言开发,Web端采用PHP开发。它属于老牌监控系统中的优秀代表,监控功能很全面,使用也很广泛,差不多有70%左右的互联网公司都曾使用过 Zabbix 作为监控解决方案。
先来了解下Zabbix的架构设计:
Zabbix Server:核心组件,C语言编写,负责接收Agent、Proxy发送的监控数据,也支持JMX、SNMP等多种协议直接采集数据。同时,它还负责数据的汇总存储以及告警触发等。
Zabbix Proxy:可选组件,对于被监控机器较多的情况下,可使用Proxy进行分布式监控,它能代理Server收集部分监控数据,以减轻Server的压力。
Zabbix Agentd:部署在被监控主机上,用于采集本机的数据并发送给Proxy或者Server,它的插件机制支持用户自定义数据采集脚本。Agent可在Server端手动配置,也可以通过自动发现机制被识别。数据收集方式同时支持主动Push和被动Pull 两种模式。
Database:用于存储配置信息以及采集到的数据,支持MySQL、Oracle等关系型数据库。同时,最新版本的Zabbix已经开始支持时序数据库,不过成熟度还不高。
Web Server:Zabbix的GUI组件,PHP编写,提供监控数据的展现和告警配置。
下面是 Zabbix 的优势:
产品成熟:由于诞生时间长且使用广泛,拥有丰富的文档资料以及各种开源的数据采集插件,能覆盖绝大部分监控场景。
采集方式丰富:支持Agent、SNMP、JMX、SSH等多种采集方式,以及主动和被动的数据传输方式。
较强的扩展性:支持Proxy分布式监控,有agent自动发现功能,插件式架构支持用户自定义数据采集脚本。
配置管理方便 :能通过Web界面进行监控和告警配置,操作方便,上手简单。
下面是 Zabbix 的劣势:
性能瓶颈:机器量或者业务量大了后,关系型数据库的写入一定是瓶颈,官方给出的单机上限是5000台,个人感觉达不到,尤其现在应用层的指标越来越多。虽然最新版已经开始支持时序数据库,不过成熟度还不高。