check_mem.sh - Plugin para o Nagios
Publicado por Sandro Marcell 10/12/2008
[ Hits: 9.013 ]
Homepage: http://sanmarcell.wordpress.com
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!!!
#!/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
Script para verificação do JAVA configurado no PATH
cpb - Copia arquivos executáveis...
Criar Script para apagar determinados arquivos
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
Como usar Gpaste no ambiente Cinnamon
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
VOL já não é mais como antes? (9)
É normal não gostar de KDE? (13)
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (15)
Secure boot, artigo interessante, nada técnico. (4)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









