小米科技|zabbix-监控系统的实现原理

小米科技|zabbix-监控系统的实现原理

文章图片

小米科技|zabbix-监控系统的实现原理

文章图片

小米科技|zabbix-监控系统的实现原理

1. 模块组成
一个监控系统的组成大体可以分为两部分:数据采集部分(客户端 , Agent)和数据存储分析告警展示部分(服务器端 , Server) , 如图 1-2 所示 。 这两部分构成了监控系统的基本模型 。
【小米科技|zabbix-监控系统的实现原理】
2. 采集协议
按照支持的协议方式 , 监控系统数据采集可以分为两种:专用客户端采集和公用协议采集(SNMP、IPMI、SSH、Telnet 等)

3. 采集模式
监控系统数据采集的工作模式可以分为被动模式(从服务器端到客户端采集数据 , 对应的英文单词是 pull)和主动模式(客户端主动上报数据到服务器端 , 对应的英文单词是 push)两种 , 通常 , 大多数监控系统都应该能同时支持这两种工作模式 , 但不同的监控系统由于采集技术不同 , 仅有部分能够同时支持这两种工作模式 。

4. 监控指标
监控系统通常都支持一些常见的监控采集指标 , 如操作系统监控、应用程序监控等 。

5. 代理架构
对于大规模的监控环境 , 被监控节点多且监控类型多 , 监控产生的数据和网络连接开销非常大 , 数据采集方式除了使用主动采集模式 , 还需要使用代理架构 , 通过代理架构分摊服务器端的性能开销 。
另外 , 代理架构还支持跨地域、跨网络的分布式监控 。 常见的代理架构 , 即 C/P/S(Client/Proxy/Server , 客户端/代理端/服务器端 , 此处的 Client 和 Agent 意思等同 , 都表示客户端 , 下同)架构(如下图) 。

采用中间代理将大大提高监控服务器端的处理速度 , 从而支撑构建大型分布式监控环境 , 从架构上支持异地多机房的需求 。
对于小型的监控环境 , 被监控节点不多且处于同一地域或网络环境下 , 监控系统所需采集的监控数据量较少 , 采用 C/S(Client/Server , 客户端/服务器端)架构即可满足监控业务需求 , 毕竟 CPS 的模式没有了 P 会少消耗一些服务器资产 。
6. 数据存储
在监控客户端采集数据之后 , 会将数据上传给监控服务器端 , 监控服务器端程序将接收到的数据进行存储 , 一般会选以下 6 种数据存储方式:
(1)本地存储 。 使用本地磁盘 , 基于文件的方式存储 。
(2)使用时序数据库进行数据存储 , 如古老的环状数据库(Round Robin Database RRD)等 。 近年来 , 随着时序数据技术的不断发展 , 出现了比较成熟的时序数据库 , 如 OpenTSDB(底层存储基于 HBase)、Graphite、InfluxDB、Prometheus 等 , 与直接使用文件的存储方式相比 , 这些时序数据库更加高效 。 目前时序数据库领域相关技术的发展速度较快 , 应用的生态也逐步完善 , 基于时序数据库的监控系统会逐渐增多 。 从长远角度来看 , 使用时序数据库存储监控数据 , 是必然的发展趋势 。
(3)使用数据库管理系统(Database Management System DBMS)进行数据存储 , 如常见的 MySQL、Oracle、SQL Server 等 。 使用这种数据库来存储监控数据 , 当数据量达到一定规模时 , 其读/写效率均会显著下降 , 数据库的压力比较大 , 通常优化方案思路有 3 种 , 一是减少数据的存储量;二是优化数据库本身 , 调整配置参数 , 优化运行环境;三是使用分布式数据库和数据库集群技术方案 。 故使用 DBMS 作为数据存储的监控系统 , 对数据库本身的掌握程度决定了监控系统能否在大规模环境下良好工作 。