系统环境说明:
nagios版本:3.4.1
nagios安装路径:/usr/local/nagios
nagios服务器IP:192.168.2.180
被监控端IP:192.168.2.182
 
提示:以下内容基于本人的另外一篇博客《Nagios之安装篇》,可能系统环境与配置文件路径等与大家略有不同,如果你发展文中提到的某些文件或命令没有找到请参考。
 
一、基于check_nrpe方式
 
1、nagios服务器端配置
 
只要在主机的服务定义配置文件中添加相关的定义即可,这里以一个简单的自己写的脚本check_user检测登录用户数为例:
vi /usr/local/nagios/etc/objects/basic.cfg  ==>  添加如下行  (注意我这里的basic.cfg是自己创建的,大家根据自己的主机配置文件添加就可以了)
 
define service{
        use                             linux-service
        hostgroup_name                  basic
        service_description             Current User
        check_command                   check_nrpe!check_user
        }
 
2、远程被监控端配置
 
首先要创建check_user脚本,这里我自己写个很简单的:
vi /usr/local/nagios/libexec/check_user  ==>  添加以下内容
 
#!/bin/bash
# for nrpe check user
U=`who | wc -l`
if [ $U -le 3 ];then
echo "OK,current user is:$U"
exit 0
elif [ $U -gt 6 ];then
echo "CRITICAL,current user is:$U"
exit 2
else
echo "WARNING,current user is:$U"
exit 1
fi
 
给脚本添加执行权限,更改属主属组为nagios
chmod +x /usr/local/nagios/libexec/check_user
chown nagios.nagios /usr/local/nagios/libexec/check_user
 
接下来这一步应该是最令人困惑的,因为如果只做到这里就去尝试执行check_nrpe -H IP -c check_user时会提示check_user这个命令没有定义,其实这个命令在nrpe的配置文件中定义的。
vi /usr/local/nagios/nrpe.cfg   ==>  添加如下行
 
commands[check_user]=/usr/local/nagios/libexec/check_user
 
然后重启nrpe服务
 
3、在nagios服务器端测试
 
/usr/local/nagios/libexec/check_nrpe -H 192.168.2.182 -c check_user
 
如果顺利的话执行成功会返回例如:OK,current user is:2 
 
小结:总体的实现过程就是这样的,脚本其实写的非常简单,大家在工作中可以自由发挥,通过上边的例子也可以看出来nagios是通过脚本执行的返回值来确定状态的,0为正常、1为警告、2为紧急,所以exit的退出状态码可不要乱写,另外就是在脚本中判断好什么情况下处于那种状态,当然脚本也可以接受传递的参数用于给不同的被监控端设置不同的阀值,最后别忘了重启nagios使新配置生效。
 
二、基于check_by_ssh方式
 
这种方式通过名字就可以看出来是通过ssh连接到被监控端来执行命令的,所以必须配置nagios服务器端能够通过密钥无密码连接到被监控端。先来简单的说下配置ssh的公钥访问,首选切换到nagios用户,因为肯定都是以nagios用户来执行这些脚本的,所以得配置nagios用户能够无密码访问
 
1、以下过程均在nagios服务器端配置:
su - nagios
ssh-kengen -t rsa ==>   执行这个命令时为了省事,一路回车即可
ssh-copy-id -i /home/nagios/.ssh/id_rsa.pub nagios@192.168.2.182 ==>  这次要输入被监控端的nagios用户的密码
 
测试无密码ssh登录
ssh nagios@192.168.2.182    ==>  顺利的话,这次不需要输入密码就直接连接到被监控端
 
创建check_by_ssh命令定义,编辑commands.cfg文件
vi /usr/local/nagios/etc/objects/commands.cfg   ==>  添加如下行
 
define command{
        command_name    check_by_ssh
        command_line    $USER1$/check_by_ssh -H $HOSTADDRESS$ -C $ARG1$
        }
 
在主机的服务定义配置文件中添加
vi /usr/local/nagios/etc/objects/basic.cfg ==>  添加如下行
 
define service{        
use                             linux-service
        host_name                       192.168.2.182
        service_description             disk-user
        check_command                   check_by_ssh!/usr/local/nagios/libexec/check_user
       }
 
2、在远程被监控端配置
 
创建脚本和赋予权限相关的,与使用nrpe一样,但是不在需要在nrpe.cfg文件中添加任何内容,这里不再给出脚本和赋予权限相关的过程,请参考上边的。
 
3、在nagios服务端测试
 
执行以下命令先手动测试一下
/usr/local/nagios/libexec/check_by_ssh -H 192.168.2.182 -C /usr/local/nagios/libexec/check_user    ==>  顺利的话会看到类似的返回
 
warnning,curret user is 4
 
4、重启nagios服务观察测试
 
 
总结:通过check_by_ssh与check_nrpe实现的方式看起来都差不多,都是在被监控端执行的然后返回结果,但是理论上用check_nrpe的方式可能效率更高一些,因为check_by_ssh的方式需要每次检测的时候都要建立和断开一次ssh的会话,而nrpe则是被监控端一直在处于监听状态的一个服务,影响速度和开销可能会更低一些。以上是自己的一些经验总结和心得,可能会有理解不正确的地方,仅供大家参考,互相交流。