check_mem.pl - Plugin Nagios para checar consumo de RAM
Publicado por Sandro Marcell 26/12/2008
[ Hits: 12.845 ]
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
Separa os dígitos de um número
Soma varios valores e mostra sua media
Lista de números aleatórios não-repetidos de um intervalo em Perl
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta