<cite id="pbjvp"></cite>

        <menuitem id="pbjvp"><em id="pbjvp"></em></menuitem>
        <ins id="pbjvp"></ins>

        <ins id="pbjvp"><video id="pbjvp"><mark id="pbjvp"></mark></video></ins>
        
        

        <output id="pbjvp"><em id="pbjvp"><b id="pbjvp"></b></em></output>

              <i id="pbjvp"><video id="pbjvp"><b id="pbjvp"></b></video></i>
              <mark id="pbjvp"></mark>
              <b id="pbjvp"><em id="pbjvp"><mark id="pbjvp"></mark></em></b>

              Jquery中文网 www.myllop.cn
              Jquery中文网 >  服务器技术  >  日志与监控  >  正文 Nagios插件编写与调试

              Nagios插件编写与调试

              发布时间:2014-08-15   编辑:www.myllop.cn
              发挥Nagios一切魅力的都是他的插件,正因为丰富多样的插件让nagios有血有肉。

              Nagios是相当不错的监控工具,被称作是“监控之神”,但同样也有“难搞死”头衔。发挥Nagios一切魅力的都是他的插件,正因为丰富多样的插件让nagios有血有肉。

              本文用我的第一个Nagios插件来说明编写方法和我遇到一些问题调试方法。
              如果你有耐心可以通篇看完,应该对第一次写的人来说会有很大帮助。

              需求:
              监控普通磁盘的健康状况(普通磁盘以外还有RAID、阵列的监控是不同方法来做的,这里先不讨论,先从最简单的入手),定期进行检测,并进行报警,报警内容磁盘是否正常,不正常是什么状态。

              分析编写过程:
              我写脚本的前提都是先从手动成功完成,再到自动化(我想其它人的思路应该都一样的)

              1、找到监控磁盘的方法
              通过一番查找 smartctl 这个命令是比较不错的  centos slackware一般的默认都有这个
              smartctl -H /dev/sda  只检测状态
              smartctl -i /dev/sda   只检测硬盘信息
              smartctl -a /dev/sda 检测所有信息

              2、获取检测信息
              # smartctl -H /dev/sda
              smartctl version 5.38 [x86_64-redhat-linux-gnu] Copyright (C) 2002-8 Bruce Allen
              Home page is http://smartmontools.sourceforge.net/
              SMART Health Status: OK
              关键的最后一行说明磁盘的情况       截取  DISK_HEALTH=`smartctl -H /dev/sda | tail -1 | cut -d: -f2-  `

              3、 进行关键判断
              据我所知道的 smartctl 5.38  是出以上的結果 为OK
              而 smartctl 5.39 是出以下結果
              === START OF READ SMART DATA SECTION ===
              SMART overall-health self-assessment test result: PASSED
              关键词是PASSED
              所以要分析判断多种情况

              4、脚本编写步骤
              1)了解nagios插件编写规范
              Nagios的插件可以用脚本(shell、Perl)C编译后的可执行程序,但必须满足以下两件事:

              A、既出时有一个返回值
              B、至少向标准输出设备(STDOUT)输出一行文件。(但也不能太大,默认是4K,如果想大些,修改源程序吧,方法搜。)

              返回值定义:
              Plugin Return Code Service State DISK State
              0 OK OK 或者PASSED
              1 WARNING 插件警告  DISK报警只分OK或者CRITICAL
              2 CRITICAL  DISK检测非OK 或者PASSED
              3 UNKNOWN  未知状态

              2)插件编写SHELL速成法
              在这里我选用我最熟悉的SHELL进行脚本编写。
              我的速成法就是,直接去nagios exchange 去下比较成熟的比较简单的shell脚本,这样会从一开始借鉴别人好的方法,养成好的习惯,而且只要你有一点SHELL编程经验也可以很快写得像一个老手。(不过不要把自己搞晕了就行)

              3)以下是我的check_disk_health.sh
               

              复制代码 代码如下:
              #!/bin/bash
              # ========================================================================================
              # disk health  plugin for Nagios
              #
              # Written by    : Ajian
              # Release       : 1.2.0
              # Creation date : 2009-07-28
              # Revision date : 2009-07-30
              # Description   : Nagios plugin (script) to check disk health .
              #               This script has been designed and written on Linux System.
              #
              # USAGE         : ./check_disk_health.sh [-d (disk)]
              #
              # Exemple: ./check_cpu_stats.sh
              #          ./check_cpu_stats.sh -d /dev/sda
              #
              #
              # HISTORY :
              #     Release   |     Date      |    Authors            |       Description
              # --------------+---------------+----------------------+-----------------------------------
              #  1.0.0        | 2009-07-28     | Ajian                | Create the script
              #  1.2.0        | 2009-07-30    |  Ajian                | modify the script and run well ,fix a bug.
              # -----------------------------------------------------------------------------------------
              # NOTICE:
              #-----------------------------------------------------------------------------------------
              #     You should have the root Permissions ,You can use sudo to realize .
              # -----------------------------------------------------------------------------------------                                 
               
              # Nagios return codes
              #定义 nagios返回的状态变量
              STATE_OK=0
              STATE_WARNING=1
              STATE_CRITICAL=2
              STATE_UNKNOWN=3    
               
              # Paths to commands used in this script.  These may have to be modified to match your system setup.
              # 定义关键的核心命令smartctl 路径 如果你的系统不是这个地址,请更改。 以下注释的是调试的信息,是自动获取命令路径的方法。
              SMARTCTL="/usr/sbin/smartctl"
              #SMARTCTL=`which smartctl`
              #if [ $? -ne 0 ]; then
              #        echo " smartctl is found in $SMARTCTL ; Go on ... "
              #        echo "smartctl the command cannot find"
              #        exit $STATE_UNKNOWN
              #fi
              # Plugin parameters value if not define
              # 定义默认的检测硬盘
              CHECK_DISK="/dev/sda"                
               
              # Plugin variable description
              # 插件描述信息
              PROGNAME=$(basename $0)
              RELEASE="Revision 1.2.0"
              AUTHOR="(c) 2009 Ajian ()"
               
              # Functions plugin usage
              # 插件的使用方法函数
              print_release() {
                  echo "$RELEASE $AUTHOR"
              }                        
               
              print_usage() {
                      echo ""
                      echo "$PROGNAME $RELEASE - Disk health check script for Nagios"
                      echo ""
                      echo "Usage: check_disk_health.sh -d /dev/sdb"
                      echo ""
                      echo "  -d  the disk (/dev/sda) "
                      echo "          not the Hard disk partition(sda2 is wrong)"
                      echo "  -v  check the version"
                      echo "  -h  Show this page"
                      echo ""
                  echo "Usage: $PROGNAME"
                  echo "Usage: $PROGNAME --help"
                  echo ""
                  exit 0
              }                                                                                                        
               
              print_help() {
                      print_usage
                      echo ""
                      echo "This plugin will check disk health  "
                      echo ""
                      exit 0
              }                                                
               
              # Parse parameters
              # 传递参数
              while [ $# -gt 0 ]; do
                  case "$1" in
                      -h | --help)
                          print_help
                          exit $STATE_OK
                          ;;
                      -v | --version)
                              print_release
                              exit $STATE_OK
                              ;;
                      -d | --disk)
                              shift
                              CHECK_DISK=$1
                              #判断磁盘是否存在
                              if [ ! -b $CHECK_DISK ];then
                                      echo "$CHECK_DISK is no exsit,Please change it "
                                      exit $STATE_CRITICAL
                              fi
                              ;;
                      *)  echo "Unknown argument: $1"
                          print_usage
                          exit $STATE_UNKNOWN
                          ;;
                      esac
              shift
              done
               
              #根据不同的操作进行不同的操作,这里暂时只支持Linux
              case `uname` in
                      Linux )
                           #最核心的部分 前面都是些脚本的基本功能 一个框架 因为第一个脚本牵扯到了很多东西,虽然功能很简单,
                           #但折腾了我不少,在后面的分析中会具体说到 总之注意sudo用法 脚本一开始就有说哦
                              DISK_HEALTH=`$SMARTCTL  -H $CHECK_DISK | tail -1 | cut -d: -f2- `
                              #DISK_HEALTH="OK"
                      #       DISK_INFO=`/usr/bin/sudo $SMARTCTL -i $CHECK_DISK | grep "Device:"`
                              if [ "$DISK_HEALTH" = " OK" ]|| [  "$DISK_HEALTH" = " PASSED" ];then
                                      echo "OK - $CHECK_DISK status is $DISK_HEALTH "
                                      #echo "OK - $CHECK_DISK status is $DISK_HEALTH | $DISK_INFO"
                                      exit $STATE_OK
                              else
                                      echo "CRITICAL - $CHECK_DISK status is $DISK_HEALTH "
                                      #echo "CRITICAL - $CHECK_DISK status is $DISK_HEALTH | $DISK_INFO"
                                      exit $STATE_CRITICAL
                      fi
                          ;;
               
                      *)              echo "UNKNOWN: `uname` not yet supported by this plugin. Coming soon !"
                                      exit $STATE_UNKNOWN
                          ;;
                      esac4)

              运行脚本
              (注意:在最开始自己写的脚本是没有sudo的,以上脚本是已经调试过后的,还需要配置一些其它的东西,慢慢看吧)
              给与脚本执行权限,手动执行
               

              复制代码 代码如下:
              # ./check_disk_health.sh
              OK – /dev/sda status is  OK

              結果正确了,其实这个时候,高兴得太早了。 我先不说问题、继续正常的一般流程。

              5、配置Nagios 调用插件

              1)在远程NRPE 被监控服务器上修改nrpe.conf
              # vim /usr/local/nagios/etc/nrpe.cfg
              添加 command[check_sda_health]=/usr/local/nagios/libexec/check_disk_health.sh -d /dev/sda
              (注意这里了,先提醒下,这里是错误的,一般是正确的,是这个脚本的特殊性造成的)

              2)在Nagios 监控服务器上添加一些配置
              定义服务
               

              复制代码 代码如下:
              define service{
              use                             Disk-Health
              host_name                       DB-56
              servicegroups                   Disk-Health
              service_description            check sda disk health
              contact_groups                  admins
              check_command               check_nrpe!check_sda_health
              }
               

              如果像上面定义一个服务 那么就要注意相关的定义了 ,
              定义Disk-Health 模版  把硬盘检测定义一个模版会比较好控制,因为硬盘的检测不像其它服务一样需要准确的及时性反正检测得太多可能会造成压力,一般一天检测几次就够了。
              定义DB-56 主机需要定义
              定义组 admins
              以上这些只要安装过nagios 一般都知道的了 只是强调下模版的单独定义

              3)通过WEB控制检测 查看結果
              結果是失败 报警CRITCTL 但是状态里面的信息都是空的  CRITCTL – /dev/sda status is

              6、调试
              从Nagios的远程监控来看是失败的,并且没有获取到任务有用的信息。
              分析可以看到,说明nrpe调用  这个变量获取到的是为空的信息
              DISK_HEALTH=`$SMARTCTL -H $CHECK_DISK | tail -1 | cut -d: -f2- `
              即是空的 只有一个原因,肯定是没有执行 如果执行了 肯定会有字段 不管这个字段是否相符。
              但是手动执行是没有问题。
              经过对smartctl的查看 原来这个命令是只允许root进行调用的。
              现在需要解决的问题是:非root 用户 如何远程调用含有需要有root权限命令的脚本进行监控。
              (不要小看这一句话,每一个词都是一个需要攻克的地方)

              以下是调试步骤:

              1)非root用户
              NRPE插件是用nagios这个用户来执行的 所以要得到真实的情况需要
              A: su nagios   再执行脚本 (这个方法比较好)
              B: sudo -u nagios ./check_disk_health.sh
              結果:
              sudo -u nagios ./check_disk_health.sh
              CRITICAL – /dev/sda status is
              跟远程的結果是一样的了 没有信息

              2)需要有root权限
              需要root权限只有一个办法就是用sudo
              将DISK_HEALTH=`$SMARTCTL -H $CHECK_DISK | tail -1 | cut -d: -f2- `
              改为DISK_HEALTH=`/usr/bin/sudo $SMARTCTL -H $CHECK_DISK | tail -1 | cut -d: -f2- `
              (最后发现这时加sudo 并不是关键 关键是很行脚本时用sudo )
              結果:sudo -u nagios ./check_disk_health.sh
              Password:
              需要输入密码  sudo不用输入密码的方法
              修改sudo配置文件
              执行 visudo
              添加
              nagios ALL=(ALL) NOPASSWD:/usr/local/nagios/libexec/check_disk_health.sh
              建议:最好进行sudo的一些控制,很多网方法就是nagios ALL=NOPASSWD:ALL
              结果:
              su nagios
              /usr/bin/sudo check_disk_health.sh
              OK – /dev/sda status is OK
              那么在nrpe.conf配置文件中需要添加sudo
              command[check_sda_health]=/usr/bin/sudo /usr/local/nagios/libexec/check_disk_health.sh
              最开始那个是错误的 注意啊 这个是需要添加/usr/bin/sudo 就是说只要脚本中涉及到提升到root权限的命令那么就要用这个

              3)远程调用
              远程调用方法:./check_nrpe -H 192.168.0.56 -c check_sda_health
              同上如果想模拟真实环境请切换到相应的执行用户 su nagios 再执行以上操作
              结果:   NRPE: Unable to read output
              这个错误的原因一定要明白,之所以报这个错意思是说NRPE没有获取到任何信息,也说是写脚本之前说的其中第二条规范
              问题:在没有任何信息的情况下怎么来获取NRPE执行的日志呢
              就是要确定问题在哪,经过一大番的查找眼睛偶尔看到一个有趣的小方法
              修复nrpe.conf配置文件 在要检查的命令后面添加>>/tmp/output 2>&1 将错误导出到文件中进行查看
              command[check_sda_health]=/usr/bin/sudo /usr/local/nagios/libexec/check_disk_health.sh -d /dev/sda >>/tmp/output 2>&1
              重记nrpe服务
              远程调用 结果当然还是NRPE: Unable to read output
              查看/tmp/output
              sudo: sorry, you must have a tty to run sudo
              有错误就简单了  原来这个是默认不允许sudo 在后端进行
              visudo
              注释Defaults requiretty 就OK了
              结果通过WEB查看也正确了。
              (注意:注释后 检测仍然会是Unable 不过看/tmp/output就会有正确的結果,所以有正确的結果后,一定要去掉 >>/tmp/outpt 2>&1 信息都导到文件中了 nagios还是得不到任何消息。)
              一个脚本执行成功后,就是大批量应用,用生产环境验证,出现问题继续调试。
              以上为所有的分析调试方法。

              您可能感兴趣的文章:
              Nagios插件编写与调试
              nagios报警设置
              Nagios内存监控脚本
              Nagios statusmap.cgi找不到的解决方法
              配置nagios监控mysql
              nagios检测cpu的插件(bash脚本)
              nagios使用的问题解决
              监控硬盘使用率的shell脚本
              nagios的check_ping插件学习
              jquery插件开发注意事项小结

              上一篇:nagios报警设置
              [关闭]
              246好彩天天免费资枓大全 <二四六03024>| <二四六z资料>| <二四六老地主>| <二四六老地主论坛>| <246天天好彩玄机图>| <246天天好彩票玄机图片>| <246好彩天天免费资枓大全>| <二四六天天好彩彩玄机资枓>| <二四天天正版免费资枓大>| <二四六天天好彩每期文字賧料>| <二四六天天好彩毎期文字资料>| <二四六天天好彩毎期文字图片玄机>| <二四六天天人好彩网手机版>| <二四六天天好彩手机版—每期>| <二四六天天好彩免费网手机板>| <二四六天天好手机版本>| <二四六天天好彩彩玄机资枓>| <246好彩天天免费资枓大全>| <二四六天天好彩彩玄机资枓>| <二四天天正版免费资枓大>| <二四天天正版好彩免费资枓1>| <二四六天天好彩头首页>| <二四六天天网手机版>| <二四六玄机图片天天好彩玄机图>| <图片玄机二四六天天好彩资料大全 www.308k.com>| <二四六天天好彩费网站大全>| <精选二四六天天好彩手机版>| <二四六天天好资料大全168>| <二四六天天好来 资料大全>| <二四六天天好资料大全50期蓝月亮>| <246天天免费彩资料大全>| <二四六天天好彩资枓大全>| <二四天天正版免费资枓大全>| <二四六天天好彩免费全年资枓大全>| <二四六天天免费好彩资料大全>| <二四六天天免费好彩资料图>| <二四六天天免费好彩资料大全168>| <743cc二四六天天好釆免费资料>| <246好彩天天免费资枓大全>| <天下釆彩与你同行资料二四六>| <二四六天天好彩资料246>| <二四六天天玄机资料大全>| <308二四六玄机资料大全二四六天天玄机图资料>| <香港二四六玄机资料>| <3o8k com二四六天天好彩文字资枓>| <246好彩天天免费资枓大全>| <二四六好彩资料大全308kk>| <二四六天天好彩彩免费资料大全>| <743cc二四六天天好釆免费资料>| <734cc期期好彩免费资枓大全>| <二四六好彩正版资料>| <308k二四六天好彩资料大全>| <二四六天天,好彩资料开奖>| <玄机二四六天天彩>| <二四六天天天好彩图片玄机>| <二四六天天好彩玄机图库>| <二四六天天如彩正版免费资料大全>| <二四六天天彩玄机免费资料大全>| <二四六天天好彩每期文资子料大全>| <二四六天天香港好彩资料大全>| <二四六天天好彩资料免费大全送>| <香港二四六天天好彩正版资料大全>| <308k二四六好彩资料大全>| <246天天彩免费资料308k>| <246天天好彩资料app>| <二四六天天好彩app下载>| <500502二四六天天彩>| <天天好彩246app>| <246天天好彩资料app>| <二四六天天好彩一每期文字资料>| <二四六天天好彩图片玄机下载>| <246好彩天天免费资枓大全>| <天下釆彩与你同行资料二四六>| <246免费资料大全天天好彩>| <246免费资料大全开>| <246好彩天天免费资枓大全>| <246天天好·彩免费资料大全>| <246天天好彩正版资>| <246天天好彩免费大全资料308k>| | | <新址246天天好彩>| <新址天天好彩二四六>| <246天天好彩开奖944cc>| <246好彩天天免费资枓大全>| <图玄机246天天好彩资料>| <246天天好彩资料全>| <246天天好彩玄机图片>| <246天天好彩免费944cc>| <246556 民间高手论坛>| <246正版天天好彩免费资枓大全>| <246正板天天好彩免费资枓大全>| <308kcom二四六天天彩>| <246玄机图资料天天好彩>| <246天天好彩免费资料大全308>| <二四六免费资料大全正>| <二四六天空彩资料大全>| <二四六天天好彩兔费咨料大全>| <246zl天天好·彩免费资料大全>| <246zl天天944cc好彩免费资料大全>| <二四六正版免费资料大全743cc>| <二四六天天好彩资料大全首页>| <二四六天天好彩免费资料308k>| <二四六免费资料玄机>| <二四六天天好彩资免费大全资料>| <308k二四六天天好彩i>| <246zl天天好·彩免费资料大全>| <二四六天天好彩网手机版 免费>| <天天好彩246资料308图库>| <246天天免费资料大全开奖结果>| <246天天免费资料大全玄机>| <二四六天天好彩免费资料大全168i>| <二四六天天好彩zl246cc>| <精选好彩二四六天天好彩>| <黄大仙精选二四六天天好彩>| | <蓝月亮精选二四六免费天天好彩>| <二四六天天好彩全年免费玄机料>| <二四六图片玄机资料大全>| <二四六玄机图片花仙子>| <香港二四六玄机资料图>| <二四六天天好采玄机资料大全>| <天天二四六玄机>| <二四六天天好彩免费资枓全免费>| <二四六天天好彩资枓免费>| <玄机图二四六天天好彩免费资料>| <二四六天天彩与你同行开奖>| <246好彩天天免费资枓大全>| <二四六天天手机版玄机图资料大全>| <308kcom二四六天天好彩玄机资料>| <二四六好彩正版资料大全>| <香港二四六天天好彩兔费资>| <308k二四六天天好彩 资料>| <二四六玄机图 彩图102>| <二四六天天彩正版资料>| <香港二四六玄机图>| <香港二四六好彩资料246>| <308kcom二四六玄机资料>| <二四六天天好彩正版文字资料大全>| <246天天好彩免费开奖结果>| <246天天好彩免费开奖资料>| <246天天好彩免费资料正版资料>| <2246天天好彩图片玄机>| <246天天好彩图片机>| <二四六天天网彩手机版>| <246 天天好彩免费资料成语挂牌>| <246天天好彩管家婆资料大全>| <246天天好彩综合资料大全>| <308k二四六天天彩>| <二四六天天彩免费玄机资料>| <新址246天天好彩282cc>| <246天天好彩免费944cc>| | <二四六天天好彩944cc资讯>| <246天天好彩308k每期资料>| <246天天好彩308每期资料>| <二四六好彩免费资料图片玄机>| <新址246正版免费资料大全>| <246天天好彩勉费资料大全246>| <新址246zlcom天天好彩资料>| <新址zl 246天天好彩>| <新址246zl cc天天好彩>| <246天天好彩118图片玄机>| <二四六天天好彩马会开奖结果>| <二四六天天好彩手机版开奖结果>| <二四六天天好彩综合资料大全>| <二四六天天好彩308k con>| <二四六天天好彩308k kom>| <246天天好彩免费资大全>| <新址zl246net天天好彩大全>| <246天天好彩玄机资料手机版>| <246天天好天下天空免费>| <二四六天空釆资料大全>| <二四六兔费天天好彩资料>| <二四六308kcom文字资料>| <246天天好天下彩天空开奖>| <二四六免费资料天下>| <二四六天天好彩308k玄机图>| <二四六天天好彩资料开奖>| <308k二四六天天好彩每期>| <308k二四六天天好彩图片玄机>| <二四六天天好彩246zl免费>| <二四六天天好彩 944cc 彩图>| <蓝月亮精选二四六天天好彩>| <二四六天天好彩资料网手机板>| <二四六天天好彩玄机图手机版>| <二四六论坛图片玄机>| <天天二四六玄机图>| <天天彩246免费资料大全>| <246天天好好彩资料免费大全>| <246天天好好彩资料大全>| <二四六免费大全天天彩308>| <香港二四六论坛308k>| <二四六天天彩正版资料大全>| <二四六论坛玄机资料大全>| <308kcom二四六玄机图片>| <308kcom二四六图片玄机>| <308kcom二四六生活幽默>| <玄机图片二四六好彩网>| <玄机资料二四六好彩资料大全>| <246天天好彩308k每期资料大全>|