说到监控软件,我们常常会想到Nagios、Cacti、Mrtg,那么这三种软件各自的特点是怎样的呢?
       MRTG(Multi Router Traffic Grapher):是一款很早期的监控网络链路流量负载的工具软件,它通过SNMP协议得到设备的流量信息,并将流量负载以包含PNG格式的图形的HTML 文档方式显示给用户,以非常直观的形式显示流量负载。
       MRTG最早的版本是在1995年春天所推出,以Perl所写成,源代码完全开放,因此可以跨平台使用。它利用了SNMP送出带有物件识别码(OIDs)的请求给要查询的网络设备,因此设备本身需支援SNMP。MRTG再以所收集到的资料产生HTML档案并以GIF或PNG格式绘制出图形,并可以日、周、月等单位分别绘出。它也可产生出最大值最小值的资料供统计用。原本MRTG只能绘出网络设备的流量图,后来发展出了各种plug-in,因此网络以外的设备也可由MRTG监控,例如服务器的硬盘使用量、CPU的负载等 。
        MRTG监测网络流量很方便,但是如果需要监测其他的系统性能,比如CPU负载、系统负载、网络连接数等,就不是那么简单了。即使实现了这些功能,但管理起来非常麻烦。例如:某公司有一两千个被监测点,分布在不同的机房,为了管理方便需要将这些服务器和网络设备分类,这样的话就需要将这些被监测点放在不同的MRTG配置文件中,运行多个crontab,甚至还要自己写HTML页面对其进行管理。MRTG毕竟是一套很老的软件,而且存在许多不足的地方,其作者Tobias Oetiker在1999年就已经开始开发另一套开源软件RRDTool来代替MRTG。现在RRDTool已经发展得很成熟,在功能上MRTG难以与其相提并论。
 
        CACTI:一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具,它通过snmpget来获取数据,使用RRDtool绘画图形。rrdtool 画图的网络监控系统,画图本领一流,画出来的图也漂亮,不像MRTG 画的图简单且难看。
       CACTI为三层架构:数据展现层、数据存储层、数据采集层,具体如下:
       数据采集层:通过SNMP或自定义脚本进行数据采集;
       数据存储层:通过CACTI模板将数据存储到MYSQL中;
       数据展现层:通过WEB(APCHE或NGINX)方式呈现;
       CACTI应用场景如下:
       (1)网络设备:接口流量(进与出的带宽)、监控CPU的负载、内存等、温度;
       (2)主机系统:接口流量(进与出的带宽)、监控CPU的负载、内存等、磁盘空间、进程数等;
       CACTI常见的监测对象:
       (1)服务器资源:CPU、内存、磁盘、进程、连接数等;
       (2)服务器类型:WEB、Mail、FTP、数据库;
       (3)网络接口:流量、转发速率、丢包率;
       (4)设备运行状态:风扇、电源、温度;
       (5) 机房运行环境:电流、电压、温湿度;

        NAGIOS:是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
        Nagios通常由一个主程序(Nagios)、一个插件程序(Nagios-plugins)和四个可选的附件(NRPE、NSCA、 NSClient++和NDOUtils)组成。Nagios的监控工作都是通过插件实现的,因此,Nagios和Nagios-plugins是服务器端工作所必须的组件。
        NRPE:用来在监控的远程Linux/Unix主机上执行脚本插件以实现对这些主机资源的监控。
        NSCA:用来让 被监控的远程Linux/Unix主机主动将监控信息发送给Nagios服务器(这在冗余监控模式中特别要用到)。
        NSClient++:用来监控Windows主机时安装在Windows主机上的组件。
        NDOUtils:则用来将Nagios的配置信息和各event产生的数据存入数据库,以实现 这些数据的快速检索和处理
        这四个ADDON(附件)中,NRPE和NSClient++工作于客户端,NDOUtils工作于服务器端,而NSCA则需要同时安装在服务器端和客户端。
        Nagios主要功能如下:
      (1)网络服务监控:SMTP、POP3、HTTP、NNTP、ICMP、SNMP、FTP、SSH)。
      (2)主机资源监控:CPU load、diskusage、system logs,也包括Windows主机(使用NSClient++plugin)。
      (3)可以指定自己编写的Plugin通过网络收集数据来监控任何情况(温度、警告……)。
      (4)可以通过配置Nagios远程执行插件远程执行脚本。
      (5)远程监控支持SSH或SSL加通道方式进行监控。
      (6)简单的plugin设计允许用户很容易的开发自己需要的检查服务,支持很多开发语言(shell scripts、C++、Perl、ruby、Python、PHP、C#等)。
     (7)包含很多图形化数据Plugins(Nagiosgraph、Nagiosgrapher、PNP4Nagios等)。
     (8)能够定义网络主机的层次, 允许逐级检查, 就是从父主机开始向下检查。
     (9)当服务或主机出现问题时发出通告,可通过email,pager, sms 或任意用户自定义的plugin进行通知。
     (10)能够自定义事件处理机制重新激活出问题的服务或主机,自动日志循环、支持冗余监控、包括Web界面可以查看当前网络状态,通知,问题历史,日志文件等。

       CACTI与NAGIOS区别及软件选型
        Cacti 和 nagios 是不同功用的系统,nagios更适合监视大量服务器上面的大批服务是否正常,重点并不在图形化的监控,其集成的很多功能例如报警,都是 cacti 没有或者很弱的。cacti 主要用途还是用来收集历史数据和画图,所以界面比 nagios 漂亮很多。
       Cacti在监控方面绘图比较不错,在流量与图型展现比较存在优势。Nagios在故障分析比较不错,报警机制相对来说比较好,报警机制:邮箱、短信等,而且也比Cacti灵活;同时适用监控大量服务器以及服务器上面大批服务状态是否正常,重点不在图形化,而在状态故障的监控。
    Cacti在LINUX下主要采用SNMP协议;snmp是简单网络管理协议,通过固定协议运行方式以OID格式提供系统运行状态的全面信息,然后通过snmp agent去获取这些信息并绘制流量。NAGIOS在LINUX下主要采用NRPE插件,NRPE通过ssl方式在C/S结构下调用被监控主机的状态监测脚本,并将获得的信息实时提供到监控服务器。
    Cacti偏沉于收集流量画图,系统负载方面的。而nagios偏沉于系统状态正常与否方面的, nagios能够和短信发送机共同用来规模较大的网络。