监控系统简介
为何需要监控
在一个IT环境中会存在各种各样的设备,例如:硬件设备、软件设备系统的构成也是非常复杂的。
多种应用构成复杂的IT业务系统,保证这些资源的正常运转,是一个公司IT部门的职责,而要让这些应用能够正常地运行,则需要专业IT人员进行设计、架构、维护和调优。在这个过程中,为了及时掌控基础环境和业务应用系统的可用性,需要获取各个组件的运行状态,如CPU的利用率、系统负载、服务的运行、端口的连通、带宽流量、网站访问状态码等信息。而这一切都离不开监控系统。
监控系统的实现
一个监控系统的组成大体可以分为两部分:数据采集部分(客户端)和数据存储分析告警展示部分(服务端)
数据采集:工作模式可以分为被动模式和主动模式
被动模式:服务端到客户端采集数据
主动模式:客户端主动上报数据到服务端
数据采集方式:专用客户端采集和共用协议采集
监控系统的软件
在监控软件中,开源的解决方案有流量监控(MRTG、Cati、SmokePing、Craphite等)和性能告警(Nagios、Zabbix、Zenoss Core、Ganglia、OpenTSDB等)可供选择,并且每种软件都有自己的特点和功能,各自的侧重点和目标不完全相同,在设计理念和实现方法上也大同小异,但都具有共同特征,例如:采集数据、分析展示、告警以及简单的故障自动处理。
MRTG
MRTG(Multi Router Traffic Grapher)是一套可用来绘制流量图的软件,由瑞士奥尔滕的Tobias Oetiker与Dave Rand所开发,以GPL授权。
MRTG最早的版本是在1995年推出的,用Perl语言写成,可夸平台使用,数据采集用SNMP协议,MRTG将收集到的数据通过Web页面以GIF或PNG格式绘制出图像,并以日、周、月为单位分别绘出,可以查询最大值和最小值。
现在出了各种插件,因此也可以监控服务器的硬盘使用量、CPU的负载等
Cacti
Cacti(英文含义为仙人掌)是一套基于PHP、MySQL、SNMP和RRDtool开发的网络流量监测图形分析工具,
SmokePing
SmokePing主要用于监控网络性能,包括常规的ping、www服务器性能DNS查询性能、SSH性能等,底层也用RRDtool做支持,特点是绘制的图非常漂亮,网络丢吧和延迟用颜色和阴影来表示,支持将多张叠放在一起.
Graphite
Graphite 是一个用于采集网站实时信息进行统计的开源项目。Graphite服务支持平均每分钟4800次更新操作,采用简单文本协议,具有绘图功能,其即插即用的功能可方便地用于任何需要监控的系统上。
Graphite本身并不收集具体的数据,这些数据收集的工作通常由第三方工具或插件完成,因此,可以说Graphite是一个绘图工具。
Nagios
Nagios 是一个企业级的监控系统,可监控服务的运行状态和网络信息等,并能监视所有指定的本地或远程主机参数以及服务,同时提供异常告警通知功能等;
Nagios可运行在Linux和Unix平台上,同时提供一个可选的基于浏览器的web界面,以方便管理人员的可用性,能及时根据触发条件告警。
Zenoss Core
Zenoss Core (简称:Zenoss)是开源企业级IT管理软件,它允许IT管理依靠单一的web控制台来监控网络架构的状态和监控度。
Ganglia
Ganglia 是一个跨平台的、可扩展的、高性能的分布式监控系统,如集群和网络。它基于分层设计,使用广泛的技术,用RRDtool存储数据,具有可视化界面,适合于对集群系统的自动化监控。其精心设计的数据结构和算法使得监控端到被监控端的连接开销非常低。目前已经有成千上万的集群正在使用这个监控系统,可以轻松地处理2000个节点的集群环境。
OpenTSDB
开源监控系统openTSDB用HBase存储所有时序(无需采样)的数据,来构建一个分布式、可伸缩的时间序列数据库。它支持秒级数据采集,支持永久存储,可以做容量规划,并很容易地接入到现有的告警系统里,OpenTSDB可以从大规模的集群(包括集群中的网络设备、操作系统、应用程序)中获取相应的采集指标,并进行存储、索引和服务,从而使这些数据更容易让人理解,如WEB化、图形化等
Zabbix
Zabbix 是一个分布式监控系统,支持多种采集方式和采集客户端,有专用的Agent(代理),也可以支持SNMP、IPMI、JMX、等多种协议,它将采集的数据存放到数据库,然后对其进行分析整理,达到条件触发告警。
监控系统的原理
监控的诞生
对出现的故障,能及时通知告警和故障的自动修复,对运维人员响应处理故障的速度会大大加快,甚至在异常严重的故障情况下,对及时采用应急预案,有不可或缺的作用,如果没有监控,故障的反馈往往来自用户的报告,然后才由运维人员处理。
监控系统的实现
监控系统往往需要对物理硬件和应用软件的性能和参数进行数据汇集,实现集中管理和统一分析。
在一个监控系统中,构成要素为监控服务器端程序、数据存储、被采集节点等相关模块,其告警分析和自动故障处理功能由服务器执行。
监控系统需要提供一个API,方便其他功能系统对监控数据进行管理,这在业务系统精密的情况下显得特别重要,通常对外提供API功能的软件;
监控系统性能指标
监控项目 | 详细内容 |
---|---|
主机监控 | CPU、内存、磁盘的剩余空间/利用率/I/O SWAP使用率、系统UP时间、进程数、负载 |
网卡监控 | ping的往返时间及包成功率、网卡流量,包括流入/流出量和错误的数据包数 |
文件监控 | 监控文件大小,Hash值,匹配查询、字符串存在与否 |
URL监控 | 监测指定URL访问过程中的返回码、下载时间及文件大小、支持内容匹配 |
应用程序 | 端口和内存使用率、CPU使用率、服务状态、请求数、并发连接数、消息队列的字节数、 Client事务处理数、service状态等 |
数据库 | 监控数据库中指定的表空间、数据库的游标数、Session数、事务数、死锁数、缓冲池命中率、 库Cache命中率、当前连接数、进程的内存利用率等性能参数 |
日志 | 错误日志匹配、特定字符串匹配 |
硬件 | 温度、风扇转速、电压等 |
监控系统对时间的要求
监控系统需要根据实际应用的需求,实时/非实时地采集和展示数据。另外,包括历史趋势数据的展示和分析,以及容量报表、可用性报告的生成。
监控系统的告警需要
支持多种方式,如短信、邮件、IM和其他接口,具备可定制化功能,对第三方告警介质提供可编程接口。