121饿 发表于 2015-11-20 09:46:50

shell编程之【nagios自定义监控系统磁盘脚本】

之前写了一篇文章主要介绍nagios的搭建使用http://www.iyunv.com/thread-128905-1-1.html
下面这篇文章主要介绍nagios自定义监控系统磁盘的脚本实现。


    Nagios可以识别4种状态返回信息,即 0 表示状态正常(OK)、1 表示出现警告(WARNING)、2 表示出现非常严重的错误(CRITICAL),3 表示未知错误(UNKNOWN)。Nagios根据插件返回来的值,来判断监控对象的状态,并通过web显示出来。我们就可以利用上面这个特性来实现监控磁盘的状态:
a、当磁盘使用率大于97%则表示出现非常严重的错误(CRITICAL),返回值为2;

b、当磁盘使用率大于95%则表示出现警告(WARNING),返回值为1;
c、当磁盘使用率小于95%则表示状态正常(OK),返回值为0;


说明:
server ip :192.168.0.114
client ip :192.168.0.115

1、客户端配置
1)编写脚本

# vim /usr/lib/nagios/plugins/check_disk.sh

#!/bin/bash

row=`df -h |wc -l`
for i in `seq 2 $row`
do
      ava=`df -h |sed -n "$i"p|awk '{print $4}'`
      u_per=`df -h |sed -n "$i"p|sed -n "s/\%//"p|awk '{print $5}'`
      p_p=`df -h -P|sed -n "$i"p|awk '{print $6}'`
      if [ "$u_per" -gt "97"];then
                echo -n "$p_p CRITICAL $u_per% $ava"
                sta[$i]=2
      elif [ "$u_per" -gt "95" ];then
                echo -n "$p_p WARNING! $u_per% $ava"
                sta[$i]=1
      else
                echo -n "$p_p OK $u_per% $ava"
                sta[$i]=0
      fi
done
n=0
for j in `seq 2 $row`
do
      if [ "${sta[$j]}" -gt $n];then
                n=${sta[$j]}
      fi
done
exit $n
脚本说明:

我们利用df -h命令可以查看磁盘的使用状态
# df -h
Filesystem      SizeUsed Avail Use% Mounted on
/dev/sda3      18G2.6G   15G16% /
tmpfs         504M   0504M   0% /dev/shm
/dev/sda1      97M   26M   67M29% /boot
脚本中 for i in `seq 2 $row` :表示从df -h命令输出的第二行开始进行循环。
参数ava、u_per、p_p分别定义为剩余空间(Avail)、使用率(Use%)、挂载点(Mounted on)
数组sta[$i],输出的是返回值,当返回0表示OK,返回1表示WARNING!,返回2表示CRITICAL。
最后我们利用输出数组的最大值来判断,只要有一个挂载点的使用率达到97%以上,在nagios网页上都会显示CRITICAL。

2)修改脚本权限

# chmod +x /usr/lib/nagios/plugins/check_disk.sh
3)编辑配置文件

# vim /etc/nagios/nrpe.cfg       //增加一行

command=/usr/lib/nagios/plugins/check_disk.sh
4)重启nrpe服务

# /etc/init.d/nrpe restart

2、服务端配置
1)检查刚才客户端上的脚本是否正常运行

# /usr/lib/nagios/plugins/check_nrpe -H 192.168.0.115 -c check_disk

/ OK 16% 15G/dev/shm OK 0% 504M/boot OK 29% 67M
注意:

若报错:CHECK_NRPE: Error - Could not complete SSL handshake.
则说明在客户端没有添加允许server主机的ip,修改客户端nrpe配置文件,添加server的ip
# vim /etc/nagios/nrpe.cfg
allowed_hosts=127.0.0.1,192.168.0.114
# /etc/init.d/nrpe restart

2)添加服务

# cd /etc/nagios/conf.d/
# vim 192.168.0.115.cfg

define host{
      use                     linux-server
      host_name         192.168.0.115
      alias                     0.115
      address               192.168.0.115
      }

define service{
      use   generic-service
      host_name       192.168.0.115
      service_description   check_disk
      check_command         check_nrpe!check_disk
      max_check_attempts 5
      normal_check_interval 1
}

3)编辑commands.cfg配置文件
# vim /etc/nagios/objects/commands.cfg   //末尾添加如下内容

define command{
      command_name    check_nrpe
      command_line    $USER1$/check_nrpe -H $HOSTADDRESS$ -c $ARG1$
      }

4)重启nagios服务
# service nagios restart

3、查看效果
浏览器输入:192.168.0.114/nagios,验证账号密码进入后可看到下图效果:

Hosts增加了一台


Services显示监控磁盘状态




页: [1]
查看完整版本: shell编程之【nagios自定义监控系统磁盘脚本】