• 关于nagios系统下使用shell脚本自定义监控插件的编写以及没有实时监控图的问题


    关于nagios系统下shell自定义监控插件的编写、脚本规范以及没有实时监控图的问题的解决办法

    在自已编写监控插件之前我们首先需要对nagios监控原理有一定的了解

    Nagios的功能是监控服务和主机,但是他自身并不包括这部分功能,所有的监控、检测功能都是通过各种插件来完成的。

    启动Nagios后,它会周期性的自动调用插件去检测服务器状态,同时Nagios会维持一个队列,所有插件返回来的状态信息都进入队列, Nagios每次都从队首开始读取信息,并进行处理后,把状态结果通过web显示出来。

    Nagios提供了许多插件,利用这些插件可以方便的监控很多服务状态。安装完成后,在nagios主目录下的/libexec里放有nagios自带的可以使用的所有插件,

    如,check_disk是检查磁盘空间的插件,check_load是检查CPU负载的,等等。基本上每一个插件可以通过运行./check_xxx –h 来查看其使用方法和功能。

    Nagios可以识别4种状态返回信息:

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

    1(WARNING)表示出现警告/黄色

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

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

     

    Nagios根据插件返回来的值,来判断监控对象的状态,并通过web显示出来,以供管理员及时发现故障。

    当我们知道了nagios是通过命令返回值来判断状态,在shell中也即是通过命令的退出状态码来判断,这样我们可以自已编写一个监控脚本

    1.编写检查weburl地址的插件

    可以如下的命令及语法进行编写。

    [root@hd1 libexec]# cat check_url 
    #!/bin/bash
    #get the shell script name
    PROGNAME=`basename $0`
    #get the file path
    PROGPATH=`dirname $0`
    usage() {
          echo "Usage: /bin/sh  $PROGNAME url"
          exit 1
      }
    [ $# -ne 1 ] &&usage
    . $PROGPATH/utils.sh
    t=`ping -c1 $1|awk 'NR==2 {print $7,$8}'`
    o=`ping -c1 $1|awk 'NR==5{print $12}'`
    ping -c1 $1>/dev/null 2>&1
    if [ $? -eq 0 ]
    then
        echo "Url $1 OK|$t;0.000000 size=295B;;;0"
        exit $STATE_OK
    else
        echo "Url $1 NO|Socket timeout after $o"
        exit $STATE_CRITICAL
    fi
    [root@hd1 libexec]#

    接下来,脚本授权可执行 以及主动监控脚本写进command.cfg ,服务写进services.cfg

    企业级监控nagios实践文档已经说过。  自行操作。

    编写监控脚本是请参考utils.sh 规范

    以上监控脚本的编写,在此作为一种编写nagios监控插件的思路,其中在if语句中的echo语句中、我们可以发现输出的内容是由 | 分隔

    其中只写入"|"之前的内容也行,"|"之后的的内容为可选见容, nagios会将"|"之后的内容作为性能数据输出 。

    得到性能数据之后会在服务器端/usr/local/nagios/share/perfdata下生成文件。

    如可输出给pnp4nagios,性能数据格式如下:

    'label'=value[UOM];[warn];[crit];[min];[max]

    需要注意的是:

    1、性能数据的多个选项值之间用分号;分割

    2、如果label中包含空格、等号、或者单引号,则label需要用单引号来括起来

    3、warn/crit/min/max可以为null值

    value, min and max只能为负号"-" "0到9"和小数点"." 并且单位必须统一

    4、如果UOM单位是%,则min和max不需要再指定

    5、UOM单位可以是如下: 默认空,表示数量(用于用户数、处理器数等)

    s    表示秒(也可以用us,ms)

    %    表示百分比

    B    表示字节(也可以用KB,MB,TB,GB)

    c    一个连续的计数(如:接口传输的字节数)

    实际情况中性能数据选项值,可以参考已有监控插件的返回值。

    [root@hd1 ~]# cd /usr/local/nagios

    [root@hd1 nagios]# chown nagios.nagcmd share

     

    用户和组必须改为:nagios nagcmd 

    文件的权限问题,web用户apache无法在/usr/local/nagios/share中写入。在前面已经把用户apache加入组nagcmd中了,所以直接改变文件夹的所有者和所属的组就可以了。

    下一步

    重新加载nagios

    /etc/init.d/nagios reload

    可以看到自己写的监控脚本 有实时监控图了。 OK

     

    2.编写一个被动插件,监控客户端的/dev/sda3分区的如果磁盘占用率超过7%报警exit 2,如果不大于7%不报警,exit 0

    [root@hd2 libexec]# cat check_sda3 
    #! /bin/bash
    #get the shell script name
    PROGNAME=`basename $0`
    #get the file path
    PROGPATH=`dirname $0`
    usage() {
          echo "Usage: /bin/sh  $PROGNAME url"
          exit 1
      }
    [ $# -ne 1 ] &&usage
    . $PROGPATH/utils.sh
    n=`df -i|awk 'NR==2{print $5}'|sed 's/'%'//g'`
    if [ $n -le 7 ]
    then
            echo "disk usage rate is ok!|sda3=$n;7;50;0;100"
            exit $STATE_OK
    elif [ $n -gt 7 -a $n -le 50 ]
    then
            echo "disk usage rate is warning!!|sda3=$n;7;50;0;100"
            exit $STATE_WARNING
    elif [ $n -gt 50 ]
    then
            echo "disk usage rate is critical!!!|sda3=$n;7;50;0;100"
            exit $STATE_CRITICAL
    fi
    [root@hd2 libexec]#

     

  • 相关阅读:
    小程序网络请求封装(三)
    上传图片
    struts2导出excel
    金额超过一定位数显示异常问题
    限制日期控件 最大可选值为当前日期
    substr函数小结
    票号自动生成(按照一定的规则)
    Nginx
    Cron表达式以及定时任务配置
    HTML Input 表单校验之datatype
  • 原文地址:https://www.cnblogs.com/xh-blog/p/9696088.html
Copyright © 2020-2023  润新知