205 lines
5.8 KiB
Bash
Executable File
205 lines
5.8 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
#cf test sur les strings
|
|
|
|
SNMPCOMMUNITY="public"
|
|
SNMPVERSION="2c"
|
|
SNMPWALK=$(which snmpwalk)
|
|
SNMPGET=$(which snmpget)
|
|
CMD_BC=$(which bc)
|
|
CMD_EXPR=$(which expr)
|
|
|
|
#HOSTNAME="localhost"
|
|
HOSTNAME="192.168.0.8"
|
|
WARNING=80
|
|
CRITICAL=90
|
|
|
|
STATE=$STATE_UNKNOWN
|
|
STATE_OK="OK"
|
|
STATE_WARNING="Warning"
|
|
STATE_CRITICAL="Critical"
|
|
STATE_UNKNOWN="Inconnu"
|
|
|
|
##############
|
|
# Disk MIB (no)
|
|
##############
|
|
OID_storage=""
|
|
OID_hrStorageIndex=".1.3.6.1.2.1.25.2.3.1.1"
|
|
#A description of the type and instance of the storage described by this entry
|
|
OID_hrStorageDescr=".1.3.6.1.2.1.25.2.3.1.3"
|
|
#The size, in bytes, of the data objects allocated from this pool
|
|
OID_hrStorageAllocationUnits=".1.3.6.1.2.1.25.2.3.1.4"
|
|
#The size of the storage represented by this entry, in units of hrStorageAllocationUnits
|
|
OID_hrStorageSize=".1.3.6.1.2.1.25.2.3.1.5"
|
|
#The amount of the storage represented by this entry
|
|
OID_hrStorageUsed=".1.3.6.1.2.1.25.2.3.1.6"
|
|
|
|
OID_diskIODevice=".1.3.6.1.4.1.2021.13.15.1.1.2"
|
|
OID_diskIONReadX=".1.3.6.1.4.1.2021.13.15.1.1.12"
|
|
OID_diskIONWrittenX=".1.3.6.1.4.1.2021.13.15.1.1.13"
|
|
OID_synoDisk=".1.3.6.1.4.1.6574.2"
|
|
|
|
nbStorage=`$SNMPWALK -OQne -t 10 -v $SNMPVERSION -c $SNMPCOMMUNITY $HOSTNAME $OID_hrStorageDescr 2> /dev/null | wc -l`
|
|
|
|
declare RESULT=()
|
|
while read -r LINE; do
|
|
RESULT[${#RESULT[@]}]=$LINE
|
|
|
|
index=`$SNMPGET -OQne -t 10 -v $SNMPVERSION -c $SNMPCOMMUNITY $HOSTNAME $OID_hrStorageIndex.$(($i)) 2> /dev/null`
|
|
|
|
OID_storage="$OID_storage $OID_hrStorageDescr.$(($LINE)) $OID_hrStorageAllocationUnits.$(($LINE)) $OID_hrStorageSize.$(($LINE)) $OID_hrStorageUsed.$(($LINE)) "
|
|
|
|
done < <($SNMPWALK -v $SNMPVERSION -c $SNMPCOMMUNITY $HOSTNAME $OID_hrStorageIndex | awk '{print $4}')
|
|
|
|
|
|
diskMIB=`$SNMPGET -OQne -t 10 -v $SNMPVERSION -c $SNMPCOMMUNITY $HOSTNAME $OID_storage 2> /dev/null`
|
|
|
|
#OID_hrStorageIndex=".1.3.6.1.2.1.25.2.3.1.1"
|
|
#OID_hrStorageType=".1.3.6.1.2.1.25.2.3.1.2"
|
|
#OID_hrStorageDescr=".1.3.6.1.2.1.25.2.3.1.3"
|
|
#OID_hrStorageAllocationUnits=".1.3.6.1.2.1.25.2.3.1.4"
|
|
#OID_hrStorageSize=".1.3.6.1.2.1.25.2.3.1.5"
|
|
#OID_hrStorageUsed=".1.3.6.1.2.1.25.2.3.1.6"
|
|
#OID_diskIODevice=".1.3.6.1.4.1.2021.13.15.1.1.2"
|
|
#OID_diskIONReadX=".1.3.6.1.4.1.2021.13.15.1.1.12"
|
|
#OID_diskIONWrittenX=".1.3.6.1.4.1.2021.13.15.1.1.13"
|
|
#OID_synoDisk=".1.3.6.1.4.1.6574.2"
|
|
|
|
if [ "$?" != "0" ] ; then
|
|
echo "CRITICAL - Problem with SNMP request diksMIB"
|
|
#exit 2
|
|
fi
|
|
#echo $diskMIB
|
|
|
|
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
|
|
}
|
|
|
|
hrStorageDescr=""
|
|
hrStorageAllocationUnits=""
|
|
hrStorageSize=""
|
|
hrStorageUsed=""
|
|
i=0
|
|
j=0
|
|
|
|
declare RESULT=()
|
|
while read -r LINE; do
|
|
RESULT[${#RESULT[@]}]=$LINE
|
|
_hrStorageDescr=$(echo $LINE | grep $OID_hrStorageDescr | cut -d "=" -f2)
|
|
_hrStorageAllocationUnits=$(echo $LINE | grep $OID_hrStorageAllocationUnits | cut -d "=" -f2)
|
|
_hrStorageSize=$(echo $LINE | grep $OID_hrStorageSize | cut -d "=" -f2)
|
|
_hrStorageUsed=$(echo $LINE | grep $OID_hrStorageUsed | cut -d "=" -f2)
|
|
|
|
if [ -n "$_hrStorageDescr" ] ; then hrStorageDescr[$j]=$_hrStorageDescr ; fi
|
|
|
|
if [ -n "$_hrStorageAllocationUnits" ] ; then hrStorageAllocationUnits[$j]=$_hrStorageAllocationUnits ; fi
|
|
|
|
if [ -n "$_hrStorageSize" ] ; then hrStorageSize[$j]=$_hrStorageSize ; fi
|
|
|
|
if [ -n "$_hrStorageUsed" ] ; then
|
|
#hrStorageUsed[$j]=$_hrStorageUsed
|
|
|
|
VALUE=$_hrStorageUsed
|
|
#size_fix
|
|
#size_convert
|
|
hrStorageUsed[$j]=$VALUE
|
|
fi
|
|
|
|
((i=i+1))
|
|
|
|
if [ $i -eq "4" ]
|
|
then
|
|
i=0
|
|
((j=j+1))
|
|
fi
|
|
|
|
|
|
done < <($SNMPGET -OQne -t 10 -v $SNMPVERSION -c $SNMPCOMMUNITY $HOSTNAME $OID_storage)
|
|
|
|
|
|
for((i=0;i<$nbStorage;i++));
|
|
do
|
|
# // remove all spaces
|
|
#DISK_LABEL=${hrStorageDescr[i]// }
|
|
# remove leading and trailing spaces
|
|
DISK_LABEL=`echo ${hrStorageDescr[i]} | sed 's/^ *//g' | sed 's/ *$//g'`
|
|
DISK_UNIT=`echo ${hrStorageAllocationUnits[i]} | awk '{print $1}'`
|
|
DISK_TOTAL=${hrStorageSize[i]// }
|
|
DISK_USED=${hrStorageUsed[i]// }
|
|
# longeur de la chaine
|
|
#echo ${#DISK_USED}
|
|
# 1er caractère de la variable est -
|
|
#if [ ${VALUE: 0:1} = "-" ]; then
|
|
|
|
#echo "$DISK_LABEL"
|
|
|
|
# Swap space
|
|
#if [ "${DISK_LABEL}" == "Shared memory" ]; then
|
|
#echo "$DISK_TOTAL"
|
|
#echo "$DISK_USED"
|
|
#fi
|
|
|
|
if [ "${DISK_LABEL}" != "/dev" ] && [ "${DISK_LABEL}" != "/net" ] && [ "${DISK_LABEL}" != "/home" ] && [ "${DISK_LABEL}" != "Shared memory" ]; then
|
|
|
|
|
|
DISK_TOTAL=`$CMD_EXPR $DISK_TOTAL \* \( $DISK_UNIT \)`
|
|
DISK_USED=`$CMD_EXPR $DISK_USED \* \( $DISK_UNIT \)`
|
|
#echo "$DISK_TOTAL"
|
|
#echo "$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`
|
|
#echo "$PERFDATA_WARNING"
|
|
#echo "$PERFDATA_CRITICAL"
|
|
|
|
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
|
|
size_convert
|
|
DISK_TOTAL_FORMAT=$VALUE
|
|
|
|
VALUE=$DISK_USED
|
|
size_convert
|
|
DISK_USED_FORMAT=$VALUE
|
|
|
|
|
|
printf "%s %s %s\n" "$DISK_LABEL $DISK_USED_FORMAT utilise sur $DISK_TOTAL_FORMAT (${DISK_USED_POURCENT}%) $STATE"
|
|
|
|
fi
|
|
|
|
done
|
|
|
|
#exit $STATE
|