check_mem.pl - Plugin Nagios para checar consumo de RAM
Publicado por Sandro Marcell 26/12/2008
[ Hits: 13.208 ]
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.pl -w 60% - c 90%
ou
check_mem.pl --warning=60% --critical=90%
Mais detalhes:
check_mem.pl -a
Falou!!!
#!/usr/bin/perl -w
#
# check_mem.pl v0.1
#
# Plugin Nagios para checagem de porcentagem de uso REAL da memoria RAM
# pelo sistema (Versao Perl).
#
# Sandro Marcell (sandro_marcell@yahoo.com.br)
# Boa Vista, Roraima - 18/12/2008
#
# Obs.:
# - Licenca: "GNU Public License v2"
# - Plugin testado no Nagios, compilado com suporte a 'ePN'
# (Embedded Perl Nagios)
# - Testado somente em sistemas Linux
# - Plugin passivel de melhorias ;)
use strict;
use Getopt::Long qw(:config no_ignore_case);
# 'Embedded Perl Nagios':
use lib "/usr/local/nagios/libexec";
use utils qw(%ERRORS $TIMEOUT);
# Inicializando variaveis:
my $warning = "";
my $critical = "";
my %opc = ();
my (
$ramtotal ,
$ramlivre ,
$rambuffer,
$ramcache ,
$ramusada ,
$putil ,
);
# Sinal 'timeout' recebido, finaliza o plugin com status unknown:
$SIG{'ALRM'} = sub {
print("ERRO: Nagios time-out\n");
exit($ERRORS{'UNKNOWN'});
};
# Como utilizar o plugin:
sub __uso__ {
print <<FIM;
check_mem.pl v0.1 (Nagios plugin)
Plugin para checagem de porcentagem de uso REAL da memoria RAM pelo sistema
Uso: check_mem.pl -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
FIM
exit($ERRORS{'UNKNOWN'});
}
sub __ajuda__ {
print("Faca 'check_mem.pl -a' para mais detalhes\n");
exit($ERRORS{'UNKNOWN'});
}
# Subrotina responsavel pela checagem do status de uso da memoria:
sub __memstatus__ {
unless (open(ARQUIVO , "< /proc/meminfo")) {
print("ERRO: '/proc/meminfo' $!\n");
exit($ERRORS{'CRITICAL'});
}
# Capturando linhas especificas do arquivo:
foreach (<ARQUIVO>) {
$ramtotal = "$_" if (/MemTotal:/);
$ramlivre = "$_" if (/MemFree:/);
$rambuffer = "$_" if (/Buffers:/);
$ramcache = "$_" if (/^Cached:/);
}
close(ARQUIVO);
for my $i ($ramtotal , $ramlivre , $rambuffer , $ramcache) { $i =~ s/[^0-9]//g; }
# Quantidade real de RAM em uso:
$ramusada = $ramtotal - ($ramlivre + $rambuffer + $ramcache);
# Porcentagem utilizada:
$putil = $ramusada * 100 / $ramtotal;
}
# Parametros que podem ser definidos pelo usuario:
GetOptions(\%opc,
"a|ajuda",
"V|versao",
"w|warning=s",
"c|critical=s",
) or __ajuda__;
__uso__ if (defined($opc{'a'}));
if (defined($opc{'V'})) {
print("check_mem.pl v0.1 (18/12/2008)\n");
exit($ERRORS{'OK'});
}
# Valor 'warning':
if (defined($opc{'w'})) {
$warning = $opc{'w'};
# Somente valores entre [1-100] seguidos de '%' sao validos:
unless ($warning =~ /^([1-9][0-9]?|1[0]{0,2})\%{1}$/) {
print("ERRO: Valor invalido para a opcao 'w'\n");
__ajuda__;
}
# Se '$warning' estiver dentro do padrao, remove-se o '%'
$warning =~ s/\%//;
}
# Valor 'critical':
if (defined($opc{'c'})) {
$critical = $opc{'c'};
unless ($critical =~ /^([1-9][0-9]?|1[0]{0,2})\%{1}$/) {
print("ERRO: Valor invalido para a opcao 'c'\n");
__ajuda__;
}
$critical =~ s/\%//;
}
# Opcoes obrigatorias [-w] e [-c]:
if ($warning eq "" or $critical eq "") {
print("check_mem.pl: Argumentos insuficientes\n");
__ajuda__;
}
__memstatus__;
$putil = sprintf("%3d" , $putil);
$ramtotal = sprintf("%3d" , $ramtotal / 1024);
$ramlivre = sprintf("%3d" , ($ramlivre + $rambuffer + $ramcache) / 1024);
# Testes condicionais:
if ($putil > $warning) {
print("RAM WARNING - ${putil}% em uso (Disponivel: ${ramlivre}MB de ${ramtotal}MB)\n");
# Retorna o codigo de saida para o Nagios:
exit($ERRORS{'WARNING'});
} elsif ($putil > $critical) {
print("RAM CRITICAL - ${putil}% em uso (Disponivel: ${ramlivre}MB de ${ramtotal}MB)\n");
exit($ERRORS{'CRITICAL'});
} else {
print("RAM OK - ${putil}% em uso (Disponivel: ${ramlivre}MB de ${ramtotal}MB)\n");
exit($ERRORS{'OK'});
}
# Fim
Cadastro usando arquivos .txt para guardar dados
Cálculo do MDC em Perl para quantidade ilimitada de parâmetros
Cálculo de área de uma figura geométrica
Programa que separa os dígitos de um inteiro
Instalação Completa e Configuração Básica do Void Linux
A Fundação da Confiança Digital: A Importância Estratégica de uma PKI CA na Segurança de Dados
Como enviar dicas ou artigos para o Viva o Linux
Como Ativar a Aceleração por GPU (ROCm) no Ollama para AMD Navi 10 (RX 5700 XT / 5600) no Gentoo
Samba 4 AD-DC 2026: Backup & Restore
Samba 4 AD-DC 2026: LAPS (Randomizando senhas locais).
Cairo Dock ainda funcional nos dias de hoje
Configuração de IP fixo via nmcli e resolução de nomes via /etc/hosts no Gentoo
Linus Torvalds e Bill Gates se encontram pela primeira vez (4)
Criar conta no Google [RESOLVIDO] (3)
Alguém conhece ou indica? [RESOLVIDO] (6)
Não consigo instalar as bibliotecas em Python pelo terminal. (3)









