CSDNTB|监控系统选型,这篇不可不读( 三 )


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台 , 个人感觉达不到 , 尤其现在应用层的指标越来越多 。 虽然最新版已经开始支持时序数据库 , 不过成熟度还不高 。
应用层监控支持有限:如果想对应用程序做侵入式的埋点和采集(比如监控线程池或者接口性能) , zabbix没有提供对应的sdk , 通过插件式的脚本也能曲线实现此功能 , 个人感觉zabbix就不是做这个事的 。
数据模型不强大:不支持tag , 因此没法按多维度进行聚合统计和告警配置 , 使用起来不灵活 。
方便二次开发难度大:Zabbix采用的是C语言 , 二次开发往往需要熟悉它的数据表结构 , 基于它提供的API更多只能做展示层的定制 。
2. Open-Falcon(小米出品 , 国内流行)

CSDNTB|监控系统选型,这篇不可不读
本文插图

Open-falcon 是小米2015年开源的企业级监控工具 , 采用Go和Python语言开发 , 这是一款灵活、高性能且易扩展的新一代监控方案 , 目前小米、美团、滴滴等超过200家公司在使用它 。
小米初期也使用的Zabbix进行监控 , 但是机器量和业务量上来后 , Zabbix就有些力不从心了 。 因此 , 后来自主研发了Open-Falcon , 在架构设计上吸取了Zabbix的经验 , 同时很好地解决了Zabbix的诸多痛点 。
先来了解下Open-Falcon的架构设计:

CSDNTB|监控系统选型,这篇不可不读
本文插图

Open-Falcon架构图 , 来自网络
Falcon-agent:数据采集器和收集器 , Go开发 , 部署在被监控的机器上 , 支持3种数据采集方式 。 首先它能自动采集单机200多个基础监控指标 , 无需做任何配置;同时支持用户自定义的plugin获取监控数据;此外 , 用户可通过http接口 , 自主push数据到本机的proxy-gateway , 由gateway转发到server.
Transfer:数据分发组件 , 接收客户端发送的数据 , 分别发送给数据存储组件Graph和告警判定组件Judge , Graph和Judge均采用一致性hash做数据分片 , 以提高横向扩展能力 。 同时Transfer还支持将数据分发到OpenTSDB , 用于历史归档 。
Graph:数据存储组件 , 底层使用RRDTool(时序数据库)做单个指标的存储 , 并通过缓存、分批写入磁盘等方式进行了优化 。 据说一个graph实例能够处理8W+每秒的写入速率 。
Judge和Alarm:告警组件 , Judge对Transfer组件上报的数据进行实时计算 , 判断是否要产生告警事件 , Alarm组件对告警事件进行收敛处理后 , 将告警消息推送给各个消息通道 。


推荐阅读