nagios插件编写和使用pnp4nagios出图

    其实在nagios官方网站上也有很多插件,足够让我们使用,但是也不排除不能满足公司的需求,这时,得运维工程师或者程序员自己去编写脚本,网上也有很多教程,但是看了感觉都是讲的不够清楚,所以自己写了一份记录,希望可以帮得到网友们,同时,有哪里讲错的地方希望你们指出来,免得误人子弟。

     一 、写nagios插件,可以使用shell、perl、python等脚本语言,不管什么语言来写原理是一样的。那么先来认识下4种状态返回信息:

      0(OK)表示状态正常/绿色

      1(WARNING)表示出现警告/×××

      2(CRITICAL)表示出现非常严重的错误/红色

      3(UNKNOWN)表示未知错误/深×××。

     图解:

     

    原理: Nagios根据插件返回来的值,来判断监控对象的状态,通过web显示出来,并通过邮件或者是短信方式(其他方式也可以)给管理员报警,及时处理故障.

 

    二、脚本编写教程

        1 编写脚本

 
  
  1. [root@node1 libexec]# cat /usr/local/nagios/libexec/check_disk_used  
  2. #!/bin/bash
  3. #############返回状态码################
  4. STATE_OK=0 
  5. STATE_WARNING=1 
  6. STATE_CRITICAL=2 
  7. STATE_UNKNOWN=3 
  8. #############参数提示帮助###############
  9. help(){ 
  10. echo "Usage:$0 -h to help" 
  11. #############参数使用教程###############
  12. full_help(){ 
  13. echo "Usage:" 
  14. echo "linux disk used" 
  15. echo "example:$0 -w 80 -c 100" 
  16. #############以下是作判断和返回的结果,这里注意的函数getopts,非常好用############## 
  17. if [ $# -lt 1 ];then 
  18.    help 
  19.    exit 0 
  20. else 
  21. while getopts :w:c:h OPTION 
  22. do 
  23.   case $OPTION 
  24.     in 
  25.     w) 
  26.     WARNING=$OPTARG 
  27.     ;; 
  28.     c) 
  29.     CRITICAL=$OPTARG 
  30.     ;; 
  31.     h) 
  32.     full_help 
  33.     exit 0 
  34.     ;; 
  35.     *) 
  36.     echo "Error option" 
  37.     help 
  38.     exit 0 
  39.     ;; 
  40.   esac 
  41.  done 
  42. fi 
  43.  
  44. ############拿出磁盘的used,以下那个乘以1024,单位的转换#############
  45. used_one=`df -l|sed -n '2p'|awk '{print $3}'` 
  46. used=`expr $used_one \* 1024` 
  47. ############拿出磁盘的total,以下那个乘以1024,单位的转换############# 
  48. total_one=`df -l|sed -n '2p'|awk '{print $2}'` 
  49. total=`expr $total_one \* 1024` 
  50.  
  51. ###############判断大于给出的参数-C -w 的结果,如果没问题,就显示OK#################
  52. if [ "$used" -ge "$CRITICAL" ] && [ "$CRITICAL" -ne "0" ];then 
  53.    state="$STATE_CRITICAL" 
  54.    state_used="CRITICAL" 
  55.  
  56. elif [ "$used" -ge "$WARNING" ] && [ "$WARNING" -ne  "0" ];then 
  57.    state="$STATE_WARNING" 
  58.    state_used="WARNING" 
  59.  
  60. else 
  61.    state="$STATE_ok" 
  62.    state_used="ok" 
  63.  
  64. fi 
  65. echo ""The server disk_tatal=$total,the disk_used is "$state_used",disk_used="$used""|disk_used="$used";3387649424;3587635328;0;"$total"" 
  66. exit $state ############这个就是返回的状态码,在注意这里#############

     

      2 在被监控的客户端/usr/local/nagios/etc/nrpe.cfg加上以下语句,添加完后要记得重启nrpe服务,一般使用/etc/rc.d/init.d/xinetd restart

         

 
  
  1. command[check_disk_used]=/usr/local/nagios/libexec/check_disk_used -w 3387649424 -c 3587635328 

      3 在nagios服务器端,主机配置文件添加服务和重启nagios(service nagios restart):

         

 
  
  1. [root@node2 servers]# cat/usr/local/nagios/etc/servers/192.168.250.40.cfg  
  2. define service{ 
  3. use             generic-service,service-pnp 
  4. host_name       web1 
  5. service_description     check_disk_used 
  6. check_command   check_nrpe!check_disk_used 

                

      4 web查看

       

        这样,自己编写的插件就可以正常使用了,运维工程师或者程序员就可以根据自己本身的     业务和需求去编写脚本。

    三、 pnp4nagios出图

         细心的网友们应该会看到旁边有一个图形,这个就是pnp插件,在这里pnp4nagios配置      我就不写出来了,如果哪位网友需要交流的话就联系我或者在后面回复。

         1 首先出图的话需要服务需要加入PNP4nagios插件(在配置好pnp4nagios基础上)

 
  
  1. [root@node2 servers]# cat /usr/local/nagios/etc/servers/192.168.250.40.cfg  
  2. define service{ 
  3. use             generic-service,service-pnp 
  4. host_name       web1 
  5. service_description     check_disk_used 
  6. check_command   check_nrpe!check_disk_used 

          通过以上的配置,图标就会出现

         

          2  绘图

           绘图是使用rrdtool,安装pnp4nagios的时候需要安装的依赖包。首先大家要明白,生成       图像,需要的是什么?---->当然是数据。但数据从哪里来呢?请看看被监控的客户端脚本:

 
  
  1. [root@node1 libexec]# cat /usr/local/nagios/libexec/check_disk_used  
  2. #!/bin/bash 
  3. STATE_OK=0 
  4. STATE_WARNING=1 
  5. STATE_CRITICAL=2 
  6. STATE_UNKNOWN=3 
  7. ......... 
  8. ......... 
  9. echo ""The server disk_tatal=$total,the disk_used is "$state_used",disk_used="$used""|disk_used="$used";3387649424;3587635328;0;"$total"
  10. exit $state 

      |disk_used="$used";3387649424;3587635328;0;"$total"大家有没有留意到,这里就是数据,那么是怎么样定义的呢?

      | 当前值;警告值;临界值;最小值;最大值

      | ---->是用来区别输出的数据的,|之前输出的数据是显示在web上面,后面则是绘图的数据

      当前值:这个要定义一个名字,例如:disk_used= 

      警告值: 这个就是 - w参数的值

      临界值:这个就是 - c参数的值

      最小值:  0

      最大值:  这个根据自己本身监控去定义拿取

   

     3 最后,在使用这个脚本的时候也需要加上参数

       [root@node1 libexec]# vi /usr/local/nagios/etc/nrpe.cfg 

 
  
  1. command[check_disk_used]=/usr/local/nagios/libexec/check_disk_used -w 3387649424 -c 3587635328 

       这样的话就可以有数据绘图了,我们验证下结果:

      

    希望简单的教程能帮助到大家,谢谢!!!