Hace unas horas termine un script en bash para monitorear los consumibles de unas impresoras HP, la idea de agregarlas a centreon es para darnos conocer en buen momento cuando uno de los consumibles se están por terminar así como un histórico (usando las graficas) de cuanto se esta consumiendo. A posteriori, este script se tendría que poder usar en cualquier impresora HP con SNMP activado, los modelos de impresoras que tenemos son las siguientes:
- HP LaserJet 4700 Color
- HP LaserJet 4600 Color
- HP LaserJet 4250
Requerimientos del script:
- awk
- snmpwalk
- A nivel de red, acceso al segmento de las impresoras.
- bash
- etc.
#!/bin/bash
# Martin Barriga 2012
# Default options
COMMUNITY="public"
HOSTNAME="127.0.0.1"
CONSUMMABLE="black"
WARNING=20
CRITICAL=10
SNMPVERSION=2c
SHEETCOUNT="0"
sheetcount=""
#used MIBs
MAINMIB="mib-2.43.11.1.1.6.1"
SHEETMIB="enterprises.11.2.3.9.4.2.1.4.1.10.5.1.1"
# Plugin return codes
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
# Option processing
function phelp {
echo -e "Usage: $0 -H -C -v -o -w -c [ -l | -s ] | -h "
echo -e " -H IP Addres HP Printer"
echo -e " -C SNMP Community. Default 'public'"
echo -e " -v SNMP Version. Default '2c'"
echo -e " -o Color Tonner: black, cyan, magenta, yellow, transfer, fuser. Default 'black'"
echo -e " -w Warning Value. Default '80'"
echo -e " -c Critical Value. Default '90'"
echo -e " -l List consumible support."
echo -e " -s Print with sheet count available."
echo -e " -h Help, this message.\n"
}
function list {
allinfo=`snmpwalk -c $COMMUNITY -v $SNMPVERSION $HOSTNAME $MAINMIB`;
echo "$allinfo" | ( while read line; do
echo $line | cut -d "\"" -f2;
done )
}
function withsheetcount {
index=`echo "$1" | cut -d "." -f8`;
count=`snmpwalk -c $COMMUNITY -v $SNMPVERSION $HOSTNAME $SHEETMIB.$index | cut -d " " -f4`;
sheetcount=", Sheet Available: $count";
}
while getopts H:C:v:o:w:c:slh OPT
do
case $OPT in
H) HOSTNAME="$OPTARG" ;;
C) COMMUNITY="$OPTARG" ;;
v) SNMPVERSION="$OPTARG" ;;
o) CONSUMMABLE="$OPTARG" ;;
w) WARNING=$OPTARG ;;
c) CRITICAL=$OPTARG ;;
s) SHEETCOUNT="1" ;;
l)
list
exit $STATE_UNKNOWN
;;
h)
phelp
exit $STATE_UNKNOWN
;;
#V)
# print_version
# exit $STATE_UNKNOWN
# ;;
esac
done
info=`snmpwalk -c $COMMUNITY -v $SNMPVERSION $HOSTNAME $MAINMIB | grep -i $CONSUMMABLE`
if [ "$info" != "" ]; then
name=`echo "$info" | cut -d "\"" -f 2`;
mib=`echo "$info" | cut -d " " -f 1 | cut -d ":" -f 3`;
newmib=`echo "$info" | cut -d " " -f 1 | cut -d ":" -f 3 | awk -F. -v OFS=. '{$6=8}1'`;
size=`snmpwalk -c $COMMUNITY -v $SNMPVERSION $HOSTNAME $newmib | cut -d " " -f4`;
newmib=`echo "$info" | cut -d " " -f 1 | cut -d ":" -f 3 | awk -F. -v OFS=. '{$6=9}1'`;
value=`snmpwalk -c $COMMUNITY -v $SNMPVERSION $HOSTNAME $newmib | cut -d " " -f4`;
let porcent=($value*100)/$size;
#If sheet count is required
if [ "$SHEETCOUNT" = "1" ]; then
withsheetcount $mib
fi
if [ "$porcent" -le "$CRITICAL" ]; then
echo "$name: Status: $value/$size $porcent% available [ CRITICAL ] | size=$size used=$value";
exit $STATE_CRITICAL;
else
if [ "$porcent" -le "$WARNING" ]; then
echo "$name: Status: $value/$size $porcent% available [ WARNING ] | size=$size used=$value";
exit $STATE_WARNING;
else
echo "$name: Status: $value/$size $porcent% available [ OK ] | size=$size used=$value";
exit $STATE_OK;
fi
fi
else
echo "No se encuentra consumible $CONSUMMABLE en $HOSTNAME [ UNKNOW ]"
exit $STATE_UNKNOWN
fi


No hay comentarios:
Publicar un comentario