Plugin Return Code
|
Service State
|
DISK State
|
0
|
OK
|
OK 或者PASSED
|
1
|
WARNING
|
插件警告 DISK报警只分OK或者CRITICAL
|
2
|
CRITICAL
|
DISK检测非OK 或者PASSED
|
3
|
UNKNOWN
|
未知状态
|
#!/bin/bash
# ========================================================================================
# disk healthplugin 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 ([email protected])"
# 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"-dthe disk (/dev/sda) "
echo" not the Hard disk partition(sda2 is wrong)"
echo"-vcheck the version"
echo"-hShow this page"
echo""
echo"Usage:$PROGNAME"
echo"Usage:$PROGNAME--help"
echo""
exit0
}
print_help(){
print_usage
echo""
echo"This plugin will check disk health"
echo""
exit0
}
# Parse parameters
# 传递参数
while[$#-gt0];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_DISKis 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_DISKstatus is$DISK_HEALTH"
#echo "OK - $CHECK_DISK status is $DISK_HEALTH | $DISK_INFO"
exit$STATE_OK
else
echo"CRITICAL -$CHECK_DISKstatus 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
;;
esac