设为首页 收藏本站
查看: 672|回复: 0

[经验分享] nagios自定义监控nginx php和ip_conn

[复制链接]

尚未签到

发表于 2016-12-28 06:35:29 | 显示全部楼层 |阅读模式
  
自定义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_commandcheck_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                          idc.it@test.com   ;#最终的邮件组
                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_linephp $USER1$/check_php_test.php-H $HOSTADDRESS$ -c $ARG1$ -t 60
}


#vim /usr/local/nagios/libexec/check_php_test.php
<?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服务中各个插件的功能

[iyunv@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功能
[iyunv@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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-320259-1-1.html 上篇帖子: 使用Nginx的NHPM模块和jQuery进行的Comet测试 下篇帖子: nginx URL_REWRITE[ URL重写] VS apache的URL重写
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表