First commit
This commit is contained in:
219
syno/script.sh
Executable file
219
syno/script.sh
Executable file
@@ -0,0 +1,219 @@
|
||||
#!/bin/bash
|
||||
|
||||
# check_snmp_disksize
|
||||
# Description : Check the disk size of Windows server and Unix server
|
||||
# Version : 1.6
|
||||
# Author : Yoann LAMY
|
||||
# Licence : GPLv2
|
||||
|
||||
# MacBook-Pro:syno bruno$ ./script.sh -H localhost -d /BOOTCAMP
|
||||
|
||||
# Commands
|
||||
CMD_BASENAME="/usr/bin/basename"
|
||||
CMD_SNMPGET="/usr/bin/snmpget"
|
||||
CMD_SNMPWALK="/usr/bin/snmpwalk"
|
||||
CMD_BC="/usr/bin/bc"
|
||||
CMD_AWK="/usr/bin/awk"
|
||||
CMD_GREP="/usr/bin/grep"
|
||||
CMD_EXPR="/bin/expr"
|
||||
|
||||
# Script name
|
||||
SCRIPTNAME=`$CMD_BASENAME $0`
|
||||
|
||||
# Version
|
||||
VERSION="1.6"
|
||||
|
||||
# Plugin return codes
|
||||
STATE_OK=0
|
||||
STATE_WARNING=1
|
||||
STATE_CRITICAL=2
|
||||
STATE_UNKNOWN=3
|
||||
|
||||
# 'hrStorageDescr', HOST-RESOURCES-MIB
|
||||
OID_DESC=".1.3.6.1.2.1.25.2.3.1.3"
|
||||
|
||||
# 'hrStorageAllocationUnits', HOST-RESOURCES-MIB
|
||||
OID_UNIT=".1.3.6.1.2.1.25.2.3.1.4"
|
||||
|
||||
# 'hrStorageSize', HOST-RESOURCES-MIB
|
||||
OID_TOTAL=".1.3.6.1.2.1.25.2.3.1.5"
|
||||
|
||||
# 'hrStorageUsed', HOST-RESOURCES-MIB
|
||||
OID_USED=".1.3.6.1.2.1.25.2.3.1.6"
|
||||
|
||||
# Default variables
|
||||
DESCRIPTION="Unknown"
|
||||
STATE=$STATE_UNKNOWN
|
||||
CODE=0
|
||||
|
||||
# Default options
|
||||
COMMUNITY="public"
|
||||
HOSTNAME="127.0.0.1"
|
||||
DISK=""
|
||||
WARNING=20
|
||||
CRITICAL=10
|
||||
|
||||
# Option processing
|
||||
print_usage() {
|
||||
echo "Usage: ./check_snmp_disksize -H 127.0.0.1 -C public -d C: -w 80 -c 90"
|
||||
echo " $SCRIPTNAME -H ADDRESS"
|
||||
echo " $SCRIPTNAME -C STRING"
|
||||
echo " $SCRIPTNAME -d STRING"
|
||||
echo " $SCRIPTNAME -w INTEGER"
|
||||
echo " $SCRIPTNAME -c INTEGER"
|
||||
echo " $SCRIPTNAME -h"
|
||||
echo " $SCRIPTNAME -V"
|
||||
}
|
||||
|
||||
print_version() {
|
||||
echo $SCRIPTNAME version $VERSION
|
||||
echo ""
|
||||
echo "This nagios plugins comes with ABSOLUTELY NO WARRANTY."
|
||||
echo "You may redistribute copies of the plugins under the terms of the GNU General Public License v2."
|
||||
}
|
||||
|
||||
print_help() {
|
||||
print_version
|
||||
echo ""
|
||||
print_usage
|
||||
echo ""
|
||||
echo "Check the disk size of Windows server and Unix server"
|
||||
echo ""
|
||||
echo "-H ADDRESS"
|
||||
echo " Name or IP address of host (default: 127.0.0.1)"
|
||||
echo "-C STRING"
|
||||
echo " Community name for the host's SNMP agent (default: public)"
|
||||
echo "-d STRING"
|
||||
echo " Drive letter (C:) or mount point (/home)"
|
||||
echo "-w INTEGER"
|
||||
echo " Warning level for size in percent (default: 0)"
|
||||
echo "-c INTEGER"
|
||||
echo " Critical level for size in percent (default: 0)"
|
||||
echo "-h"
|
||||
echo " Print this help screen"
|
||||
echo "-V"
|
||||
echo " Print version and license information"
|
||||
echo ""
|
||||
echo ""
|
||||
echo "This plugin uses the 'snmpget' command and the 'snmpwalk' command included with the NET-SNMP package."
|
||||
echo "This plugin support performance data output."
|
||||
echo "If the percentage of the warning and critical levels are set 0, then the script returns a OK state."
|
||||
}
|
||||
|
||||
while getopts H:C:d:w:c:hV OPT
|
||||
do
|
||||
case $OPT in
|
||||
H) HOSTNAME="$OPTARG" ;;
|
||||
C) COMMUNITY="$OPTARG" ;;
|
||||
d) DISK="$OPTARG" ;;
|
||||
w) WARNING=$OPTARG ;;
|
||||
c) CRITICAL=$OPTARG ;;
|
||||
h)
|
||||
print_help
|
||||
exit $STATE_UNKNOWN
|
||||
;;
|
||||
V)
|
||||
print_version
|
||||
exit $STATE_UNKNOWN
|
||||
;;
|
||||
esac
|
||||
done
|
||||
|
||||
# Plugin processing
|
||||
if [ "${DISK: 0:1}" != "/" ]; then
|
||||
if [ "${DISK: -1}" != ":" ]; then
|
||||
DISK="${DISK}:"
|
||||
fi
|
||||
fi
|
||||
|
||||
size_convert() {
|
||||
if [ $VALUE -ge 1099511627776 ]; then
|
||||
VALUE=`echo "scale=2 ; ( ( ( $VALUE / 1024 ) / 1024 ) / 1024 ) / 1024" | $CMD_BC`
|
||||
VALUE="$VALUE To"
|
||||
elif [ $VALUE -ge 1073741824 ]; then
|
||||
VALUE=`echo "scale=2 ; ( ( $VALUE / 1024 ) / 1024 ) / 1024" | $CMD_BC`
|
||||
VALUE="$VALUE Go"
|
||||
elif [ $VALUE -ge 1048576 ]; then
|
||||
VALUE=`echo "scale=2 ; ( $VALUE / 1024 ) / 1024" | $CMD_BC`
|
||||
VALUE="$VALUE Mo"
|
||||
else
|
||||
VALUE=`echo "scale=2 ; $VALUE / 1024" | $CMD_BC`
|
||||
VALUE="$VALUE Octets"
|
||||
fi
|
||||
}
|
||||
|
||||
size_fix() {
|
||||
if [ ${VALUE: 0:1} = "-" ]; then
|
||||
VALUE=`$CMD_EXPR 4294967294 - \( 0 - $VALUE \)`
|
||||
fi
|
||||
}
|
||||
|
||||
DISK_DESC=`$CMD_SNMPWALK -t 2 -r 2 -v 1 -c $COMMUNITY $HOSTNAME "$OID_DESC" | $CMD_GREP "$DISK"`
|
||||
#DISK_DESC=`$CMD_SNMPWALK -t 2 -r 2 -v 1 -c $COMMUNITY $HOSTNAME "$OID_DESC" | $CMD_GREP "DRIVE : $DISK"`
|
||||
|
||||
#DISK_DESC=`$CMD_SNMPWALK -t 2 -r 2 -v 1 -c $COMMUNITY $HOSTNAME "$OID_DESC"`
|
||||
echo $DISK_DESC
|
||||
|
||||
if [ -n "$DISK_DESC" ]; then
|
||||
DISK_ID=`echo $DISK_DESC | $CMD_AWK '{print $1}' | $CMD_AWK -F "." '{print $NF}'`
|
||||
if [ ${DISK: 0:1} != "/" ]; then
|
||||
DISK_LABEL=`echo $DISK_DESC | $CMD_AWK '{ print $5 }' | $CMD_AWK -F ':' '{ print $2 }'`
|
||||
fi
|
||||
|
||||
DISK_UNIT=`$CMD_SNMPGET -t 2 -r 2 -v 1 -c $COMMUNITY -OvqU $HOSTNAME "${OID_UNIT}.${DISK_ID}"`
|
||||
DISK_TOTAL=`$CMD_SNMPGET -t 2 -r 2 -v 1 -c $COMMUNITY -OvqU $HOSTNAME "${OID_TOTAL}.${DISK_ID}"`
|
||||
DISK_USED=`$CMD_SNMPGET -t 2 -r 2 -v 1 -c $COMMUNITY -OvqU $HOSTNAME "${OID_USED}.${DISK_ID}"`
|
||||
|
||||
if [ $DISK_TOTAL != 0 ]; then
|
||||
VALUE=$DISK_TOTAL
|
||||
echo "VALUE (DISK_TOTAL): $VALUE"
|
||||
size_fix
|
||||
DISK_TOTAL=$VALUE
|
||||
echo "DISK_TOTAL: $DISK_TOTAL"
|
||||
|
||||
VALUE=$DISK_USED
|
||||
echo "VALUE (DISK_USED): $VALUE"
|
||||
size_fix
|
||||
DISK_USED=$VALUE
|
||||
echo "DISK_USED: $DISK_USED"
|
||||
|
||||
echo "DISK_UNIT: $DISK_UNIT"
|
||||
DISK_TOTAL=`$CMD_EXPR $DISK_TOTAL \* \( $DISK_UNIT \)`
|
||||
DISK_USED=`$CMD_EXPR $DISK_USED \* \( $DISK_UNIT \)`
|
||||
echo "DISK_TOTAL: $DISK_TOTAL"
|
||||
echo "DISK_USED: $DISK_USED"
|
||||
PERFDATA_WARNING=0
|
||||
PERFDATA_CRITICAL=0
|
||||
|
||||
if [ $WARNING != 0 ] || [ $CRITICAL != 0 ]; then
|
||||
DISK_USED_POURCENT=`$CMD_EXPR \( $DISK_USED \* 100 \) / $DISK_TOTAL`
|
||||
PERFDATA_WARNING=`$CMD_EXPR \( $DISK_TOTAL \* $WARNING \) / 100`
|
||||
PERFDATA_CRITICAL=`$CMD_EXPR \( $DISK_TOTAL \* $CRITICAL \) / 100`
|
||||
|
||||
if [ $DISK_USED_POURCENT -gt $CRITICAL ] && [ $CRITICAL != 0 ]; then
|
||||
STATE=$STATE_CRITICAL
|
||||
elif [ $DISK_USED_POURCENT -gt $WARNING ] && [ $WARNING != 0 ]; then
|
||||
STATE=$STATE_WARNING
|
||||
else
|
||||
STATE=$STATE_OK
|
||||
fi
|
||||
else
|
||||
STATE=$STATE_OK
|
||||
fi
|
||||
|
||||
VALUE=$DISK_TOTAL
|
||||
echo "VALUE (DISK_TOTAL): $VALUE"
|
||||
size_convert
|
||||
DISK_TOTAL_FORMAT=$VALUE
|
||||
echo "DISK_TOTAL_FORMAT: $DISK_TOTAL_FORMAT"
|
||||
|
||||
VALUE=$DISK_USED
|
||||
size_convert
|
||||
DISK_USED_FORMAT=$VALUE
|
||||
|
||||
DESCRIPTION="Disk/partition usage '$DISK' $DISK_LABEL : $DISK_USED_FORMAT utilise sur $DISK_TOTAL_FORMAT (${DISK_USED_POURCENT}%) | total=${DISK_TOTAL}B;$PERFDATA_WARNING;$PERFDATA_CRITICAL;0 used=${DISK_USED}B;0;0;0"
|
||||
fi
|
||||
fi
|
||||
|
||||
echo $DESCRIPTION
|
||||
exit $STATE
|
||||
Reference in New Issue
Block a user