check_mem.pl - Plugin Nagios para checar consumo de RAM

Publicado por Sandro Marcell 26/12/2008

[ Hits: 12.850 ]

Homepage: http://sanmarcell.wordpress.com

Download check_mem.pl




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!!!

  



Esconder código-fonte

#!/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

Scripts recomendados

Lendo o conteúdo de uma página da Internet

Lista de números aleatórios não-repetidos de um intervalo em Perl

"Codificação" de texto em Perl

Aprendendo a fazer equações em Perl

imprime numeros de forma crescente e decrescente [FOR]


  

Comentários
[1] Comentário enviado por SMarcell em 29/12/2008 - 09:42h

Ah, caso alguém se interesse, aqui está a versão em Shell script:

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

Falou!!! =)

[2] Comentário enviado por Nicolas777 em 03/10/2012 - 19:42h

Onde eu compilo isso?

[3] Comentário enviado por karlopires em 19/05/2015 - 15:22h

Olá prezados,
Teria como dizer onde coloco o arquivo check_mem.pl e o que fazer com o código? Nada muito detalhado só preciso de um norte. Já trabalho com o Nagios mas nunca adicionei plugins avulsos.
Desde já obrigado.

[4] Comentário enviado por xclaudin em 19/10/2015 - 15:06h


[3] Comentário enviado por karlopires em 19/05/2015 - 15:22h

Olá prezados,
Teria como dizer onde coloco o arquivo check_mem.pl e o que fazer com o código? Nada muito detalhado só preciso de um norte. Já trabalho com o Nagios mas nunca adicionei plugins avulsos.
Desde já obrigado.


To na mesma, não to sabendo adicionar esse plugin x.x


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts