方法一:

实验思路:

第一步在commands.cfg文件中定义你要使用的检测命令:

vi /usr/local/nagios/etc/objects/commands.cfg

define command{

      command_name    tcp60910              #命令名

      command_line    $USER1$/check_tcp -H $HOSTADDRESS$ -p 60910 -t 60    #命令内容,该处调用到check_tcp这个脚本 -P后面是端口。如果你要监控很多端口,就多编几条,做示范就弄2条。 -t是超时时间,单位是秒。        }

define command{

      command_name    tcp60911              

      command_line    $USER1$/check_nt -H $HOSTADDRESS$ -p 60911 -t 60   #这里如果不用-t也可以,默认是10秒,假如你的监控端是电信,你被监控端是网通,那么你监控过去就会偶尔出现10秒以上,所以这个时间可以放大点,但最大是60秒。              }  

再定义主机组。

第二步定义要进行端口监控的主机并修改nagios.cfg文件使nagios可以识别:

#vi /usr/local/nagios/etc/objects/hosts.cfg  #注意,这个文件本身不自带的,可以直

VI编辑,别忘了还要去nagios.cfg里声明它的存在

下面是去声明它的存在,vi /usr/local/nagios/etc/nagios.cfg

# You can specify individual object config files as shown below:

cfg_file=/usr/local/nagios/etc/objects/hosts.cfg

cfg_file=/usr/local/nagios/etc/objects/commands.cfg

cfg_file=/usr/local/nagios/etc/objects/contacts.cfg

cfg_file=/usr/local/nagios/etc/objects/timeperiods.cfg

cfg_file=/usr/local/nagios/etc/objects/templates.cfg

下面是hosts.cfg的文件内容。

define host{

       use             linux-server         #这里是调用模板文件就是templates.cfg这个里面的linux-server模板,其实我们监控的是windows,可是我测试了下模板用windows就莫名其妙报错,大家可以用windows-server试试

       host_name       ts1                #这个是定义的ts1名字,这个名字用来给下面的members调用。

       alias           ts1                      #这个是会在网站监控按钮上显示的文字。

       address         XXX.XXX.XXX.XXX        #这个是对应ts1IP地址,就是你要监控的机器。


       }                                                                      


define host{            

                           #这里是第二台

       use             linux-server

       host_name       ts2

       alias           ts2

       address         XXX.XXX.XXX.XXX

       }

define hostgroup{

       hostgroup_name  Ts-servers          #主机组名 Ts-servers  同样等下要被监控服务调用。

       alias           Ts-Servers   #这个同上面那个一个意思,用来在web页面显示的名字。

       members         ts1,ts2     #这里就是调用上面的host_name内容,用”,"逗号分开,我这里就2台,全部添加进去了。

       }

好了,到最后一步,调用主机组名和命令来监控服务。

第三步定义需要端口监控的主机要监控的端口:

# vi /usr/local/nagios/etc/objects/windows.cfg配置

define service{

       use                             generic-service               #调用模板不累述。可以不调用,但你要再这直接把所有的信息都放进去,什么联系人,通知各种杂七杂八的字段都要填。直接弄个模板反正大多都是默认的,比如24X7小时监控之类的。

       hostgroup_name                  Ts-servers            #这个就是调用hosts.cfg里的define hostgroup下的hostgroup_name

       normal_check_interval           1           #这个是正常检测间隔时间,就是检测1次端口发现正常后下次检测的时间。默认是1分钟,在nagios.cfg里有个

interval_length=60 这个是指nagios的时间单位,默认是60秒,所以这里的1就是1分钟。

       retry_check_interval            1                          #这个是不正常检测间隔时间,就是检测发现不正常后下次检测的时间。

       service_description             port60910           #这个是描述,也是出现在web页面上的

check_command                   tcp60910          #这个是调用的命令,就是一开始定义好的命令。注意此check_command后面的tcp60910要跟command.cfg文件中定义的command_name的名称一致。

}

下面是监控第二个端口,意思就不累述了。

define service{  

       use                             generic-service             hostgroup_name                  Ts-servers         normal_check_interval           1         retry_check_interval            1

       service_description             port60911         check_command                   tcp60911         }  

最后重启nagios,如果重启失败,请直接#/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg来查看 nagios配置文件的错误信息。

我上面那个不能用windows-server模板就是这么检测出来的,坑爹啊,那个文件里明明有windows模板的,就是不能用,只好用linux-server.望后来人解决之。


方法二:

第二种方法是在定义命令的时候几个地方变一下

define command{

      command_name    tcp60910              #命令名        command_line    $USER1$/check_tcp -H

$HOSTADDRESS$ -p $ARG1$ -t $ARG2$    #"$ARG1$"这个是变量的意思,就是你想输什么就输什么,但一定要输对应意思的,等下下面会再说明。

      }

中间主机组和主机还是不变,最后的服务调用命令要变下

define service{  

       use                             generic-service             hostgroup_name                  Ts-servers         normal_check_interval           1         retry_check_interval            1

       service_description             port60911

第一个字段是填IP的,但因为$HOSTADDRESS$是在宏里定义好的。就是最终的host_name。方法2我没试过,网上说可以直接忽略写第二个字段。大家不

妨试试。这里就直接填了端口和延迟时间。


 check_command                   tcp60911!60910!60   #原来这里是没参数的,直接调用的命令名,主要是因为原来定义好了参数,现在要自己写。!号是分隔符         }

其实我觉得方法二灵活点。由于我现在用了centreon,所以也没直接配置nagios文件了。其实最终效果还是一样的

还有监控多线路HTTP页面的方法,有机会会更新好的。

如果你要定义100台机器,那么你只要定义好define host 然后在define hostgroup里添加好像ts1 ts2这样加下去就行了。

如果你既要监控windows又要监控linux,监控的种类又不相同,那么原理还是一样的。只要在文件里添加好字段和参数就行了。