大纲

一、监控概述

二、监控分类

三、监控工具

四、总结

说明:本博文的一些内容自于开源社区与官方网站并不是所有内容全是原创。


一、监控概述

如何对现有IT架构的整体以及细节运行情况进行科学、系统和高效地监控是目前各企业运维和管理部门一项非常重要的工作内容。随着当前企业IT环境中服务器、应用数量和类型的不断地增加,运维部门需要通过科学和高效的手段尽可能详细、实时和准确地获取整个架构中具体到每个服务器、每个系统甚至每个应用程序工作的细节,并且会对所获取到的原始数据进行分析、绘图和统计,以便为后续的性能调优、建构调整以及各类型排错建立参考依据。


常见的监测对象基本上涵盖了IT运行环境的方方面面,包括机房环境、硬件、网络等,而每一个方面所涉及的监测项目则种类繁多。例如对硬件环境的监测中,所涵盖内容就会包括服务器的工作温度、风扇转速等指标;针对系统环境的监测,将包括基本的操作系统运行环境,如CPU、内存、I/O、存储空间使用状况、网络吞吐量、进程数量和状态等情况;针对具体的应用情况,涉及监测的内容可能会更多,而且也会有很多专门针对应用的指标。


除了监测的内容需要尽量全面之外,同时我们还希望所使用的监测解决方案能够灵活和具备更多扩展功能。例如有效地支持IT架构的变化和扩展,在监测量增加的情况下能够尽可能少地占用资源,拥有强大的事件通知机制等等。


本博文所涉及的内容,主要是针对操作系统以及软件环境的监测,而且尤其是针对Linux操作系统的运行情况监测。尽管目前有很多的商用软件以及解决方案来实现相关的功能,但是实际上我们也有很多开源的解决方案可以起到相同的作用,而且效果也非常不错。下面的内容中,我们将会对这些解决方案的实现方法进行详细描述。


二、监控分类

在Linux系统上的系统监测所采用的方式基本上有两种,


第一种,通过SNMP协议结合数据采集软件来实现:

这种方法所涉及的架构一般包括两部分,其中一部分是被监测服务器,另外一部分则是监控端。至于实现方法具体来说就是在Linux服务器上启动SNMP简单网络管理协议的进程snpmd来动态提供服务器在软件甚至硬件各方面的运行参数,这样服务器就成为了一个被监测的节点。然后在其他的监控服务器上的客户端软件应该具备两个功能:采集SNMP数据以及汇总统计信息。在绝大多数情况下,监控服务器上的监测软件都会基于Web页面方式提供系统运行状态图,而且涵盖了各种运行指标。同时新的状态信息能够动态更新到Web页面。这种类型的监测所获得的数据格式标准而且全面,配置简单,所以从综合监测的角度看是一个不错的方案。


第二种,通过编写脚本调用系统状态监测的命令,并结合数据采集软件来实现:

在某些情况下,SNMP协议的配置会相对比较麻烦,而且获取SNMP信息往往需要考虑选择不同的监测软件。从另外一个角度讲,其实Linux操作系统本身就提供了很多非常好用的状态获取工具,如sar(可实现多个指标的监测),iostat(专用于I/O使用率监测),vmstat(专用于cpu和内存使用情况监测)以及free命令等工具。这些工具都可以通过结合系统任务计划以及自编脚本进行周期性调用,这就给监测提供了相当的便利。因为可以将这些命令嵌入到脚本中以周期性生成系统监测软件所需要的数据,最终一样可以通过这些数据结合绘图软件绘制出直观的统计图。这种类型的监测所获得的信息更加灵活和精确,对于一些熟悉脚本编程的用户来说,使用起来更是得心应手。另外采用这种方式的情况下,利用命令监测可以无限制扩展,用户可以通过各种管道来获得和定制自己的监测脚本。


三、监控工具

常用的监控工具有,

  • MRTG

  • RRDTool

  • Cacti

  • Nagios

  • Zabbix

  • ……


1.什么是MRTG?

MRTG是一套历史悠久的软件,监测网络流量很方便,但是如果需要监测其他的系统性能,比如CPU负载、系统负载、网络连接数等,就不是那么简单了。即使实现了这些功能,但管理起来非常麻烦。比如公司有一两千个被监测点,分布在不同的机房,为了管理方便需要将这些服务器和网络设备分类,这样的话就需要将这些被监测点放在不同的MRTG配置文件中,运行多个crontab,甚至还要自己写HTML页面对其进行管理。


优点:

简单、易上手,基本安装完了之后只要修改一下配置文件即可使用。


缺点:

  • 使用文本式的数据库,数据不能重复使用。

  • 只能按日、周、月、年来查看数据。

  • 由于MRTG本来只是用来监测网络的流量,所以只能存储两个DS(Data Source),即存储流量的输入和输出。

  • 每取一次数据即需要绘图一次,浪费系统资源。

  • 图像比较模糊。

  • 无用户、图像管理功能。

  • 没有详细日志系统。

  • 无法详细了解各流量的构成。

  • 只能用于TCP/IP网络,对于SAN网络流量无能为力。

  • 不能在命令行下工作。


官方网站:

http://oss.oetiker.ch/mrtg/


2.什么是RRDTool?

与MRTG一样,RRDTool也是由瑞士人Tobias Oetiker撰写的开源软件,但RRDTool并非MRTG的升级版本,两者有非常大的区别,也可以说RRDTool是将用来取代MRTG的产品。RRDtool是使用“C”程序语言开发的,它保存收到的数据到 “.rrd” 文件。”.rrd” 文件里的记录的数量将永远不会增加,这就意味着旧的记录将被经常移除。这意味着人们可以获得最近日志数据的精确图形,也可以获得基于旧数据的模糊图形。默认的,你可以有每天,每周,每月和每年的图形。简单的说,rrdtool就是一个强大的绘图的引擎。


优点:

  • 使用RRD(Round Robin Database)存储格式,数据等于放在数据库中,可以方便地调用。比如,将一个RRD文件中的数据与另一个RRD文件中的数据相加。

  • 可以定义任意时间段画图,可以用半年数据画一张图,也可以用半小时内的数据画一张图。

  • 能画任意个DS,多种图形显示方式。

  • 数据存储与绘图分开,减轻系统负载。

  • 能任意处理RRD文件中的数据,比如,在浏览监测中我们需要将数据由Bytes转化为bits,可以将原始数据乘8。


缺点:

  • RRDTool的作用只是存储数据和画图,它没有MRTG中集成的数据采集功能。

  • 在命令行下的使用非常复杂,参数极多。

  • 无用户、图像管理功能。


官方网站:

http://oss.oetiker.ch/rrdtool/


3.什么是Cacti?

Cacti是一个使用RRDtool引擎的基于网页的PHP/MySql图形解决方案。Cacti是一套基于PHP、MySQL、SNMP及RRDTool开发的网络流量监测图形分析工具。它通过snmpget来获取数据,使用RRDtool绘画图形,它的界面非常漂亮,能让你根本无需明白rrdtool的参数能轻易的绘出漂亮的图形。而且你完全可以不需要了解RRDtool复杂的参数。它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、host以及任何一张图,还可以与LDAP结合进行用户验证,Cacti还提供自己增加模板的功能,让你添加自己的snmp_query和script!功能非常强大完善,界面友好。可以说,cacti将rrdtool的所有“缺点”都补足了!


官方网站:

http://www.cacti.net/


4.什么是Nagios?

Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。


Nagios是一个监视系统运行状态和网络信息的监视系统。Nagios能监视所指定的本地或远程主机以及服务,同时提供异常通知功能等。Nagios可运行在Linux/Unix平台之上,同时提供一个可选的基于浏览器的WEB界面以方便系统管理人员查看网络状态,各种系统问题,以及日志等等。


Nagios与Cacti区别:

Cacti 和 Nagios是不同功用的系统,Nagios 适合监视大量服务器上面的大批服务是否正常,重点并不在图形化的监控,其集成的很多功能例如报警与通知机制都是 Cacti 没有或者很弱的。Cacti 主要用还是用来收集历史数据和画图, 所以界面比 nagios 漂亮很多。


综合上述:

Cacti偏沉于收集流量画图,系统负载方面的。而Nagios偏沉于系统状态正常与否方面的, Nagios能够和短信发送机共同用来规模较大的网络,Cacti+Nagios 两者结合使用取长补短方为上上之策。


官方网站:

http://www.nagios.org/


5.什么是Zabbix?

概述:

Zabbix是一个基于WEB界面的提供分布式系统监视以及网 络监视功能的企业级的开源解决方案。Zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。


Zabbix由2部分构成,Zabbix Server与可选组件Zabbix Agent。


Zabbix Server可以通过SNMP,Zabbix Agent,Ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux, Solaris, HP-UX, AIX, Free BSD, Open BSD, OS X等平台上。


Zabbix Agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。Zabbix Agent可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD, OS X, Tru64/OSF1, Windows NT4.0, Windows (2000/2003/XP/Vista)等系统之上。


Zabbix Server可以单独监视远程服务器的服务状态;同时也可以与Zabbix Agent配合,可以轮询Zabbix Agent主动接收监视数据(Agent方式),同时还可被动接收Zabbix Agent发送的数据(trapping方式)。


另外Zabbix Server还支持SNMP (v1,v2),可以与SNMP软件(例如:net-snmp)等配合使用。


特点:

  • 安装与配置简单,学习成本低

  • 支持多语言(包括中文)

  • 免费开源

  • 自动发现服务器与网络设备

  • 分布式监视以及WEB集中管理功能

  • 可以无agent监视

  • 用户安全认证和柔软的授权方式

  • 通过WEB界面设置或查看监视结果

  • email等通知功能


功能:

  • CPU负荷

  • 内存使用

  • 磁盘使用

  • 网络状况

  • 端口监视

  • 日志监视


官方网站:

http://www.zabbix.com/


四、总结

大家从上面的博文中可以看到,我们监控种类有两种,一种是基于snmp的监控工具,另一种是基于编写脚本调用系统状态监测的命令来实现监控。这两种方式各有优势,大家可以在生产环境中根据实际需要进行选择使用,一般我们都是主要使用监控工具(Cacti与Nagios)进行监控并结合shell脚本进行辅助监控的方案。在下面的几篇博文中我们主要讲解snmp协议、RRDTool画图工具使用、Cacti监控工具使用、Nagios监控工具使用,最后有时间我们可以和大家说一说,怎么将Cacti与Nagios整合使用。好了,到这里我们Linux监控概述就说到这里,在下一篇博客中我们主要讲解snmp协议。希望大家有所收获^_^……