Plugin para Nagios que ignora la cache de memoria (check_mem)

Me he encontrado con que tengo que controlar un servidor en el que a veces se dispara el uso de memoria, sin embargo solo me interesa controlar el uso real de memoria por las aplicaciones y no las caches de disco. Me he encontrado con un plugin de Georg M. Sorst que lo hace, pero no reportaba bien el estado, asi que lo he modificado un poco y aqui lo dejo:

#!/bin/bash
# Nagios plugin to check memory consumption
# Excludes Swap and Caches so only the real memory consumption is considered
. /usr/lib/nagios/plugins/utils.sh
# Original de Georg M. Sorst (http://blog.vergiss-blackjack.de/2010/04/nagios-plugin-to-check-memory-consumption/(
# Modificado por Javier de Posada para reportar el estado en el mensaje de salida
# https://javierin.com/2010/09/29/plugin-para-nagios-que-ignora-la-cache-de-memoria-check_mem/
WARN=80
CRIT=90
SWARN=80
SCRIT=90
while getopts "c:w:s:S:h" ARG; do
        case $ARG in
                w) WARN=$OPTARG;;
                c) CRIT=$OPTARG;;
                s) SWARN=$OPTARG;;
                S) SCRIT=$OPTARG;;
                h) echo "Usage: $0 -w % -c % -s % -S %"; exit;;
        esac
done

MEM_TOTAL=`free | fgrep "Mem:" | awk '{print $2}'`;
MEM_USED=`free | fgrep "/+ buffers/cache" | awk '{print $3}'`;
SWP_TOTAL=`free | fgrep "Swap" | awk '{print $2}'`;
SWP_USED=`free | fgrep "Swap" | awk '{print $3}'`;
RAMPC=$(($MEM_USED*100/$MEM_TOTAL));
SWPPC=$(($SWP_USED*100/$SWP_TOTAL));

if [ $RAMPC -gt $CRIT -o $SWPPC -gt $SCRIT ]; then
        echo "CRITICAL:  RAM: ${RAMPC}% ($((($MEM_USED)/1024)) of $((MEM_TOTAL/1024)) MB) used";
        echo "          SWAP: ${SWPPC}% ($((($SWP_USED)/1024)) of $((SWP_TOTAL/1024)) MB) used";
        exit $STATE_CRITICAL;
elif [ $RAMPC -gt $WARN -o $SWPPC -gt $SWARN ]; then
        echo "WARNING:  RAM: ${RAMPC}% ($((($MEM_USED)/1024)) of $((MEM_TOTAL/1024)) MB) used";
        echo "         SWAP: ${SWPPC}% ($((($SWP_USED)/1024)) of $((SWP_TOTAL/1024)) MB) used";
        exit $STATE_WARN;
else
        echo "OK:  RAM: ${RAMPC}% ($((($MEM_USED)/1024)) of $((MEM_TOTAL/1024)) MB) used";
        echo "    SWAP: ${SWPPC}% ($((($SWP_USED)/1024)) of $((SWP_TOTAL/1024)) MB) used";
        exit $STATE_OK;
fi

Actualizado 2010-09-29: Añadida comprobacion de SWAP utilizado
Actualizado 2011-03-31: Corregido un typo :$

Si quieres comprobar memoria con nagios ignorando caches, creo que esta es mi pequeña aportacion util 😉