From 9ff9923971afe03e5a585c5e764945579b409e90 Mon Sep 17 00:00:00 2001 From: Jan Wagner Date: Thu, 22 Oct 2020 15:45:05 +0200 Subject: [PATCH] Adding check_qnap3 --- check_qnap3/Makefile | 3 + check_qnap3/check_qnap3.sh | 801 +++++++++++++++++++++++++++++++++++++ check_qnap3/control | 6 + check_qnap3/copyright | 7 + 4 files changed, 817 insertions(+) create mode 100644 check_qnap3/Makefile create mode 100644 check_qnap3/check_qnap3.sh create mode 100644 check_qnap3/control create mode 100644 check_qnap3/copyright diff --git a/check_qnap3/Makefile b/check_qnap3/Makefile new file mode 100644 index 0000000..cf9673d --- /dev/null +++ b/check_qnap3/Makefile @@ -0,0 +1,3 @@ +#/usr/bin/make -f + +include ../common.mk diff --git a/check_qnap3/check_qnap3.sh b/check_qnap3/check_qnap3.sh new file mode 100644 index 0000000..0ca0824 --- /dev/null +++ b/check_qnap3/check_qnap3.sh @@ -0,0 +1,801 @@ +#!/bin/bash +############################# Written and Manteined by Nicola Bandini ############### +############################# Created and written by Matthias Luettermann ############### +############################# finetuning by primator@gmail.com +############################# finetuning by n.bandini@gmail.com +############################# with code and fix by Tom Lesniak, Hugo Geijteman, Jon Marston and Nathaelr +# +# copyright (c) 2008 Shahid Iqbal +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# contact the author directly for more information at: matthias@xcontrol.de +########################################################################################## +#Version 1.23.3 +plgVer=1.23.3 + +if [ ! "$#" == "5" ]; then + echo + echo "Check_QNAP3 "$plgVer + echo + echo "Warning: Wrong command line arguments." + echo + echo "Usage: ./check_qnap " + echo + echo "Parts are: sysinfo, systemuptime, temp, cpu, cputemp, freeram, powerstatus, fans, diskused, hdstatus, hd#status, hdtemp, hd#temp, volstatus (Raid Volume Status), vol#status" + echo + echo "hdstatus shows status & temp; volstatus check all vols and vols space; powerstatus check power supply" + echo "<#> is 1-8 for hd, 1-5 for vol" + echo + echo " Example for diskusage: ./check_qnap3.sh 127.0.0.1 public diskused 80 95" + echo + echo " Example for volstatus: ./check_qnap3.sh 127.0.0.1 public volstatus 15 10" + echo " critical and warning value are releted to free disk space" + echo + echo " Example for fans: ./check_qnap3.sh 127.0.0.1 public fans 2000 1900" + echo " critical and warning are minimum speed in rpm for fans" + echo + exit 3 +fi + +strHostname=$1 +strCommunity=$2 +strpart=$3 +strWarning=$4 +strCritical=$5 + +# Check if QNAP is online +TEST=$(snmpstatus -v2c $strHostname -c "$strCommunity" -t 5 -r 0 2>&1) +# echo "Test: $TEST"; +if [ "$TEST" == "Timeout: No Response from $strHostname" ]; then +echo "CRITICAL: SNMP to $strHostname is not available or wrong community string"; +exit 2; +fi + +# DISKUSED --------------------------------------------------------------------------------------------------------------------------------------- +if [ "$strpart" == "diskused" ]; then + disk=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.2.17.1.4.1 | awk '{print $4}' | sed 's/^"//') + free=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.2.17.1.5.1 | awk '{print $4}' | sed 's/^"//') + UNITtest=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.2.17.1.4.1 | awk '{print $5}' | sed 's/.*\(.B\).*/\1/') + UNITtest2=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.2.17.1.5.1 | awk '{print $5}' | sed 's/.*\(.B\).*/\1/') + #echo $disk - $free - $UNITtest - $UNITtest2 + + if [ "$UNITtest" == "TB" ]; then + factor=$(echo "scale=0; 1000000" | bc -l) + elif [ "$UNITtest" == "GB" ]; then + factor=$(echo "scale=0; 1000" | bc -l) + else + factor=$(echo "scale=0; 1" | bc -l) + fi + + if [ "$UNITtest2" == "TB" ]; then + factor2=$(echo "scale=0; 1000000" | bc -l) + elif [ "$UNITtest2" == "GB" ]; then + factor2=$(echo "scale=0; 1000" | bc -l) + else + factor2=$(echo "scale=0; 1" | bc -l) + fi + + #echo $factor - $factor2 + disk=$(echo "scale=0; $disk*$factor" | bc -l) + free=$(echo "scale=0; $free*$factor2" | bc -l) + + #debug used=$(echo "scale=0; 9000*1000" | bc -l) + used=$(echo "scale=0; $disk-$free" | bc -l) + + #echo $disk - $free - $used + PERC=$(echo "scale=0; $used*100/$disk" | bc -l) + + diskF=$(echo "scale=0; $disk/$factor" | bc -l) + freeF=$(echo "scale=0; $free/$factor2" | bc -l) + usedF=$(echo "scale=0; $used/$factor" | bc -l) + + #wdisk=$(echo "scale=0; $strWarning*$disk/100" | bc -l) + #cdisk=$(echo "scale=0; $strCritical*$disk/100" | bc -l) + + OUTPUT="Total:"$diskF"$UNITtest - Used:"$usedF"$UNITtest - Free:"$freeF"$UNITtest2 - Used Space: $PERC%|Used=$PERC;$strWarning;$strCritical;0;100" + + if [ $PERC -ge $strCritical ]; then + echo "CRITICAL: "$OUTPUT + exit 2 + elif [ $PERC -ge $strWarning ]; then + echo "WARNING: "$OUTPUT + exit 1 + else + echo "OK: "$OUTPUT + exit 0 + fi + + +# CPU ---------------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "cpu" ]; then + CPU=$(snmpget -v2c -Ln -c "$strCommunity" $strHostname 1.3.6.1.4.1.24681.1.2.1.0 -Oqv | sed -E 's/"|\s%//g') + + OUTPUT="CPU Load="$CPU"%|CPU load="$CPU"%;$strWarning;$strCritical;0;100" + + if (( $(echo "$CPU > $strCritical" | bc -l) )); then + echo "CRITICAL: "$OUTPUT + exit 2 + elif (( $(echo "$CPU > $strWarning" | bc -l) )); then + echo "WARNING: "$OUTPUT + exit 1 + else + echo "OK: "$OUTPUT + exit 0 + fi + +# CPUTEMP ---------------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "cputemp" ]; then + TEMP0=$(snmpget -v2c -c "$strCommunity" $strHostname .1.3.6.1.4.1.24681.1.2.5.0 | awk '{print $4}' | cut -c2-3) + OUTPUT="CPU Temperature="$TEMP0"C|NAS CPUtermperature="$TEMP0"C;$strWarning;$strCritical;0;90" + + if [ "$TEMP0" -ge "89" ]; then + echo "Cpu temperatur to high!: "$OUTPUT + exit 2 + else + if [ $TEMP0 -ge "$strCritical" ]; then + echo "CRITICAL: "$OUTPUT + exit 2 + fi + if [ $TEMP0 -ge "$strWarning" ]; then + echo "WARNING: "$OUTPUT + exit 1 + fi + echo "OK: "$OUTPUT + exit 0 + fi + +# Free RAM--------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "freeram" ]; then + TOTALRAM=$(snmpget -v2c -c "$strCommunity" $strHostname 1.3.6.1.4.1.24681.1.2.2.0 | awk '{print $4 $5}' | sed 's/.\(.*\)...../\1/') + FREERAM=$(snmpget -v2c -c "$strCommunity" $strHostname 1.3.6.1.4.1.24681.1.2.3.0 | awk '{print $4 $5}' | sed 's/.\(.*\)...../\1/') + + let "USEDRAM=($TOTALRAM-$FREERAM)" + + let "RAMPERC=(100-($FREERAM*100)/$TOTALRAM)" + + OUTPUT="Total:"$TOTALRAM"MB - Used:"$USEDRAM"MB - Free:"$FREERAM"MB = "$RAMPERC"%|Memory usage="$RAMPERC"%;$strWarning;$strCritical;0;100" + + if [ $RAMPERC -ge $strCritical ]; then + echo "CRITICAL: "$OUTPUT + exit 2 + + elif [ $RAMPERC -ge $strWarning ]; then + echo "WARNING: "$OUTPUT + exit 1 + + else echo "OK: "$OUTPUT + exit 0 + + fi + +# System Temperature--------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "temp" ]; then + TEMP0=$(snmpget -v2c -c "$strCommunity" $strHostname 1.3.6.1.4.1.24681.1.2.6.0 | awk '{print $4}' | cut -c2-3) + OUTPUT="Temperature="$TEMP0"C|NAS termperature="$TEMP0"C;$strWarning;$strCritical;0;80" + + if [ "$TEMP0" -ge "89" ]; then + echo "System temperatur to high!: "$OUTPUT + exit 2 + else + + if [ $TEMP0 -ge "$strCritical" ]; then + echo "CRITICAL: "$OUTPUT + exit 2 + fi + if [ $TEMP0 -ge "$strWarning" ]; then + echo "WARNING: "$OUTPUT + exit 1 + fi + echo "OK: "$OUTPUT + exit 0 + fi + +# ALL HDs TEMP --------------------------------------------------------------------------------------------------------------------------------------- +# Don't bother with perfdata, this plugin is simply to make us aware of a potential issue. The QNAP interface can give us details. +elif [ "$strpart" == "hdtemp" ]; then + + hdnum=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.4.1.1.1.1.5.1.0 | awk '{print $4}') + + output="OK: ($hdnum disks)" + ret=0 + + for (( c=1; c<=$hdnum; c++ )) + do + TEMPHD=$(snmpget -v2c -c "$strCommunity" -mALL "$strHostname" 1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.6.$c | awk '{print $4}') + if [ ${TEMPHD} -ge "$strWarning" ]; then + + if [ ${ret} -eq 0 ]; then + output="" + ret=1 + fi + + ENC=$(snmpget -v2c -c "$strCommunity" -mALL "$strHostname" 1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.3.$c | awk '{print $4}') + ID=$(snmpget -v2c -c "$strCommunity" -mALL "$strHostname" 1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.2.$c | awk '{print $4}') + + if [ ${TEMPHD} -ge "$strCritical" ]; then + ret=2 + output+="CRITICAL: Disk ${ID} in enclosure ${ENC} is ${TEMPHD}C \n" + else + output+="WARN: Disk ${ID} in enclosure ${ENC} is ${TEMPHD}C \n" + fi + fi + done + + printf "$output" + exit ${ret} + +# HD1 Temperature--------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "hd1temp" ]; then + TEMPHD=$(snmpget -v2c -c "$strCommunity" $strHostname 1.3.6.1.4.1.24681.1.2.11.1.3.1 | awk '{print $4}' | cut -c2-3) + OUTPUT="Temperature="$TEMPHD"C|HDD1 termperature="$TEMPHD"C;$strWarning;$strCritical;0;60" + + if [ "$TEMPHD" -ge "59" ]; then + echo "HDD1 temperatur to high!: "$OUTPUT + exit 2 + else + if [ $TEMPHD -ge "$strCritical" ]; then + echo "CRITICAL: "$OUTPUT + exit 2 + fi + if [ $TEMPHD -ge "$strWarning" ]; then + echo "WARNING: "$OUTPUT + exit 1 + fi + echo "OK: "$OUTPUT + exit 0 + fi + +# HD2 Temperature--------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "hd2temp" ]; then + TEMPHD=$(snmpget -v2c -c "$strCommunity" $strHostname 1.3.6.1.4.1.24681.1.2.11.1.3.2 | awk '{print $4}' | cut -c2-3) + OUTPUT="Temperature="$TEMPHD"C|HDD2 termperature="$TEMPHD"C;$strWarning;$strCritical;0;60" + + if [ "$TEMPHD" -ge "59" ]; then + echo "HDD2 temperatur to high!: "$OUTPUT + exit 2 + else + if [ $TEMPHD -ge "$strCritical" ]; then + echo "CRITICAL: "$OUTPUT + exit 2 + fi + if [ $TEMPHD -ge "$strWarning" ]; then + echo "WARNING: "$OUTPUT + exit 1 + fi + echo "OK: "$OUTPUT + exit 0 + fi + +# HD3 Temperature--------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "hd3temp" ]; then + TEMPHD=$(snmpget -v2c -c "$strCommunity" $strHostname 1.3.6.1.4.1.24681.1.2.11.1.3.3 | awk '{print $4}' | cut -c2-3) + OUTPUT="Temperature="$TEMPHD"C|HDD3 termperature="$TEMPHD"C;$strWarning;$strCritical;0;60" + + if [ "$TEMPHD" -ge "59" ]; then + echo "HDD3 temperatur to high!: "$OUTPUT + exit 2 + else + if [ $TEMPHD -ge "$strCritical" ]; then + echo "CRITICAL: "$OUTPUT + exit 2 + fi + if [ $TEMPHD -ge "$strWarning" ]; then + echo "WARNING: "$OUTPUT + exit 1 + fi + echo "OK: "$OUTPUT + exit 0 + fi + +# HD4 Temperature--------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "hd4temp" ]; then + TEMPHD=$(snmpget -v2c -c "$strCommunity" $strHostname 1.3.6.1.4.1.24681.1.2.11.1.3.4 | awk '{print $4}' | cut -c2-3) + OUTPUT="Temperature="$TEMPHD"C|HDD4 termperature="$TEMPHD"C;$strWarning;$strCritical;0;60" + + if [ "$TEMPHD" -ge "59" ]; then + echo "HDD4 temperatur to high!: "$OUTPUT + exit 2 + else + if [ $TEMPHD -ge "$strCritical" ]; then + echo "CRITICAL: "$OUTPUT + exit 2 + fi + if [ $TEMPHD -ge "$strWarning" ]; then + echo "WARNING: "$OUTPUT + exit 1 + fi + echo "OK: "$OUTPUT + exit 0 + fi + +# HD5 Temperature--------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "hd5temp" ]; then + TEMPHD=$(snmpget -v2c -c "$strCommunity" $strHostname 1.3.6.1.4.1.24681.1.2.11.1.3.5 | awk '{print $4}' | cut -c2-3) + OUTPUT="Temperature="$TEMPHD"C|HDD5 termperature="$TEMPHD"C;$strWarning;$strCritical;0;60" + + if [ "$TEMPHD" -ge "59" ]; then + echo "HDD5 temperatur to high!: "$OUTPUT + exit 2 + else + if [ $TEMPHD -ge "$strCritical" ]; then + echo "CRITICAL: "$OUTPUT + exit 2 + fi + if [ $TEMPHD -ge "$strWarning" ]; then + echo "WARNING: "$OUTPUT + exit 1 + fi + echo "OK: "$OUTPUT + exit 0 + fi + +# HD6 Temperature--------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "hd6temp" ]; then + TEMPHD=$(snmpget -v2c -c "$strCommunity" $strHostname 1.3.6.1.4.1.24681.1.2.11.1.3.6 | awk '{print $4}' | cut -c2-3) + OUTPUT="Temperature="$TEMPHD"C|HDD6 termperature="$TEMPHD"C;$strWarning;$strCritical;0;60" + + if [ "$TEMPHD" -ge "59" ]; then + echo "HDD6 temperatur to high!: "$OUTPUT + exit 2 + else + if [ $TEMPHD -ge "$strCritical" ]; then + echo "CRITICAL: "$OUTPUT + exit 2 + fi + if [ $TEMPHD -ge "$strWarning" ]; then + echo "WARNING: "$OUTPUT + exit 1 + fi + echo "OK: "$OUTPUT + exit 0 + fi + +# HD7 Temperature--------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "hd7temp" ]; then + TEMPHD=$(snmpget -v2c -c "$strCommunity" $strHostname 1.3.6.1.4.1.24681.1.2.11.1.3.7 | awk '{print $4}' | cut -c2-3) + OUTPUT="Temperature="$TEMPHD"C|HDD7 termperature="$TEMPHD"C;$strWarning;$strCritical;0;60" + + if [ "$TEMPHD" -ge "59" ]; then + echo "HDD7 temperatur to high!: "$OUTPUT + exit 2 + else + if [ $TEMPHD -ge "$strCritical" ]; then + echo "CRITICAL: "$OUTPUT + exit 2 + fi + if [ $TEMPHD -ge "$strWarning" ]; then + echo "WARNING: "$OUTPUT + exit 1 + fi + echo "OK: "$OUTPUT + exit 0 + fi + +# HD8 Temperature--------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "hd8temp" ]; then + TEMPHD=$(snmpget -v2c -c "$strCommunity" $strHostname 1.3.6.1.4.1.24681.1.2.11.1.3.8 | awk '{print $4}' | cut -c2-3) + OUTPUT="Temperature="$TEMPHD"C|HDD8 termperature="$TEMPHD"C;$strWarning;$strCritical;0;60" + + if [ "$TEMPHD" -ge "59" ]; then + echo "HDD8 temperatur to high!: "$OUTPUT + exit 2 + else + if [ $TEMPHD -ge "$strCritical" ]; then + echo "CRITICAL: "$OUTPUT + exit 2 + fi + if [ $TEMPHD -ge "$strWarning" ]; then + echo "WARNING: "$OUTPUT + exit 1 + fi + echo "OK: "$OUTPUT + exit 0 + fi + +# Volume 1 Status---------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "vol1status" ]; then + Vol_Status=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.2.17.1.6.1 | awk '{print $4}' | sed 's/^"\(.*\).$/\1/') + + if [ "$Vol_Status" == "Ready" ]; then + echo OK: $Vol_Status + exit 0 + + elif [ "$Vol_Status" == "Rebuilding..." ]; then + echo "WARNING: "$Vol_Status + exit 1 + + else + echo "CRITICAL: "$Vol_Status + exit 2 + fi + +# Volume 2 Status---------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "vol2status" ]; then + Vol_Status=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.2.17.1.6.2 | awk '{print $4}' | sed 's/^"\(.*\).$/\1/') + + if [ "$Vol_Status" == "Ready" ]; then + echo OK: $Vol_Status + exit 0 + + elif [ "$Vol_Status" == "Rebuilding..." ]; then + echo "WARNING: "$Vol_Status + exit 1 + + else + echo "CRITICAL: "$Vol_Status + exit 2 + fi + +# Volume 3 Status---------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "vol3status" ]; then + Vol_Status=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.2.17.1.6.3 | awk '{print $4}' | sed 's/^"\(.*\).$/\1/') + + if [ "$Vol_Status" == "Ready" ]; then + echo OK: $Vol_Status + exit 0 + + elif [ "$Vol_Status" == "Rebuilding..." ]; then + echo "WARNING: "$Vol_Status + exit 1 + + else + echo "CRITICAL: "$Vol_Status + exit 2 + fi + +# Volume 4 Status---------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "vol4status" ]; then + Vol_Status=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.2.17.1.6.4 | awk '{print $4}' | sed 's/^"\(.*\).$/\1/') + + if [ "$Vol_Status" == "Ready" ]; then + echo OK: $Vol_Status + exit 0 + + elif [ "$Vol_Status" == "Rebuilding..." ]; then + echo "WARNING: "$Vol_Status + exit 1 + + else + echo "CRITICAL: "$Vol_Status + exit 2 + fi + +# Volume 5 Status---------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "vol5status" ]; then + Vol_Status=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.2.17.1.6.5 | awk '{print $4}' | sed 's/^"\(.*\).$/\1/') + + if [ "$Vol_Status" == "Ready" ]; then + echo OK: $Vol_Status + exit 0 + + elif [ "$Vol_Status" == "Rebuilding..." ]; then + echo "WARNING: "$Vol_Status + exit 1 + + else + echo "CRITICAL: "$Vol_Status + exit 2 + fi + +# HD1 Status---------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "hd1status" ]; then + HD1=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.2.11.1.7.1 | awk '{print $4}' | sed 's/^"\(.*\).$/\1/') + + if [ "$HD1" == "GOOD" ]; then + echo OK: GOOD + exit 0 + else + echo CRITICAL: ERROR + exit 2 + fi + +# HD2 Status---------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "hd2status" ]; then + HD2=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.2.11.1.7.2 | awk '{print $4}' | sed 's/^"\(.*\).$/\1/') + + if [ "$HD2" == "GOOD" ]; then + echo OK: GOOD + exit 0 + else + echo CRITICAL: ERROR + exit 2 + fi + +# HD3 Status---------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "hd3status" ]; then + HD3=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.3.11.1.7.3 | awk '{print $4}' | sed 's/^"\(.*\).$/\1/') + if [ "$HD3" == "GOOD" ]; then + echo OK: GOOD + exit 0 + else + echo CRITICAL: ERROR + exit 2 + fi + +# HD4 Status---------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "hd4status" ]; then + HD4=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.3.11.1.7.4 | awk '{print $4}' | sed 's/^"\(.*\).$/\1/') + if [ "$HD4" == "GOOD" ]; then + echo OK: GOOD + exit 0 + else + echo CRITICAL: ERROR + exit 2 + fi + +# HD5 Status---------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "hd5status" ]; then + HD5=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.3.11.1.7.5 | awk '{print $4}' | sed 's/^"\(.*\).$/\1/') + if [ "$HD5" == "GOOD" ]; then + echo OK: GOOD + exit 0 + else + echo CRITICAL: ERROR + exit 2 + fi + +# HD6 Status---------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "hd6status" ]; then + HD6=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.3.11.1.7.6 | awk '{print $4}' | sed 's/^"\(.*\).$/\1/') + if [ "$HD6" == "GOOD" ]; then + echo OK: GOOD + exit 0 + else + echo CRITICAL: ERROR + exit 2 + fi + +# HD7 Status---------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "hd7status" ]; then + HD7=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.3.11.1.7.7 | awk '{print $4}' | sed 's/^"\(.*\).$/\1/') + if [ "$HD7" == "GOOD" ]; then + echo OK: GOOD + exit 0 + else + echo CRITICAL: ERROR + exit 2 + fi + +# HD8 Status---------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "hd8status" ]; then + HD8=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.3.11.1.7.8 | awk '{print $4}' | sed 's/^"\(.*\).$/\1/') + if [ "$HD8" == "GOOD" ]; then + echo OK: GOOD + exit 0 + else + echo CRITICAL: ERROR + exit 2 + fi + + +# HD Status---------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "hdstatus" ]; then + + hdnum=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.4.1.1.1.1.5.1.0 | awk '{print $4}') + + hdok=0 + hdnop=0 + output_crit="" + + for (( c=1; c<=$hdnum; c++ )) + do + HD=$(snmpget -v2c -c "$strCommunity" -mALL "$strHostname" 1.3.6.1.4.1.24681.1.4.1.1.1.1.5.2.1.4.$c | awk '{print $4}' | sed 's/^"\(.*\).$/\1/') + if [ ${HD^^} == "GOOD" ]; then + hdok=$(echo "scale=0; $hdok+1" | bc -l) + elif [ "$HD" == "--" ]; then + hdnop=$(echo "scale=0; $hdnop+1" | bc -l) + else + output_crit=${output_crit}" Disk ${c}" + fi + done + + if [ -n "$output_crit" ] + then + echo "CRITICAL: ${output_crit}" + exit 2 + else + echo "OK: Online Disk $hdok, Free Slot $hdnop" + exit 0 + fi + +# Volume Status---------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "volstatus" ]; then + ALLOUTPUT="" + PERFOUTPUT="" + WARNING=0 + CRITICAL=0 + VOL=1 + VOLCOUNT=$(snmpget -v2c -c "$strCommunity" "$strHostname" .1.3.6.1.4.1.24681.1.2.16.0 | awk '{print $4}') + + while [ "$VOL" -le "$VOLCOUNT" ]; do + Vol_Status=$(snmpget -v2c -c "$strCommunity" "$strHostname" .1.3.6.1.4.1.24681.1.2.17.1.6.$VOL | awk '{print $4}' | sed 's/^"\(.*\).$/\1/') + + if [ "$Vol_Status" == "Ready" ]; then + VOLSTAT="OK: $Vol_Status" + + elif [ "$Vol_Status" == "Rebuilding..." ]; then + VOLSTAT="WARNING: $Vol_Status" + WARNING=1 + else + VOLSTAT="CRITICAL: $Vol_Status" + CRITICAL=1 + fi + + VOLCAPACITY=0 + VOLFREESIZE=0 + VOLPCT=0 + + VOLCAPACITY=$(snmpget -v2c -c "$strCommunity" "$strHostname" .1.3.6.1.4.1.24681.1.2.17.1.4.$VOL | awk '{print $4}' | sed 's/^"\(.*\).$/\1/') + VOLFREESIZE=$(snmpget -v2c -c "$strCommunity" "$strHostname" .1.3.6.1.4.1.24681.1.2.17.1.5.$VOL | awk '{print $4}' | sed 's/^"\(.*\).$/\1/') + UNITtest=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.2.17.1.4.$VOL | awk '{print $5}' | sed 's/.*\(.B\).*/\1/') + UNITtest2=$(snmpget -v2c -c "$strCommunity" "$strHostname" 1.3.6.1.4.1.24681.1.2.17.1.5.$VOL | awk '{print $5}' | sed 's/.*\(.B\).*/\1/') + + if [ "$UNITtest" == "TB" ]; then + factor=$(echo "scale=0; 1000000" | bc -l) + elif [ "$UNITtest" == "GB" ]; then + factor=$(echo "scale=0; 1000" | bc -l) + else + factor=$(echo "scale=0; 1" | bc -l) + fi + + if [ "$UNITtest2" == "TB" ]; then + factor2=$(echo "scale=0; 1000000" | bc -l) + elif [ "$UNITtest2" == "GB" ]; then + factor2=$(echo "scale=0; 1000" | bc -l) + else + factor2=$(echo "scale=0; 1" | bc -l) + fi + + VOLCAPACITYF=$(echo "scale=0; $VOLCAPACITY*$factor" | bc -l) + VOLFREESIZEF=$(echo "scale=0; $VOLFREESIZE*$factor2" | bc -l) + + VOLPCT=`echo "($VOLFREESIZEF*100)/$VOLCAPACITYF" | bc` + + if [ "$VOLPCT" -le "$strCritical" ]; then + VOLPCT="CRITICAL: $VOLPCT" + CRITICAL=1 + elif [ "$VOLPCT" -le "$strWarning" ]; then + VOLPCT="WARNING: $VOLPCT" + WARNING=1 + fi + + if [ "$VOL" -lt "$VOLCOUNT" ]; then + ALLOUTPUT="${ALLOUTPUT}Volume #${VOL}: $VOLSTAT, Total Size (bytes): $VOLCAPACITY $UNITtest, Free: $VOLFREESIZE $UNITtest2 (${VOLPCT}%), " + else + ALLOUTPUT="${ALLOUTPUT}Volume #${VOL}: $VOLSTAT, Total Size (bytes): $VOLCAPACITY $UNITtest, Free: $VOLFREESIZE $UNITtest2 (${VOLPCT}%)" + fi + + #Performance Data + if [ $VOL -gt 1 ]; then + PERFOUTPUT=$PERFOUTPUT" " + fi + PERFOUTPUT=$PERFOUTPUT"FreeSize_Volume-$VOL=${VOLPCT}%;$strWarning;$strCritical;0;100" + + VOL=`expr $VOL + 1` + done + + echo $ALLOUTPUT"|"$PERFOUTPUT + + if [ $CRITICAL -eq 1 ]; then + exit 2 + elif [ $WARNING -eq 1 ]; then + exit 1 + else + exit 0 + fi + +# Power Supply Status ---------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "powerstatus" ]; then + ALLOUTPUT="" + WARNING=0 + CRITICAL=0 + PS=1 + COUNT=$(snmpget -v2c -c "$strCommunity" $strHostname .1.3.6.1.4.1.24681.1.4.1.1.1.1.3.1.0 | awk '{print $4}') + while [ "$PS" -le "$COUNT" ]; do + STATUS=$(snmpget -v2c -c "$strCommunity" $strHostname .1.3.6.1.4.1.24681.1.4.1.1.1.1.3.2.1.4.$PS | awk '{print $4}') + if [ "$STATUS" -eq "0" ]; then + PSSTATUS="OK: GOOD" + else + PSSTATUS="CRITICAL: ERROR" + CRITICAL=1 + fi + if [ "$PS" -lt "$COUNT" ]; then + ALLOUTPUT="${ALLOUTPUT}Power Supply #${PS} - $PSSTATUS\n" + else + ALLOUTPUT="${ALLOUTPUT}Power Supply #${PS} - $PSSTATUS" + fi + PS=`expr $PS + 1` + done + + echo $ALLOUTPUT + + if [ $CRITICAL -eq 1 ]; then + exit 2 + elif [ $WARNING -eq 1 ]; then + exit 1 + else + exit 0 + fi + +# Fan Status---------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "fans" ]; then + ALLOUTPUT="" + PERFOUTPUT="" + WARNING=0 + CRITICAL=0 + FAN=1 + FANCOUNT=$(snmpget -v2c -c "$strCommunity" "$strHostname" .1.3.6.1.4.1.24681.1.2.14.0 | awk '{print $4}') + while [ "$FAN" -le "$FANCOUNT" ]; do + FANSPEED=$(snmpget -v2c -c "$strCommunity" "$strHostname" .1.3.6.1.4.1.24681.1.2.15.1.3.$FAN | awk '{print $4}' | cut -c 2- ) + + #Performance data + if [ $FAN -gt 1 ]; then + PERFOUTPUT=$PERFOUTPUT" " + fi + PERFOUTPUT=$PERFOUTPUT"Fan-$FAN=$FANSPEED;$strWarning;$strCritical" + + if [ "$FANSPEED" == "" ]; then + FANSTAT="CRITICAL: $FANSPEED RPM" + CRITICAL=1 + + elif [ "$FANSPEED" -le "$strCritical" ]; then + FANSTAT="CRITICAL: $FANSPEED RPM" + CRITICAL=1 + + elif [ "$FANSPEED" -le "$strWarning" ]; then + FANSTAT="WARNING: $FANSPEED RPM" + WARNING=1 + else + FANSTAT="OK: $FANSPEED RPM" + fi + + if [ "$FAN" -lt "$FANCOUNT" ]; then + ALLOUTPUT="${ALLOUTPUT}Fan #${FAN}: $FANSTAT, " + else + ALLOUTPUT="${ALLOUTPUT}Fan #${FAN}: $FANSTAT" + fi + + FAN=`expr $FAN + 1` + done + + echo $ALLOUTPUT"|"$PERFOUTPUT + + if [ $CRITICAL -eq 1 ]; then + exit 2 + elif [ $WARNING -eq 1 ]; then + exit 1 + else + exit 0 + fi + +# System Uptime---------------------------------------------------------------------------------------------------------------------------------------- +elif [ "$strpart" == "systemuptime" ]; then + netuptime=$(snmpget -v2c -c "$strCommunity" "$strHostname" .1.3.6.1.2.1.1.3.0 | awk '{print $5, $6, $7, $8}') + sysuptime=$(snmpget -v2c -c "$strCommunity" "$strHostname" .1.3.6.1.2.1.25.1.1.0 | awk '{print $5, $6, $7, $8}') + + echo System Uptime $sysuptime - Network Uptime $netuptime + exit 0 + +# System Info------------------------------------------------------------------------------------------------------------------------------------------ +elif [ "$strpart" == "sysinfo" ]; then + model=$(snmpget -v2c -c "$strCommunity" "$strHostname" .1.3.6.1.4.1.24681.1.2.12.0 | awk '{print $4}' | sed 's/^"\(.*\).$/\1/') + hdnum=$(snmpget -v2c -c "$strCommunity" "$strHostname" .1.3.6.1.4.1.24681.1.2.10.0 | awk '{print $4}') + VOLCOUNT=$(snmpget -v2c -c "$strCommunity" "$strHostname" .1.3.6.1.4.1.24681.1.2.16.0 | awk '{print $4}') + name=$(snmpget -v2c -c "$strCommunity" "$strHostname" .1.3.6.1.4.1.24681.1.2.13.0 | awk '{print $4}' | sed 's/^"\(.*\)$/\1/') + firmware=$(snmpget -v2c -c "$strCommunity" "$strHostname" .1.3.6.1.2.1.47.1.1.1.1.9.1 | awk '{print $4}' | sed 's/^"\(.*\)$/\1/') + + echo NAS $name, Model $model, Firmware $firmware, Max HD number $hdnum, No. Volume $VOLCOUNT + exit 0 + +#---------------------------------------------------------------------------------------------------------------------------------------------------- +else + echo -e "\nUnknown Part!" && exit "3" +fi +exit 0 diff --git a/check_qnap3/control b/check_qnap3/control new file mode 100644 index 0000000..be39d9d --- /dev/null +++ b/check_qnap3/control @@ -0,0 +1,6 @@ +Homepage: https://github.com/nikband/check_qnap3.sh +Watch: https://raw.githubusercontent.com/nikband/check_qnap3.sh/master/check_qnap3.sh #Version\ ([0-9.]+) +Uploaders: Jan Wagner +Description: plugin to check NAS QNAP. +Recommends: snmp +Version: 1.23.3 diff --git a/check_qnap3/copyright b/check_qnap3/copyright new file mode 100644 index 0000000..50c4003 --- /dev/null +++ b/check_qnap3/copyright @@ -0,0 +1,7 @@ +Copyright (c) 2008 Shahid Iqbal + +License: GPL+ + + On Debian systems, the complete text of the GNU General + Public License can be found in "/usr/share/common-licenses/GPL". +