在Nagios下的图表展示有很多种的解决方案,像以前有说过的Nagiosgraph就是其中的一种,需要可以参看:http://jim123.blog.51cto.com/4763600/1956268,而在这里就说一说其他比较常用的Nagios图表解决方案,说到这里不得不说一下在Nagios中优良的性能来自于Perl,所以在Nagios的图表解决方案中把Nagios的数据放在MySQL或者其他数据中其实性能未必会比直接放在磁盘中更好,所以在这里所使用的Nagios图表插件是pnp4nagios,同Nagiosgraph一样pnp4nagios也是使用rrdtool数据库来展示Nagios的数据信息,不同的是Nagiosgraph的前端使用的是Perl,而在pnp4nagios则是php,这样就使得使用pnp4nagios的界面会比Nagiosgraph更为直观、好看一些,而大多数所使用的Nagios的图表都是用pnp4nagios。pnp4nagios这个名字是因为在pnp4nagios下有4种工作模式:synchronous模式、bulk模式、带npcd的bulk模式和带npcdmod的bulk模式,4种模式分别如下:

synchronous模式:及时模式,最简单,也是最容易配置的一种模式,nagios在检测过每一个主机或者服务时,会调用perl脚本process_perfdata.pl来处理获得perfdata数据,此种模式能处理1000个以下,且检测间隔为5分钟的服务。

bukl模式:集中处理模式,nagios会将需要的数据写入一个临时文件中, 然后再通过nagios调用process_perfdata.pl来一次性处理。这种模式性能比第一种高一些,但是也同带来一些风险,nagios会block。

带npcd的bulk模式:定时将perfdata文件mv为一个带时间戳的文件,然后由npcd进程在对mv的perfdata进行处理。此模式性能比较高,并且和nagios独立,不会影响nagios的性能。

带npcdmod的bulk模式:和第三种类似,不过使用了nagios嵌入模块完成。

在这这里可以根据实际情况选用相应的模式,pnp4nagios建议在官网(http://docs.pnp4nagios.org/)下载最新的版本,这样里面的绘图模板也是最多的,安装很简单,如下:

[root@localhost pnp4nagios-0.6.26]# yum -y install rrdtool perl-rrdtool perl-Time-HiRes perl-URI perl-String-CRC32 perl-IO-Socket-INET6 perl-Socket6
[root@localhost src]# tar -zxvf pnp4nagios-0.6.26.tar.gz && cd pnp4nagios-0.6.26
[root@localhost pnp4nagios-0.6.26]# ./configure --prefix=/usr/local/pnp4nagios --with-nagios-user=nagios --with-nagios-group=nagcmd
#在这里Nagios的用户组可以根据Nagios所安装时使用的用户组即可,也可以不指定在之后再修改文件属组
[root@localhost pnp4nagios-0.6.26]# make all && make fullinstall

在安装好后可以到指定的perfix路径下的etc目录中找到需要修改的文件说明

[root@localhost pnp4nagios-0.6.26]# cd /usr/local/pnp4nagios/etc/
[root@localhost etc]# cat nagios.cfg-sample#自己选用一种模式,在这里选用的是Bulk模式,把Bulk中的内容复制一份到Nagios的nagios.cfg中
[root@localhost etc]# vim /usr/local/nagios/etc/nagios.cfg
…略…
#php4nagios
process_performance_data=1
service_perfdata_file=/usr/local/pnp4nagios/var/service-perfdata
service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPE
RFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$\tSERVICESTATE::$SERVICESTATE$\tSERVICESTATE
TYPE::$SERVICESTATETYPE$
service_perfdata_file_mode=a
service_perfdata_file_processing_interval=15
service_perfdata_file_processing_command=process-service-perfdata-file

host_perfdata_file=/usr/local/pnp4nagios/var/host-perfdata
host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOM
MAND$\tHOSTSTATE::$HOSTSTATE$\tHOSTSTATETYPE::$HOSTSTATETYPE$
host_perfdata_file_mode=a
host_perfdata_file_processing_interval=15
host_perfdata_file_processing_command=process-host-perfdata-file
[root@localhost etc]# cat misccommands.cfg-sample#根据这个说明配置Nagios的commands.cfg文件
[root@localhost etc]# vim /usr/local/nagios/etc/objects/commands.cfg
…略…
#php4nagios
define command {
       command_name    process-service-perfdata-file
       command_line    /usr/local/pnp4nagios/libexec/process_perfdata.pl --bulk /usr/local/pnp4nagios/var/service-perfdata
}

define command {
       command_name    process-host-perfdata-file
       command_line    /usr/local/pnp4nagios/libexec/process_perfdata.pl --bulk /usr/local/pnp4nagios/var/host-perfdata
}
[root@localhost etc]# vim /usr/local/nagios/etc/objects/templates.cfg修改下模板templates.cfg
…略…
#pnp4nagios
define host {
        name            host-pnp
        action_url      /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=_HOST_
        register        0
        }

define service {
        name            srv-pnp
        action_url      /pnp4nagios/index.php/graph?host=$HOSTNAME$&srv=$SERVICEDESC$
        register        0
        }
[root@localhost etc]# /etc/init.d/npcd start#用启动脚本启动

在平时需要显示图表信息的host部分添加上host-pnp,service部分添加上srv-pnp,再重启Nagios和httpd这样就会在监控页面显示出图表信息了,如下:

define host{
        use             network-printers,host-pnp
        host_name       hplj_M177
        alias           HP LaserJet M177
        address         192.168.0.251
        hostgroups      network-printers
        contact_groups  admins
        }
define service{
        use                     network-printers,srv-pnp
        host_name               hplj_M177
        service_description     Printer Status
        check_command           check_snmp!-C public -o sysDescr.0
        check_interval  10
        retry_interval  1
        max_check_attempts      2
        notifications_enabled   1
        }
define service{
        use                     network-printers,srv-pnp
        host_name               hplj_M177
        service_description     PING
        check_command           check_ping!3000.0,80%!5000.0,100%
        check_interval  10
        retry_interval  1
        max_check_attempts      2
        notifications_enabled   1
        }

pnp4nagios的安装_nagios

点开图表图标后会有一个安装后的检查页面,如果都没有报错的话就根据提示移除或重命名该页面:

pnp4nagios的安装_pnp4nagios_02

要注意的使用pnp4nagios绘图会用到php的session,在这里如果报错多是php的session变量不对或session路径没有权限,需要根据实际的提示修改,这里都通过了就重命名了

[root@localhost etc]# cd /usr/local/pnp4nagios/share/
[root@localhost share]# mv install.{php,bak}

在配置好后再次点开图表图标后就会出现相应在模板中定义好的图表了,pnp4nagios中定义rrdtool的php模板路径在/usr/local/pnp4nagios/share目录下的templates.dist和templates.special中,其中templates.dist常用的模板,在templates.special放自定义的模板,要注意的是如果要展示的监控项没有相应的模板就会报类似于以下错误:

pnp4nagios的安装_nagios_03

当然你也可以根据实际自行定义你的模板,同时建议在做好后添加一个监控npcd的进程,确保npcd进程都在

[root@localhost ~]# /usr/local/nagios/libexec/check_procs -a 'npcd' -c 1:
PROCS OK: 1 process with args 'npcd' | procs=1;;1:;0;