方法一:
实验思路:
第一步在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 #这个是对应ts1的IP地址,就是你要监控的机器。
}
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,监控的种类又不相同,那么原理还是一样的。只要在文件里添加好字段和参数就行了。
使用nagios监控指定的端口号