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
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
Comentário por Ingo Hoffmann, em October 16, 2007, às 11:33 am. #.