前言
nagios主要设计为收集状态数据,但是同时也可以收集一些性能数据,然后传递给外部的程序进行处理。
nagios有两种性能数据:1、检查性能数据;2、插件性能数据。
检查性能数据
检查性能数据是与主机或服务检查的实际执行相关的内部数据,包括服务检查等待时间(即,从其计划执行时间开始的服务检查“延迟”)以及执行主机或服务检查所花费的秒数。此类性能数据可用于执行的所有检查。
$HOSTEXECUTIONTIME$ 和 $SERVICEEXECUTIONTIME$ 这两个变量可以获取到主机和服务的性能数据。
插件性能数据
插件性能数据是指在执行主机或者服务检查的插件输出的外部数据,插件的数据可以包括诸如丢包百分比,可用磁盘空间,处理器负载,当前用户数等等,插件性能数据不是一定有的,不是所有的插件都有对应的插件性能数据产生。
$HOSTPERFDATA$和$SERVICEPERFDATA$ 变量可以获取到插件的性能数据(如果可用)。
例子
Nagios插件至少必须返回一行提示文本,说明服务或者主机的状态情况。例如,check_ping插件可能会返回一行文本,如下所示:
PING ok - Packet loss = 0%, RTA = 1.20 ms
整个文本行可以在$HOSTOUTPUT$或$SERVICEOUTPUT$ 变量中获得(看是主机检查还是服务检查)。
插件可以在其输出中返回可选的性能数据,方法是发送文本字符串,后跟管道符(|),然后是包含一个或多个性能数据指标的字符串。
以check_ping插件为例,假设它已经过增强,可以将百分比丢包和平均往返时间作为性能数据指标。插件的示例输出可能如下所示:
PING ok - Packet loss = 0%, RTA = 0.81 ms | percent_packet_loss=0, rta=0.81
当Nagios看到这个插件输出格式时,它会将输出分成两部分:
管道字符前的所有内容都被视为状态数据,并将存储在$HOSTOUTPUT$或$SERVICEOUTPUT$变量中
管道字符后面的所有内容都被认为是特定于插件的性能数据,并将存储在$ HOSTPERFDATA $或$ SERVICEPERFDATA $宏中
在上面的示例中,$HOSTOUTPUT$或$SERVICEOUTPUT$变量将包含“PING ok - Packet loss = 0%, RTA = 0.81 ms ”(不带引号),$HOSTPERFDATA$或$SERVICEPERFDATA$宏将包含“ percent_packet_loss = 0,rta = 0.81 ”(不带引号)。
nagios不针对插件性能数据坐处理,只是保存而已,因此,对数据格式没有什么要求,具体就看你外部处理这些数据需要什么样子的格式在规范输出就可以了。
配置
需要需要保存性能数据需要在配置文件里面打开开关。
在配置文件nagios.cfg中配置
process_performance_data=1
host_perfdata_file=/usr/local/nagios/var/host-perfdata
host_perfdata_file_template=DATATYPE::HOSTPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tHOSTPERFDATA::$HOSTPERFDATA$\tHOSTCHECKCOMMAND::$HOSTCHECKCOMMAND$
host_perfdata_file_mode=a
host_perfdata_file_processing_interval=15
host_perfdata_file_processing_command=process-host-perfdata-file
service_perfdata_file=/usr/local/nagios/var/service-perfdata
service_perfdata_file_template=DATATYPE::SERVICEPERFDATA\tTIMET::$TIMET$\tHOSTNAME::$HOSTNAME$\tSERVICEDESC::$SERVICEDESC$\tSERVICEPERFDATA::$SERVICEPERFDATA$\tSERVICECHECKCOMMAND::$SERVICECHECKCOMMAND$
service_perfdata_file_mode=a
service_perfdata_file_processing_interval=15
service_perfdata_file_processing_command=process-service-perfdata-file
配置命令,定时对性能数据进行备份,方便处理,不然一直追加到原来的文本,有可能出现不完整的数据
define command {
command_name process-host-perfdata-file
command_line /bin/mv /usr/local/nagios/var/host-perfdata /usr/local/nagios/var/spool/perfdata/$TIMET$.perfdata.host
}
define command {
command_name process-service-perfdata-file
command_line /bin/mv /usr/local/nagios/var/service-perfdata /usr/local/nagios/var/spool/perfdata/$TIMET$.perfdata.service
}
总结
nagios很强大,很灵活,仔细探索会有很多很好用的东西。