Ping com esteróides
Certo dia, na empresa onde estou como estagiário, surgiu a necessidade de se monitorar, de tempos em tempos, se um servidor estava on-line ou não, havia um script responsável por isso, no caso de perda total de pacotes (ou seja, servidor inacessível) um e-mail de alerta era enviado aos administradores e para equipe de suporte técnico da empresa (da qual faço parte). Acontece, que muitas vezes não estávamos com a caixa de email aberta ou a mensagem passava despercebida dentre muitas outras, então veio do gerente a sugestão de fosse soado um alarme no caso do servidor ficar off-line. Outros problemas que haviam no script antigo era que o mesmo só reportava o erro quando havia perda total de pacotes, se houvesse perda parcial, nem ficávamos sabendo.
Pra sanar os problemas criei um segundo script, que além de mandar e-mails, soa um alarme quando há perda de pacotes e gera logs organizados por sites/IPs pingados. Como os computadores da empresa não tem caixas de som, o alarme não é a execução de um arquivo de áudio, mas sim um toque no speaker da máquina ( gerado com o comando beep )
Para o script funcionar perfeitamente, você deve ter o sendmail e o mutt configurados na sua máquina e configurá-lo no cron para rodar automaticamente, deve-se também instalar o programa beep:
$ sudo apt-get install beep
O que o script faz:
- Ele pinga o endereço indicado, por uma quantidade de vezes determinada pelo usuário
- Ele cria um diretório para armazenar os logs dos sites pingados
- Dentro deste diretório ele redireciona as saídas padrão e de erro para arquivos te texto (pingtemp.txt e temperro.txt)
- Ele pinga o endereço e verifica a porcentagem de pacotes perdidos
- A partir de 20% de perda de pacotes, o alarme soa
- A saída do comando fica no arquivo pingtemp.txt
- Com o comando cat o conteúdo de pigtemp.txt é adicionado ao log, cujo nome é o dia em que o teste foi executado
Sintaxe: ./chkping.sh [Numero de pacotes] [endereço web ou IP]
Vamos ao código:
#!/bin/bash clear #Script para teste de internet check() ##FUNCAO Q FAZ OS TESTES DE PING { ping -c $1 $2 > pingtemp.txt 2> temperro.txt # o temperro.txt recebe tudo q vai para saida de erro nome=$2 #assunto=`MONITORAMENTO DE INTERNET DO HEV` #send=`mutt -s "MONITORAMENTO DE INTERNET DO HEV" hevandersons@gmail.com` if [ -s temperro.txt ] #verifica se o arquivo é maior que zero, ou seja, se houve erro then echo "|> ERRO DE CONEXÃO, EXPERIMENTE:" echo "|> CHECAR SE O ENDEREÇO ESTÁ CORRETO" echo "|> CHECAR OS CABOS DE REDE" sleep 3 else #echo "Não houve erros" sleep 1 ppack=`grep received pingtemp.txt | cut -f6 -d " " | cut -f1 -d%` if [ $ppack -eq 0 ] then msg="Nenhuma perda de pacote, conexão com $nome perfeita" #ring elif [ $ppack -gt 0 -a $ppack -le 5 ] then echo "ALERTA: Perda entre 1 e 5 % dos pacotes transmitidos" elif [ $ppack -gt 5 -a $ppack -le 10 ] then echo "ALERTA: Perda entre 5 e 10 % dos pacotes transmitidos" elif [ $ppack -gt 10 -a $ppack -le 20 ] then msg="ALERTA: Perda entre 10 e 20 % dos pacotes transmitidos" ring elif [ $ppack -gt 20 -a $ppack -le 30 ] then msg="ALERTA: Perda entre 20 e 30 % dos pacotes transmitidos" ring elif [ $ppack -gt 30 -a $ppack -le 40 ] then msg="ALERTA: Perda entre 30 e 40 % dos pacotes transmitidos" ring elif [ $ppack -gt 40 -a $ppack -le 50 ] then msg="ALERTA: Perda entre 40 e 50 % dos pacotes transmitidos" ring elif [ $ppack -gt 50 -a $ppack -lt 100 ] then msg="ALERTA GRAVE: mais de 50 % dos pacotes transmitidos foram perdidos" ring2 #ring de emergencia elif [ $ppack -eq 100 ] then msg="ATERTA GRAVE: PERDA TOTAL DE PACOTES, VERIFICAR CONEXÃO DE REDE" ring2 #ring de emergencia fi fi } log() #GRAVA OS LOGS NAS PASTAS { echo "TESTE AS -> `date +%T`" >> `date +%d_%m_%Y.log` cat pingtemp.txt >> `date +%d_%m_%Y.log` echo >> `date +%d_%m_%Y.log` } send() #MANDA E-MAIS { echo $msg | mutt -s "MONITORAMENTO EM $nome" hev@mundohev.com -c hevandersons@gmail.com } ring() #alertas de lentidão { beep -f 523.2 48 -l 10 -r 3 && beep -f 493.9 48 -r 4 } ring2() #alertas de lentidão { beep -f 277.2 -l 500 -r 16 } if [ -d $2 ] then cd $2 check $1 $2 log else mkdir $2 cd $2 check $1 $2 log fi
O grande probema deste script é o fato de ser baseado em porcentagens, mas aí basta usar o bom senso na hora de determinar o número de pacotes (de tentativas)
É isso, fiquem com Deus, até a pŕoxima
Postado em Linux, Open Source, Programação, shell script |

January 10th, 2008 at 9:58 pm
Tá de parabéns o teu script.
Mas sinceramente, é muito melhor verificar o motivo da perda de pacote ao invés de ficar monitorando se há perda ou não.
Tenho certeza que o teu próximo passo é verificar isso, certo ?
January 11th, 2008 at 3:42 am
Olá.
O que você quer é o pmping:
http://mteixeira.webset.net/pmping/
January 11th, 2008 at 5:00 pm
Obrigado Sérgio, vou procurar uma forma de fazer isso.
Olá John, parece interessante esse pmping, vou dar uma olhada.
Obrigado por comentarem, fiquem com Deus
April 8th, 2008 at 9:25 am
Muito bacana este script, vai ser útil aqui na empresa.