1. 监控系统的功能概述
监控,从中文的字义来看,有两个内容,一是监测,二是控制,重点在第一个字眼“监”上,即监测、预防的意思。监 控 , 对 应 的 英 文 单 词 是 Monitoring 。 按 照 维 基 百 科 对 于Monitoring 的 分 类 ( 链接地址是https://en.wikipedia.org/wiki/Monitoring),在计算机领域,可以将其分为5种监控类型。
- 应用性能监控(Application Performance Monitoring)。
- 业务交易监控(Business Transaction Monitoring)。
- 网络性能监控(Network Monitoring)。
- 操作系统监控(System Monitoring)。
-
网络站点监控(Website Monitoring)。
在任何一个IT业务环境中,都会存在各种各样的硬件设备、软件应用等。按照逻辑层次划分,我们可以将其划分为如图所示的模型。
多种应用构成了复杂的IT业务系统,如何保证这些资源正常运转,是各公司内IT部门的重要职责。要让这些应用能够稳定地运行,则需要专业的IT人员进行规划、设计、架构、维护和调优。在这个过程中,为了及时掌控基础环境和业务应用系统的可用性,需要获取各个组件的运行状态,如CPU的利用率、系统的负载、服务的运行、端口的连通、带宽流量、网站访问状态码等信息,而这一切都离不开监控系统的支撑。
2. 监控系统的实现原理
2.1 模块组成
一个监控系统的组成大体可以分为两部分:数据采集部分(客户端)和数据存储分析告警展示部分(服务器端),如图所示。这两部分构成了监控系统的基本模型。
对于采集到的监控数据,可以将其存储到数据库或者文本或者其他方式,具体采用哪一种,应根据实际需求来决定。
怎么规划监控系统的架构设计呢?下面将详细分析。
对于一般的监控环境,被监控的节点不多,产生的数据较少,采用C/S(Client/Server,客户端/服务器端)架构就足够了,如图1-4 所示,这种架构适合于规模较小、处于同一地域的环境。
对于大规模的监控环境,被监控的节点多,且监控类型多,监控产生的数据和网络连接开销会非常巨大,而且由于跨地域等多种因素,需要分布式的解决方案,常见的方式为C/P/S(Client/Proxy/Server,客户端/代理端/服务器端)架构(如图所示),采用中间代理将大大提高监控服务器端的处理速度,从而能支撑构建大型分布式监控的环境。
2.2 系统组成
2.3 采集协议
按照支持的协议方式,监控系统数据采集可以分为两种:专用客户端采集和公用协议采集(SNMP、IPMI、SSH、Telnet等),如图所示。
2.4 采集模式
监控系统数据采集的工作模式可以分为被动模式(从服务器端到客户端采集数据,对应的英文单词是pull)和主动模式(客户端主动上报数据到服务器端,对应的英文单词是push)两种,如图所示。通常,大多数监控系统都应该能同时支持这两种工作模式,但不同的监控系统由于采集技术不同,仅有部分能够同时支持这两种工作模式。
一般来说,被动模式对监控控制端服务器的开销较大,适合小规模的监控环境;主动模式对监控控制端服务器的开销较小,适合大规模的监控环境。
2.5 监控指标
监控系统通常都支持一些常见的监控采集指标,如操作系统监控、应用程序监控等。部分常见的监控指标如表所示。
2.6 数据存储
在监控客户端采集数据之后,会将数据上传给监控服务器端,监控服务器端程序将接收到的数据进行存储。通常监控系统会选用以下几种数据存储方式。
(1)本地存储。使用本地磁盘,基于文件的方式存储。
(2) 使用时序数据库进行数据存储 , 如古老的环状数据库(Round Robin Database, RRD)等。近年来,随着时序数据技术的不断发展,出现了比较成熟的时序数据库,如OpenTSDB(底层存储基于HBase)、Graphite、InfluxDB、Prometheus等,与直接使用文件的存储方式相比,这些时序数据库更加高效。
(3) 使用数据库管理系统 ( Database Management System,DBMS)进行数据存储,如常见的MySQL、Oracle、SQL Server等。使用这种数据库来存储监控数据,当数据量达到一定规模时,其读/写效率
均会显著下降,数据库的压力比较大,通常优化方案思路有3种,一是减少数据的存储量;二是优化数据库本身,调整配置参数,优化运行环境;三是使用分布式数据库和数据库集群技术方案。
(4)使用NoSQL数据库进行数据存储。NoSQL相对于DBMS这种传统的数据库有着一些天然的优势,单机的QPS通常较高。但NoSQL本身并不是为监控系统设计的,在数据结构存储方面存在一些缺陷,故直接
采用NoSQL作为监控数据存储的监控系统产品较少。
(5)使用列存储数据库进行数据存储。列存储数据库由于其设计之初专为大数据而有所考虑,故无须担心其存储容量,底层均有良好的解决方案。但由于其部署、运维均较为复杂,故一般监控系统也不会常采用这种技术作为数据库存储。这方面的数据库代表为HBase。
(6)使用全文搜索引擎数据库进行监控数据存储。这方面的代表是Elasticsearch,其作为监控数据库存储监控数据具有天然的优势,支持集群、分布式部署、容灾,并且集群能够提供较高的性能。目前采用全文搜索引擎数据库进行监控数据存储,典型的代表是ELK套件,在Zabbix 4.0以上版本可以选用Elasticsearch作为数据库存储。
2.7 系统功能
2.8 可扩展性
可扩展性是指监控系统本身具备良好的扩展能力,包括监控方式的扩展、监控能力的扩展、监控数据存储的扩展、分布式的支持等。要求监控系统能够随着不同环境而做出改变和调整,大多数监控系统都具备一定的扩展能力。
对于告警,要求支持多种方式,如短信、邮件、即时通信和其他接口,且具备可定制化能力,可以对第三方告警介质提供可编程接口。这一点在很多场合都非常重要,例如,将告警结果发送到专用的告警分析系统。
监控系统需要根据实际应用的需求,实时/非实时地采集和展示数据。另外,还包括历史趋势数据的展示和分析,以及容量报表、可用性报告的生成。
3. 监控系统的开源产品
在监控软件中,开源的解决方案有流量监控(MRTG、Cacti、SmokePing 等 ) 、 性 能 告 警 ( Nagios 、 Zabbix 、 Zenoss Core 、Ganglia 、 Netdata 等 ) 、 基 于 时 序 数 据 库 存 储 数 据 的 监 控(Graphite、OpenTSDB、InfluxDB、Prometheus、OpenFalcon等)、基于全文搜索引擎数据库存储数据的监控(如ELK套件)可供选择。
3.1 Cacti
Cacti(中文含义为“仙人掌”)是一套基于PHP、MySQL、SNMP和RRDtool开发的网络流量监测图形分析工具,如图所示。其数据采集仅支持SNMP方式,通过snmpget命令来获取监控数据,使用RRDtool命令工具存储历史数据和绘图,并提供数据和用户管理功能,可以根据用户权限查看不同的树状结构、主机设备以及指定的监控数据图,支持与LDAP结合进行用户认证,同时也能自定义模板。对于网络设备的监控,其展示效果非常不错,在10年前,它是广受网络管理员喜欢的监控产品。
3.2 Nagios
Nagios是一个插件式的监控系统,可以监控服务的运行状态和网络信息等,并能监视所指定的本地或远程主机参数以及服务,同时提供异常告警通知功能等,如图所示。
Nagios对开源监控系统的影响非常深远,曾经风靡一时,占据开源监控市场的大部分份额,并基于Nagios产生了很多新的监控产品。
3.3 Prometheus
Prometheus是一套开源的系统监控报警框架,其架构示意图如图所示。Prometheus最初的设计理念受Google的Borgmon监控系统所启发,由工作在SoundCloud的Google前员工于2012年创建,作为社区开源项目进行开发,2015年正式发布。2016年,Prometheus正式加入Cloud Native Computing Foundation(CNCF)组织,2018年其成为继Kubernetes 从 CNCF 毕 业 的 第 二 个 项 目 , 其 受 欢 迎 程 度 仅 次 于
Kubernetes。
3.4 OpenFalcon
OpenFalcon是一个企业级、高可用、可扩展的开源监控解决方案。它在GitHub上获得了数千个星(star)、数百次复刻(fork)、上百个代码提交(pull-request),社区用户超过6000人,超过200家
公司都在不同程度地使用OpenFalcon。
OpenFalcon官方网站地址:https://book.open-falcon.org/。
OpenFalcon由多个组件构成,重要的组件有数据采集、数据传输、数据存储、告警分析、图形展示等,数据采集使用专用客户端,传输协议为私有的,数据存储支持OpenTSDB和RRD两种方式,其架构示意图如图所示。
3.5 ELK家族
ELK是Elasticsearch、Logstash、Kibana的简称,这三者是核心套件,但并非全部。
ELK官方网站地址:https://www.elastic.co/。
3.6 Zabbix
Zabbix是企业级分布式监控系统,是一个开箱即用的成熟解决方案,具备完备的功能。综合其他监控产品来说,它是一个大而全、功能丰富且定制非常灵活的产品,具备其他监控产品的功能,同时提供了其他监控产品所不具备的功能,扩展非常灵活,是企业级监控系统比较合理的选择之一。
从功能上说,Zabbix支持多种采集方式和采集客户端,有专用的Agent(代理),也支持SNMP、IPMI、JMX、Telnet、SSH等多种协议,它将采集到的数据存放到数据库中 , 可 以 支 持 MySQL 、 Oracle 、PostgreSQL、SQLite、Elasticsearch等数据库,然后对其进行分析整理,达到条件触发告警,并支持对告警数据的分析统计。Zabbix具有良好的管理界面,如图所示。