Skip to content

Instantly share code, notes, and snippets.

@seidler2547
Created February 16, 2021 11:04
Show Gist options
  • Save seidler2547/79549e3994c375dbf9668a1bf6c0c512 to your computer and use it in GitHub Desktop.
Save seidler2547/79549e3994c375dbf9668a1bf6c0c512 to your computer and use it in GitHub Desktop.
Nagios/Icinga hardware monitor check
#!/bin/bash
export LANG=C
export LC_ALL=C
R=3
WC=0
CC=0
IGN=$1
PD='|'
MS=''
for d in /sys/class/hwmon/hwmon*
do
cd $d
ls device/*_input >/dev/null 2>/dev/null && cd device
N=$(cat name 2>/dev/null || echo $(basename $(readlink -f .)))
for i in *_input
do
[ "x$i" == 'x*_input' ] && continue
S=${i%_input}
L=$(cat ${S}_label 2>/dev/null || echo ${N}_${S})
V=$(cat $i)
F=1
case $i in
fan*) ;;
temp*) F=1000;;
in*) F=1000;;
esac
CV=$(perl -E "say $V/$F")
WN=""
CR=""
MX=""
MN=""
CCMIN=""
CCMAX=""
CWMAX=""
CCCRI=""
# read and compute min, max, crit values
if [ -e ${S}_min -a -e ${S}_max ]
then
CCMIN=$(cat ${S}_min)
CCMAX=$(cat ${S}_max)
if [ "$CCMIN" == 0 -a "$CCMAX" == 0 ]
then
# discard bogus values
CCMIN=""
CCMAX=""
else
MN=$(perl -E "say $CCMIN/$F")
MX=$(perl -E "say $CCMAX/$F")
CR="$MN:$MX"
fi
elif [ -e ${S}_crit ]
then
CCCRI=$(cat ${S}_crit 2>/dev/null)
CR=$(perl -E "say $CCCRI/$F")
if [ -e ${S}_max ]
then
CWMAX=$(cat ${S}_max 2>/dev/null)
WN=$(perl -E "say $CWMAX/$F")
fi
elif [ -e ${S}_max ]
then
CCCRI=$(cat ${S}_max 2>/dev/null)
if [ "x$CCCRI" == "x0" ]
then
CCCRI=""
else
CR=$(perl -E "say $CCCRI/$F")
fi
fi
PD="$PD${N}_${S}=${CV};${WN};${CR}; "
echo $IGN | grep -q "${N}_${S}" && continue
# check warn/crit values
if [ $CCMIN ]
then
if [ $CCMIN -ge $V ] ; then
MS="${MS}, (CRITICAL) $L too low ($CV <= $MN)"
CC=$((CC+1))
fi
fi
if [ $CCMAX ]
then
if [ $CCMAX -le $V ] ; then
MS="${MS}, (CRITICAL) $L too high ($CV >= $MX)"
CC=$((CC+1))
fi
fi
if [ $CCCRI ]
then
if [ $CCCRI -le $V ] ; then
MS="${MS}, (CRITICAL) $L too high ($CV >= $CR)"
CC=$((CC+1))
fi
fi
if [ $CWMAX ]
then
if [ $CWMAX -le $V ] ; then
MS="${MS}, (WARNING) $L too high ($CV >= $WN)"
CW=$((CW+1))
fi
fi
done
done
if [ $CC -gt 0 ]
then
R=2
MS="CRITICAL$MS"
elif [ $WC -gt 0 ]
then
R=1
MS="WARNING$MS"
else
R=0
MS="OK$MS"
fi
echo $MS$PD
exit $R
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment