• 自定义ip_conn.sh :http://zhumeng8337797.blog.163.com/blog/static/100768914201171664928247/


用php自定义 nagios监控插件
http://blog.csdn.net/sudoers/article/details/6913368

Writing a Nagios plugin with PHP
http://benedmunds.com/2012/04/25/writing-a-nagios-plugin-with-php/

 

 

/etc/init.d/nagios stop
/etc/init.d/nagios start


============== 1 增加nginx和php的监控


-----------1.1 主

 

基本配置 /usr/local/nagios/etc/nagios.cfg

cfg_file=/usr/local/nagios/etc/objects/commands.cfg  图3定义commands
cfg_file=/usr/local/nagios/etc/objects/contacts.cfg     联系人 图4
cfg_file=/usr/local/nagios/etc/objects/templates.cfg  模板 图5
cfg_file=/usr/local/nagios/etc/objects/localhost.cfg          localhost.cfg中有类似的主机组设置
cfg_file=/usr/local/nagios/etc/objects/services.cfg 


#vim /usr/local/nagios/etc/objects/commands.cfg 

#check_php_test
define command{
        command_name check_php_test   
        command_line $USER1$/check_php_test.sh -H $HOSTADDRESS$ -c $ARG1$ -t 30 # -t 30   # 加上一个 -t 30 指定限定时间为 30 秒
}


#vim /usr/local/nagios/etc/objects/services.cfg 

define service{
        use   generic-service
        host_name               R620_web67,R620_web68 
        service_description check_php_test 
        contact_groups        admins-ts 
       check_command check_nrpe!check_php_test 
       notifications_enabled 1
        normal_check_interval 3
        retry_check_interval  2
        notification_interval 10
        notification_period   24x7
        notification_options  w,u,c,r
}


 編輯完主Nagios後可以用這一行检查配置 
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

 

检查配置: 
#/etc/init.d/nagios checkconfig 
reload服务: 
#/etc/init.d/nagios reload


-----------1.2 从:

 


客户机基本配置/usr/local/nrpe/etc/nrpe.cfg 
或者 /usr/local/nagios/etc/nrpe.cfg


#vim /var/www/t.php 
1

#vim /usr/local/nagios/libexec/check_php_test.sh 
#!/bin/bash

#!/bin/bash
r=`/usr/bin/curl -s http://localhost/t.php`
if [ $r ] ;then
    if [ $r == "1" ] ;then
        echo "ok"
        exit 0
    else
        echo "Please confirm the content of the file(t.php)!"
        exit 1
    fi
fi
echo "Service exception,May be the file(t.php) does not exist!"
exit 2

 

 

----------------------------------------- nagios检测并重启服务完整脚本 check_php_test.sh

 

 

#!/bin/bash

#nagios默认state
nagstate=0
#nagios默认描述
nagrs="ok"


#检测服务
function checkService () {
    r=`/usr/bin/curl -s http://localhost/t.php`
echo "curl content:$r"
    if [ $r ] ;then
        if [ $r -eq 1 ] ;then
             nagstate=0
             nagrs="OK"
             return 1
        else
             nagstate=1
             nagrs="Please confirm the content of the file(t.php)!"
             return 1
        fi
    fi
    nagstate=2
    nagrs="Service exception,attempts to restart services,please pay attention to the following message!"
    return 1
}


#重新拉起ngin, php服务
function restartService () {
    #pid /dev/shm/pid/nginx.pid;
    nginxPath="/usr/local/nginx/conf/nginx.conf"
    #pid = /dev/shm/pid/php-fpm.pid
    phpPath="/usr/local/php/etc/php-fpm.conf"
  `sudo chmod +x $nginxPath`
  `sudo chmod +x $phpPath`
    nginxPid=`cat $nginxPath | grep "pid" | tr -d ";" |awk 'BEGIN {FS=" "}{print $2}' | awk '{gsub(/ /,"")}1'`
    phpPid=`cat $phpPath | grep "pid" | awk 'BEGIN {FS="="}{print $2}' | awk '{gsub(/ /,"")}1'`

    if [ -f $nginxPid ] ;then
      echo "restart nginx"
      sudo /bin/kill -HUP `sudo cat $nginxPid`
    else
      echo "start nginx"
      `sudo chmod +x /usr/local/nginx/sbin/nginx`
        `sudo /usr/local/nginx/sbin/nginx` 
    fi

    if [ -f $phpPid ] ;then
     echo "retart php"
      sudo /bin/kill -USR2 `sudo cat $phpPid`
    else
     echo "starg php-fpm"
     `sudo chmod +x /usr/local/php/sbin/php-fpm`
     `sudo /usr/local/php/sbin/php-fpm`
    fi
    return 1
}

#创建t.php文件
function toucthTphp () {
    wwwTphp="/var/www/ssc/www/t.php"
    htmlTphp="/var/www/html/t.php"
    [ -d "/var/www/ssc/www" ] && `sudo chmod -R 777 /var/www/ssc/www/`;echo 1 > $wwwTphp
    [ -d "/var/www/html" ] && `sudo chmod -R 777 /var/www/html/`;echo 1 > $htmlTphp
    return 1
}


### 主程序###
function main () {
    toucthTphp
    checkService
    [ $nagstate -ne 0 ] && restartService
    checkService
    return 1
}

main
echo $nagrs
exit $nagstate

------------------------ nagios的sudo需要手动输入密码问题 
su - nagios
sudo /etc/init.d/sshd restart
需要输入密码

修改:
su -
#visudo   (或者sudo vi /etc/sudoers )

#添加nagios 请求sudo,允许特定指令时(可跟参数),不需要密码 。
nagios ALL=(ALL)       NOPASSWD: /etc/init.d/sshd restart

#找到 #Defaults  requiretty 并取消注释,另外新增一行。表示nagios用户不需要登陆终端就可以调用命令 。

Defaults  requiretty  

Defaults:nagios   !requiretty

 


su - nagios
sudo /etc/init.d/sshd restart
就不需要输入密码了

 

 

---------------------------------------END 检测并重启服务脚本

 

 

 

 

 

 

 


nrpe.cfg定义command: check_php_test  (如果缺少此步骤,在服务器端执行会提示NRPE: Command 'check_php_test' not defined) 
#vim /usr/local/nagios/etc/nrpe.cfg 
command[check_php_test]=/usr/local/nagios/libexec/check_php_test.sh

重启nrpe: 
#/etc/init.d/xinetd restart


报错:NRPE: Unable to read output (页面上nagios的文字描述就是通过echo获取到的) 
 客户端脚本要有输出内容
 echo "ok"
 exit 0



****修改sh文件不需要重启任何服务 




-----------1.3 主: 配置邮件联系人 
#vim /usr/local/nagios/etc/objects/contacts.cfg 

define contactgroup {
        contactgroup_name       admins-ts 
        alias                   Nagios Administrators
        members                 it-ts 
        }

define contact {
        contact_name                    it-ts                   ; Short name of user
        use                             generic-contact         ; Inherit default values from generic-contact template (defined abov
e)
        alias                           sy.zed               ; Full name of user
       
         email                          [email protected]   ;#最终的邮件组 
                pager                           1
       }

 

 

host_name设置

#vim /usr/local/nagios/etc/objects/localhost.cfg

define host {
        host_name             R620_web67 
        alias                 Linux R620_web67
        address               192.168.102.67 
        contact_groups        admins-ts
        check_command         check-host-alive
        notifications_enabled 1
        process_perf_data     1
        max_check_attempts    5
        notification_interval 10
        notification_period   24x7
        notification_options  d,u,r
        action_url      /nagios/pnp/index.php?host=$HOSTNAME$
        parents         TW_TS
        }


----------- 1.4验证 
  
在监控机上运行check_nrpe -H IP 
可以查看到客户端的nrpe信息,说明监控机与被监控机的nrpedaemon通信是正常。



在服务器端:验证 
/usr/local/nagios/libexec/check_nrpe -H 192.168.102.67 -c check_php_test

 

 

nagios页面查看 :

Hostgroup Overview -> R620_web67 -> check-php-test

 


----------其他:php方式简述 

#check_php_test
define command{
        command_name check_php_test
        command_line php $USER1$/check_php_test.php -H $HOSTADDRESS$ -c $ARG1$ -t 60
}


#vim /usr/local/nagios/libexec/check_php_test.php
  error_reporting(0);
  #fwrite(STDOUT, 'This check passed');
  try{
    $r = url_get_contents("http://localhost/t.php");
    if ( false === $r || '1' != $r) {
      exit(2);
    }
  } catch(Exception $e) {
      exit(3);
  }
  exit(0);

  function url_get_contents($strUrl, $boolUseCookie=false)
  {
    $ch = curl_init($strUrl);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_TIMEOUT, 5);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPGET, true);
    curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($ch, CURLOPT_REFERER, $_SERVER['HTTP_REFERER']);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_MAXREDIRS, 3);
    if ($boolUseCookie && is_array($_COOKIE) && count($_COOKIE) > 0) {
      $cookie_str = '';
      foreach($_COOKIE as $key => $value) {
        $cookie_str .= "$key=$value; ";
      }
      curl_setopt($ch, CURLOPT_COOKIE, $cookie_str);
    }
    $response = curl_exec($ch);
    if (curl_errno($ch) != 0) {
      return false;
    }
    curl_close($ch);
    return $response;
}





==============2 ip_conn.sh 


客户端/usr/local/nrpe/etc/nrpe.cfg
或者 /usr/local/nagios/etc/nrpe.cfg

 command[check_ips]=/usr/local/nrpe/libexec/ip_conn.sh 8000 10000  


vim /usr/local/nrpe/libexec/ip_conn.sh
    #!/bin/sh  
    #if [ $# -ne 2 ]  
    #       echo "Usage:$0 -w num1 -c num2" 
    #exit 3  
    #fi  
    ip_conns=`nestat -an | grep tcp |grep EST |wc -l`  
    if [ $ip_conns -lt $1 ]  
            then 
          echo "OK -connect counts is $ip_conns" 
           exit 0  
    fi  
    if [ $ip_conns -gt $1 -a $ip_conns -lt $2 ]  
            then 
            echo "Warning -connect counts is $ip_conns" 
           exit 1 

    fi  
    if [ $ip_conns -gt $2 ]  
            then 
            echo "Critical -connect counts is $ip_conns" 
            exit 2  
    fi  
   #指定2个连接数,当连接数大于指定的第一个数的时候,给予warning警报,当连接数大于指定的第二个数的时候,给予Critical警报。 


各客户端测试nrpe服务中各个插件的功能
 
[root@nagios-server libexec]# /usr/local/nrpe/libexec/ip_conn.sh 8000 10000 
/usr/local/nrpe/libexec/ip_conn.sh: line 6: nestat: command not found
OK -connect counts is 0


服务端测试check_nrpe功能 
[root@nagios-server libexec]# ./check_nrpe -H nagios-server -c check_ips 
OK -connect counts is 0



各机器以独立守护进程启动nrpe服务
/usr/local/nrpe/bin/nrpe -c /usr/local/nrpe/etc/nrpe.cfg -d
 
服务器端启动nagios监控服务
/usr/local/nagios/bin/nagios -d /usr/local/nagios/etc/nagios.cfg
 
启动apache服务器
/usr/local/apache/bin/apachectl -k start