Plugins check_cpu e check_ram para Nagios 19/07/07

Como já falei por aqui, estou implementando um servidor Nagios na empresa em que trabalho. Vou monitorar uma porrada de servidores e a esmagadora maioria não é de responsabilidade minha, eu apenas vou coloca-los para serem monitorados no Nagios. Quando eu questiono os administradores sobre o que eles desejam monitorar a maioria quer saber sobre espaço em disco, uso de CPU, memória RAM e checar por processos ativos. Nos plugins oficiais do Nagios não tem nada que retorne uso de CPU e RAM em porcentagem e a maioria das pessoas não se contenta em monitorar o load average da máquina. Para resolver o problema eu fiz dois shell scripts que fazem o serviço desejado e mostram o resultado em porcentagem.

Apesar de simples foram bem úteis e feitos com carinho, talvez sirvam para mais pessoas por isso estou disponibilizando os dois aqui.

Atualizações

  • 27/08/2007 - Ajuste do bug que fazia a checagem por NRPE retornar erro de output no Solaris.
  • 20/07/2007 - Atualização para funcionar em Solaris 8 e 9.
  • 19/07/2007 - Lançada primeira versão testada em Linux (Debian, Ubuntu, CentOS e Red Hat Enterprise).

Download

check_cpu

#!/bin/bash
#
# CPU usage monitor plugin for Nagios
# Written by Vinicius de Figueiredo Silva (viniciusfs@gmail.com)
# Last Modified: 27-11-2007
#
# Usage: ./check_cpu <warning> <critical>
#
# Description:
# This plugin check how much percentage of CPU in the system is in use.
# Tested only in Linux (Debian, Ubuntu, CentOS and Red Hat Enterprise)
# and Solaris 8/9.
#
#######################################################################
 
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
 
CPU_IDLE=0
CPU_INUSE=0
 
print_help() {
        echo "CHECK_CPU - CPU usage monitor plugin for Nagios"
        echo "Copyright (c) 2007 Vinicius de Figueiredo Silva (viniciusfs@gmail.com)"
        echo ""
        echo "This script checks for CPU usage and generates an alarm when"
        echo "CPU usage is over threshold values."
        echo ""
        print_usage
        echo ""
        echo "Example: check_cpu 80 90"
        echo ""
        echo "This example will generates a warning alarm when CPU usage is over 80%"
        echo "and a critical alarm when CPU usage is over 90%."
}
 
print_usage() {
        echo "Usage: check_cpu <warning> <critical>"
}
 
case "$1" in
        --help|-h)
                print_help
                exit $STATE_OK
                ;;
        *)
                if [ $# -lt 2 ]; then
                        print_usage
                        exit $STATE_UNKNOWN
                elif [ $1 -ge $2 ]; then
                        print_usage
                        echo "Warning value must be greater than Critical value."
                        exit $STATE_UNKNOWN
                elif [ $1 -lt 1 ] || [ $1 -gt 100 ] || [ $2 -lt 1 ] || [ $2 -gt 100 ]; then
                        print_usage
                        echo "Values are out of range [0-100]."
                        exit $STATE_UNKNOWN
                fi
                ;;
esac
 
WARN=$1
CRIT=$2
 
OS=`uname -a | awk '{print $1}'`
 
case "$OS" in
        Linux)
                CPU_IDLE=`vmstat 1 5 | tail -1 | awk '{ print $15 }'`
                ;;
        SunOS)
                CPU_IDLE=`vmstat 1 5 | tail -1 | awk '{ print $22 }'`
                ;;
esac
 
CPU_INUSE=$((100-$CPU_IDLE))
PERFDATA="cpu=$CPU_INUSE%;$WARN;$CRIT;0;100"
 
if [ $CPU_INUSE -ge $CRIT ]; then
        echo "CPU CRITICAL - CPU usage in $CPU_INUSE%|$PERFDATA"
        exit $STATE_CRITICAL
elif [ $CPU_INUSE -ge $WARN ]; then
        echo "CPU WARNING - CPU usage in $CPU_INUSE%|$PERFDATA"
        exit $STATE_WARNING
else
        echo "CPU OK - CPU usage in $CPU_INUSE%|$PERFDATA"
        exit $STATE_OK
fi

check_ram

#!/bin/bash
#
# RAM usage monitor plugin for Nagios
# Written by Vinicius de Figueiredo Silva (viniciusfs@gmail.com)
# Last Modified: 27-11-2007
#
# Usage: ./check_ram <warning> <critical>
#
# Description:
# This plugin checks how much percentage of RAM is in use.
# Tested only in Linux (Debian, Ubuntu, CentOS and Red Hat Enterprise)
# and Solaris 8/9.
#
#######################################################################
 
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3
 
MB_MODE=0
 
RAM_TOTAL=0
RAM_FREE=0
RAM_INUSE=0
 
print_help() {
        echo "CHECK_RAM - RAM usage monitor plugin for Nagios"
        echo "Copyright (c) 2007 Vinicius de Figueiredo Silva (viniciusfs@gmail.com)"
        echo ""
        echo "This script checks for RAM usage and generates an alarm when"
        echo "RAM usage is over threshold values."
        echo ""
        echo "Options:"
        echo "  -m"
        echo "     Prints output and performance data in MB instead of percentage."
        echo ""
        print_usage
        echo ""
        echo "Example: check_ram 80 90"
        echo ""
        echo "This example will generates a warning alarm when RAM usage is over 80%"
        echo "and a critical alarm when RAM usage is over 90%."
}
 
print_usage() {
        echo "Usage: check_cpu <warning> <critical> <options>"
}
 
case "$1" in
        --help|-h)
                print_help
                exit $STATE_OK
                ;;
        *)
                if [ $# -lt 2 ]; then
                        print_usage
                        exit $STATE_UNKNOWN
                elif [ $1 -ge $2 ]; then
                        print_usage
                        echo "Warning value must be greater than Critical value."
                        exit $STATE_UNKNOWN
                elif [ $1 -lt 1 ] || [ $1 -gt 100 ] || [ $2 -lt 1 ] || [ $2 -gt 100 ]; then
                        print_usage
                        echo "Values are out of range [0-100]."
                        exit $STATE_UNKNOWN
                fi
                ;;
esac
 
WARN=$1
CRIT=$2
 
OS=`uname -a | awk '{ print $1 }'`
 
case "$OS" in
        Linux)
                RAM_TOTAL=`free -m | grep -i mem | awk '{ print $2 }'`
                RAM_INUSE=`free -m | grep -i mem | awk '{ print $3 }'`
                ;;
        SunOS)
                RAM_TOTAL=`prtconf | grep ^"Memory size" | awk '{print $3}'`
                RAM_FREE=`vmstat 1 5 | tail -1 | awk '{print $5}'`
                RAM_FREE=$(($RAM_FREE/1000))
                RAM_INUSE=$(($RAM_TOTAL-$RAM_FREE))
                ;;
esac
 
PERC_INUSE=$(((100*$RAM_INUSE)/$RAM_TOTAL))
PERFDATA="ram=$PERC_INUSE%;$WARN;$CRIT;0;100"
 
if [ $3 ] && [ $3 = "-m" ]; then
        MB_MODE=1
        RAM_WARN=$((($RAM_TOTAL*$WARN)/100))
        RAM_CRIT=$((($RAM_TOTAL*$CRIT)/100))
        PERFDATA="ram=${RAM_INUSE}MB;$RAM_WARN;$RAM_CRIT;0;$RAM_TOTAL"
fi
 
if [ $PERC_INUSE -ge $CRIT ]; then
        if [ $MB_MODE -eq 1 ]; then
                echo "RAM CRITICAL - ${RAM_INUSE}MB of ${RAM_TOTAL}MB in use.|$PERFDATA"
        else
                echo "RAM CRITICAL - RAM usage in $PERC_INUSE%|$PERFDATA"
        fi
        exit $STATE_CRITICAL
elif [ $PERC_INUSE -ge $WARN ]; then
        if [ $MB_MODE -eq 1 ]; then
                echo "RAM WARNING - ${RAM_INUSE}MB of ${RAM_TOTAL}MB in use.|$PERFDATA"
        else
                echo "RAM WARNING - RAM usage in $PERC_INUSE%|$PERFDATA"
        fi
        exit $STATE_WARNING
else
        if [ $MB_MODE -eq 1 ]; then
                echo "RAM OK - ${RAM_INUSE}MB of ${RAM_TOTAL}MB in use.|$PERFDATA"
        else
                echo "RAM OK - RAM usage in $PERC_INUSE%|$PERFDATA"
        fi
        exit $STATE_OK
fi
Desenvolvimento, Linux 7 Comentários Born Against – Wearing a Lampshade


7 comentários

Opa Vinícius, tudo bem?
Cara, os plugins são ótimos, tudo o que eu estava procurando, porém no check_cpu, acho que tem que mudar para a coluna 16 pois na 15 dá erro no RH 7.3 :(
[]z

AIX)
CPU_IDLE=`vmstat 1 5 | tail -1 | awk ‘{ print $16 }’`
;;

Opa,

Bacana ai os scripts (apesar de não fragar muito ou nada de nagios =) mas o que eu queria sugerir é que você licenciasse esse script de forma livre. Já que apesar de estar disponível no seu sítio, ele não se encaixa muito bem no conceito de livre.

Dá uma olhada em http://www.gnu.org/licenses/gpl-howto.html lá explica de um jeito bacana!

Abração ai e parabéns pela iniciativa.

“não se encaixa muito bem no conceito de livre”

Lincoln, o conceito GNU de liberdade não é o único e, na minha humilde opinião, expressa praticamente o contrário do que se propõe.

For RAM I’d deduct the amount of cached memory, since it’s dynamic. It’ll be available when needed. So in fact you can view this as free memory.

Just my 2 cents.

( sorry for the language hiccup .. I only speak dutch and english )

Vinicius,
Veja o erro:

./check_cpu.sh: line 90: syntax error: unexpected end of file

O que pode ser ?
Obrigado.

[...] Die Auswahl fiel auf das Script von Vinicius de Figueiredo Silva (Link). [...]

Comente, participe!




Comentário