一.监测服务的定义:
首先看看在localhost.cfg中定义的一个本地系统根分区空间使用状况监测服务:
------------------------------------------------------------------
define service{
use local-service
host_name localhost
service_description Root Partition
check_command check_local_disk!20%!10%!/
}
------------------------------------------------------------------
可以发现这个服务的定义名叫做Root Partition,而这个Root Partition的实际功能则是在于check_command这个配置项中指定的参数,在这里它后面的参数是“check_local_disk!20%!10%!/”,那么这一串到底是什么意思呢?其实它应该被分开成两部分,即“check_local_disk”和“!20%!10%!/”。
二.监测命令的定义:
先来说说前面的那个“check_local_disk”,这就是Nagios的监测服务所使用到的“命令”,而这个命令的具体内容是在commands.cfg文件中定义的,commands.cfg这个文件就是专门定义命令用的配置文件。而在localhost.cfg或者其他文件中定义服务的时候所用到的命令,都必须是在command.cfg中定义过的命令。在commands.cfg中“check_local_disk”是如下定义的:
------------------------------------------------------------------
define command{
command_name check_local_disk
command_line $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
}
------------------------------------------------------------------
与其他的功能对象定义文件的格式相似:
------------------------------------------------------------------
define command{
通过define关键字command来表示一个命令定义段,定义内用在两个大括号内,并且一个属性必须占一行。如果要定义多个命令的话要写多个define command {}段。
command_name check_local_disk
通过command_name来定义命令的名字。在服务的定义当中,只能引用这种在commands.cfg中定义过的命令名。
command_line $USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
通过command_line来定义该命令的所使用到的插件程序以及参数配置格式。
}
------------------------------------------------------------------
三.Nagios的插件程序:
这里还要说明一下command_line后面的命令格式是怎么回事。command_line后面指定了定义命令时所使用到的Nagios插件程序以及相关的参数格式。那么,这些插件是如何指定的呢?
这些插件在安装了Nagios-plugins插件程序包后,就会在Nagios的主路径下的libexec里找到相应的插件程序。
浏览插件程序目录
[root@KCentOS5C ~]# ls /usr/local/nagios/libexec/
------------------------------------------------------------------
check_apt check_flexlm check_load check_overcr check_swap
check_breeze check_ftp check_log check_ping check_tcp
check_by_ssh check_http check_mailq check_pop check_time
check_clamd check_icmp check_mrtg check_procs check_udp
check_cluster check_ide_smart check_mrtgtraf check_real check_ups
check_dhcp check_ifoperstatus check_nagios check_rpc check_users
check_dig check_ifstatus check_nntp check_sensors check_wave
check_disk check_imap check_nntps check_simap negate
check_disk_smb check_ircd check_nt check_smtp urlize
check_dns check_jabber check_ntp check_spop utils.pm
check_dummy check_ldap check_nwstat check_ssh utils.sh
check_file_age check_ldaps check_oracle check_ssmtp
------------------------------------------------------------------
这些就是Nagios-plugins的所有插件程序。之前在定义check_local_disk这个命令时所使用到的插件程序ckeck_disk也在其中。这些插件程序都是一个一个的独立的二进制可执行程序,也就是说,他们可以独立运行,有自己参数和选项,当然也有帮助。这里做一个示范:
察看check_disk插件程序的使用
[root@KCentOS5C ~]# /usr/local/nagios/libexec/check_disk -h
------------------------------------------------------------------
check_disk v1793 (nagios-plugins 1.4.10)
Copyright (c) 1999 Ethan Galstad
Copyright (c) 1999-2006 Nagios Plugin Development Team
This plugin checks the amount of used disk space on a mounted file system
and generates an alert if free space is less than one of the threshold values
Usage: check_disk -w limit -c limit [-W limit] [-K limit] {-p path | -x device}
[-C] [-E] [-e] [-g group ] [-k] [-l] [-M] [-m] [-R path ] [-r path ]
[-t timeout] [-u unit] [-v] [-X type]
这个就是check_disk的使用格式。
Options:
-h, --help
显示帮助信息。
-V, --version
显示版本信息。
-w, --warning=INTEGER
设定产生告警的磁盘个数的阀值,低于该磁盘数量则产生告警通知。
-w, --warning=PERCENT%
设定产生告警的百分比阀值,可用空间低于该百分比值就产生告警通知。
-c, --critical=INTEGER
设定产生严重告警的磁盘个数的阀值,低于该磁盘数量则产生严重告警通知。
-c, --critical=PERCENT%
设定产生严重告警的百分比阀值,可用空间低于该百分比值就产生严重告警通知。
......
------------------------------------------------------------------
四.Nagios的资源文件:
通过上面的分析就一定能够了解后“$USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$”的大致意思了,就是调用check_disk插件程序,并且指定了调用该执行程序的选项-w、-c、-p,并且$ARG1$、$ARG2$、$ARG3$分别是这3个选项后面跟加的参数值,但是这些只是参数变量,那么具体的参数值在哪里设定呢?让我们回头再看看在服务中定义的“check_local_disk!20%!10%!/”后面的“20%!10%!/”,后半部分就是预先指定的参数值了,通过感叹号“!”来分隔参数。
这样看或许会相对容易理解:
------------------------------------------------------------------
check_local_disk ! 20% ! 10% ! /
$USER1$/check_disk -w $ARG1$ -c $ARG2$ -p $ARG3$
------------------------------------------------------------------
也就是说20%和10%是正好匹配-w和-c两个选项的参数值,而最后-p选项的参数值使用缺省,这里就通过“/”来表示。
至于$USER1$/check_disk这个变量路径是在哪里指定的呢?其实这个就是定义在Nagios的资源文件resource.cfg里面了。
[root@KCentOS5C ~]# vi /usr/local/nagios/etc/resource.cfg
------------------------------------------------------------------
# Sets $USER1$ to be the path to the plugins
$USER1$=/usr/local/nagios/libexec
这里就定义$USER1$这个路径变量,用来帮助Nagios找到自己的plugins插件程序的位置。
------------------------------------------------------------------
五.Nagios服务与命令还有插件的关系的总结:
基本上要分为三个步骤
1.首先要在确认在libexec/目录下的插件程序的使用方式,以及相关参数选项的格式。如果对某个插件程序的使用方法不是很明确的话,可以到插件目录下使用-h参数来执行插件程序,以了解和掌握该插件的使用方式。
2.其次要在commands.cfg命令文件中定义命令,指定所用到的插件,并且写好会用到的选项和留出参数变量。如$USER1$/exec -a $ARG1$ -b$ARG2$ -c $ARG3$...这样。
3.最后在服务定义文件中指定定义过的命令名,加上合适的参数,每个之间通过“!”来分隔,如果一个参数当中还要分几个子参数的话,那么子参数之间通过都好“,”来分隔,最终把监测服务定义好。
六.给出一些基本常用服务与其相关命令和插件的对应关系示例:
通过比较各个配置文件当中的相关部分,可以加深理解。
1.连通监测服务:Ping指定主机。
------------------------------------------------------------------
define service{
use connection-service
host_name localhost,KCentOS5A,KCWIN2K3A,KCXP1
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}
define command{
command_name check_ping
command_line $USER1$/check_ping -H $HOSTADDRESS$ -w $ARG1$ -c $ARG2$ -p 5
}
Usage:check_ping -H
[-p packets] [-t timeout] [-4|-6]
-H, --hostname=HOST
host to ping
-w, --warning=THRESHOLD
warning threshold pair
-c, --critical=THRESHOLD
critical threshold pair
-p, --packets=INTEGER
number of ICMP ECHO packets to send (Default: 5)
------------------------------------------------------------------
2.连通监测服务:监测指定主机的TCP连接。
------------------------------------------------------------------
define service{
use connection-service
host_name localhost,KCentOS5A,KCWIN2K3A,KCXP1
service_description Check TCP 80
check_command check_tcp!80
}
define command{
command_name check_tcp
command_line $USER1$/check_tcp -H $HOSTADDRESS$ -p $ARG1$
}
Usage:check_tcp -H host -p port [-w
[-e
[-t
[-D
之前把Nagios的基本安装和配置都讲完了,但是Nagios最有趣的地方才刚刚开始。就是“服务”-“命令”-“插件”这3者的关系,体现了Naigos在监测工作中的原理,这一话就是特别用来分析其中的关系了。
本文转自http://hi.baidu.com/kouzl/item/d4c598d797969f4ffb5768b4