vim 10.0.4.56.cfg 加入如下内容:
define host{ use linux-server host_name 10.0.4.56 alias 10.0.4.56 address 10.0.4.56 } define service{ use generic-service host_name 10.0.4.56 service_description check_ping check_command check_ping!100.0,20%!200.0,50% max_check_attempts 5 normal_check_interval 1 } define service{ use generic-service host_name 10.0.4.56 service_description check_ssh check_command check_ssh max_check_attempts 5 normal_check_interval 1 } define service{ use generic-service host_name 10.0.4.56 service_description check_http check_command check_http max_check_attempts 5 normal_check_interval 1 }// 注意,这里的IP是client端的IP,监控的项目有三个ping, ssh, http。其实这三个项目使用的脚本都为本地脚本,也就是说,即使远程主机没有安装nagios和nrpe同样可以监控这些项目。但是如果想监控load,disk,等等就需要通过nrpe服务来搞定了,道理很简单,load和disk都需要登录到远程主机上去获得信息,而ping,ssh,http都不需要的。这个到远程主机获取相关的信息的过程是由nrpe完成的。如果你的client上没有启动nrpe服务那么我们是无法获取远程主机的load和disk等信息的。下面笔者配置一下使用nrpe来监控远程主机的相关项目。
在server端编辑/usr/local/nagios/etc/objects/commands.cfg
vim /usr/local/nagios/etc/objects/commands.cfg # 在最后面添加如下内容
define command{ command_name check_nrpe command_line $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$ }然后编辑10.0.4.56.cfg (还是server上)
cd /usr/local/nagios/etc/services
vim 10.0.4.56.cfg # 加入如下内容:
define service{ use generic-service host_name 10.0.4.56 service_description check_load check_command check_nrpe!check_load max_check_attempts 5 normal_check_interval 1 } define service{ use generic-service host_name 10.0.4.56 service_description check_disk_hda1 check_command check_nrpe!check_hda1 max_check_attempts 5 normal_check_interval 1 } define service{ use generic-service host_name 10.0.4.56 service_description check_disk_hda2 check_command check_nrpe!check_hda2 max_check_attempts 5 normal_check_interval 1 }这里需要解释一下相关的”check_command”, 先看这个” check_nrpe!check_load” 这里的check_nrpe就是上面/usr/local/nagios/etc/objects/commands.cfg中刚刚定义的,后面的check_load是在远程主机上定义的一个命令脚本。具体在哪里定义稍后介绍。为什么中间加一个”!”,这个是nagios特有的形式,无需关心。下面需要到远程主机上去定义上面用到的脚本了。
在远程主机上编辑/usr/local/nagios/etc/nrpe.cfg 文件
vim /usr/local/nagios/etc/nrpe.cfg (client上)
把” command[check_hda1]”那行改成:
command[check_hda1]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda1
然后再增加一行:
command[check_hda2]=/usr/local/nagios/libexec/check_disk -w 20% -c 10% -p /dev/hda2
这里的check_hda1 和 check_hda2 都是自定义的,和server端的定义的service中的check_command对应。也就是说,如果在server端定义了一个service(通过nrpe方式)那么必须要在客户端上的nrpe.cfg中定义相应的脚本。保存这个文件后,需要重新启动一下nrpe服务。
killall nrpe ; /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d (client上)
重启nagios服务
修改了配置需要重启服务才能使添加的监控主机生效。
/etc/init.d/nagios restart (server上)
此时再到web页面去观察是否多了一台10.0.4.56
在nagios客户端上自定义监控脚本在开始,笔者就讲过,我们可以自定义写监控脚步,从上面的例子中也可以看到监控磁盘状态时,是根据磁盘分区来监控的。这样不免有些麻烦���因为每台主机的磁盘分区状况都不一样(一样还好),而且有多少个分区就需要定义多少个命令。所以笔者就自定义写一个shell脚本来监控所有的磁盘分区:
在客户端上创建脚本/usr/local/nagios/libexec/check_disk.sh
vim /usr/local/nagios/libexec/check_disk.sh 写入如下内容:(client上)
#!/bin/bash row=`df -h -P|wc -l` status=0 for i in `seq 2 $row` do spare=`df -h -P|sed -n "$i"p|awk '{print $4}'` use_percentage=`df -h -P|sed -n "$i"p|sed -n "s/\%//"p|awk '{print $5}'` spare_percentage=`expr 100 - $use_percentage` partition_name=`df -h -P|sed -n "$i"p|awk '{print $6}'` if [ "$spare_percentage" -lt "3" ];then echo -n "$partition_name CRITICAL ${spare_percentage}% $spare " status[$i]=2 elif [ "$spare_percentage" -lt "5" ];then echo -n "$partition_name WARNING! ${spare_percentage}% $spare " status[$i]=1 else echo -n "$partition_name OK ${spare_percentage}% $spare " status[$i]=0 fi done zhuangtai=0 for j in `seq 2 $row` do if [ "${status[$j]}" -gt "$zhuangtai" ];then zhuangtai=${status[$j]} fi done exit $zhuangtai保存后,修改该脚本的权限
chmod +x /usr/local/nagios/libexec/check_disk.sh (client上)
然后编辑/usr/local/nagios/etc/nrpe.cfg文件
vim /usr/local/nagios/etc/nrpe.cfg # 加入一行:(client上)
command[check_disk]=/usr/local/nagios/libexec/check_disk.sh
保存,重启nrpe服务
killall nrpe ; /usr/local/nagios/bin/nrpe -c /usr/local/nagios/etc/nrpe.cfg -d (client上)
检测刚才的脚本是否正常运行的方法是,到server端执行如下命令:
/usr/local/nagios/libexec/check_nrpe -H 10.0.4.56 -c check_disk (server上)
如果正常的话,会输出一行磁盘检测的数据,否则可能会报错。
到server上添加相应的service
cd /usr/local/nagios/etc/services (server上)