check_mem.sh - Plugin para o Nagios

Publicado por Sandro Marcell 10/12/2008

[ Hits: 8.760 ]

Homepage: http://sanmarcell.wordpress.com

Download check_mem.sh




Simples plugin para o Nagios, que monitora o consumo REAL de memória RAM e apresenta os dados em forma de porcentagem. Pode ser usado tanto em servidores locais como em hosts remotos, via nrpe.

Exemplo de uso:

check_mem.sh -w 60% -c 90%
ou
check_mem.sh --warning=60% --critical=90%

Mais detalhes:

check_mem.sh -a

Falou!!!

  



Esconder código-fonte

#!/bin/sh
#
# check_mem.sh v0.1
#
# Plugin Nagios para checagem de porcentagem de uso REAL da memoria RAM 
# pelo sistema.
#
# Sandro Marcell (sandro_marcell@yahoo.com.br)
# Boa Vista, Roraima - 07/11/2008
# 
# Obs.:
# - Licenca: "GNU Public License v2"
# - Dependencias: expr, grep e sed
# - Plugin testado somente em sistemas Linux
# - Plugin passivel de melhorias ;)
PATH="/bin:/usr/bin:/usr/local/bin"

# Variaveis reservadas ao Nagios:
STATE_OK=0
STATE_WARNING=1
STATE_CRITICAL=2
STATE_UNKNOWN=3

# Variaveis locais:
warning=""
critical=""

# Sinal 'timeout' recebido, finaliza o plugin com status unknown:
trap 'echo "ERRO: Nagios time-out" ; exit $STATE_UNKNOWN' 14

# Como utilizar o plugin:
__uso__ ()
{
   echo "check_mem.sh v0.1 (Nagios plugin) 

Plugin para checagem de porcentagem de uso REAL da memoria RAM pelo sistema

Uso: check_mem.sh -av [-w VALOR%] [-c VALOR%]

Opcoes:
-a, --ajuda
   Mostra esta tela de ajuda
-v, --versao
   Mostra a versao do plugin
-w VALOR%, --warning=VALOR% 
   Finaliza o plugin com status 'warning', quando VALOR% for superado
-c VALOR%, --critical=VALOR%
   Finaliza o plugin com status 'critical', quando VALOR% for superado"

   exit $STATE_UNKNOWN 
}

# Funcao responsavel pela checagem do status de uso da memoria:
__memstatus__ ()
{
   # Testes condicionais para '/proc/meminfo':
   if [ ! -e "/proc/meminfo" ]
   then
      echo "ERRO: '/proc/meminfo' arquivo nao encontrado"
      exit $STATE_CRITICAL 
   elif [ ! -r "/proc/meminfo" ]
   then
      echo "ERRO: '/proc/meminfo' arquivo ilegivel"
      exit $STATE_CRITICAL 
   fi

   # Quantidade de RAM no sistema:
   ramtotal=`sed -u '/MemTotal:/!d ; s/[^0-9]//g' < /proc/meminfo`
   # RAM livre:
   ramlivre=`sed -u '/MemFree:/!d ; s/[^0-9]//g' < /proc/meminfo`
   # Buffer:
   rambuffer=`sed -u '/Buffers:/!d ; s/[^0-9]//g' < /proc/meminfo`   
   # Cache:
   ramcache=`sed -u '/^Cached:/!d ; s/[^0-9]//g' < /proc/meminfo`

   # Quantidade REAL de RAM em uso:
   ramusada=`expr $ramtotal - \( $ramlivre + $rambuffer + $ramcache \)`   
   # Porcentagem utilizada:
   putil=`expr $ramusada \* 100 / $ramtotal`
}

# Checa se usuario especificou os valores dentro da faixa valida [1-100]
# seguido do simbolo de porcentagem '%' =P
__checa__ ()
{
   if ! echo "$1" | grep -Eq "^([1-9][0-9]?|1[0]{,2})%{1}$"
   then
      echo "$2"
      echo "Uso: check_mem.sh -av [-w VALOR%] [-c VALOR%]"
      exit $STATE_UNKNOWN 
   fi
}

# Checando as opcoes definidas pelo usuario:
while [ $# -ne 0 ]
do
   case "$1" in
      -a | --ajuda)
      __uso__
      ;;
      -v | --versao)
      echo "check_mem.sh v0.1 (07/11/2008)"
      exit $STATE_OK 
      ;;
      -w)
      # Descartando a opcao [-w]:
      shift
      # Armazenando o valor especificado:
      warning=$1
      __checa__ "$warning" "ERRO: Valor invalido para a opcao [-w]"
      # Se '$warning' passar no teste acima, remove-se o caractere '%':
      warning=`echo $warning | sed 's/%//'`
      ;;
      --warning=*)
      # Removendo '--warning=' e armazenado o valor definido:
      warning=`echo $1 | sed 's/.*=//'`
      __checa__ "$warning" "ERRO: Valor invalido para a opcao [--warning]"
      warning=`echo $warning | sed 's/%//'`
      ;;
      -c)
      shift
      critical=$1
      __checa__ "$critical" "ERRO: Valor invalido para a opcao [-c]"
      critical=`echo $critical | sed 's/%//'`
      ;;
      --critical=*)
      critical=`echo $1 | sed 's/.*=//'`
      __checa__ "$critical" "ERRO: Valor invalido para a opcao [--critical]"
      critical=`echo $critical | sed 's/%//'`
      ;;
      *)
      echo "check_mem.sh: [$1] opcao invalida\!"
      echo "Uso: check_mem.sh -av [-w VALOR%] [-c VALOR%]"
      exit $STATE_UNKNOWN 
      ;;
   esac
   shift
done

# Parametros obrigatorios [-w] e [-c]:
[ "$critical" = "" -o "$warning" = "" ] && {
   echo "check_mem.sh: Argumentos insuficientes"
   echo "Faca 'check_mem.sh -a' para mais detalhes"
   exit $STATE_UNKNOWN 
}

# Chamando funcao:
__memstatus__
ramtotal=`expr $ramtotal / 1024` # Valores aproximados em MB.
ramlivre=`expr \( $ramlivre + $rambuffer + $ramcache \) / 1024`

# Testes condicionais:
if [ "$putil" -gt "$warning" ]
then
   # Estado de alerta: O uso de RAM superou [-w VALOR%]
   echo "RAM WARNING - ${putil}% em uso (Disponivel: ${ramlivre}MB de ${ramtotal}MB)"
   # Retorna o codigo de saida para o Nagios:
   exit $STATE_WARNING 
elif [ "$putil" -gt "$critical" ]
then
   # Estado critico: O uso de RAM superou [-c VALOR%]
   echo "RAM CRITICAL - ${putil}% em uso (Disponivel: ${ramlivre}MB de ${ramtotal}MB)" 
   exit $STATE_CRITICAL 
else
   # Status normal: O uso de RAM esta dentro dos padroes definidos pelo usuario:
   echo "RAM OK - ${putil}% em uso (Disponivel: ${ramlivre}MB de ${ramtotal}MB)" 
   exit $STATE_OK 
fi
# Fim

Scripts recomendados

Troca automatica de papel de parade no fluxbox

Proc 1.0

Renomear Arquivos

Compilação automática do GCC-4.7.3 para Ubuntu 12.04+ 64 bits

Script para embutir legenda.


  

Comentários
[1] Comentário enviado por SMarcell em 18/12/2008 - 14:19h

Versão Perl desse plugin:

http://www.slackbr.org/forum/viewtopic.php?f=46&t=17515

Ah, e a versão shell com algumas alterações:

http://www.slackbr.org/forum/viewtopic.php?f=45&t=17472



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts