domingo, 20 de março de 2011

Mikrotik RouterOS - Monitorando perdas de pacotes

Essa é uma mandeira mais cômoda de detectar perdas de pacote nos links.


1- Primeiro passo, criar um script com o seguinte código fonte:

# Essa linha cria uma variável e insere o nome do equipamento
:gl equip ([:pick [/sys id get name] 0 3])


#essa linha escreve uma mensagem no LOG para avisar que os 100 pings iniciaram

:log warning "Iniciando ping para meu gateway padrão..."


#essa linha executa 100 pings para o IP do gateway padrão com pacotes de 1500 e com a flag de não fragmentação ligada.
:gl teste [ping 192.168.0.1 size=1500 do-not-fragment count=100]
#note que nesse tipo de comando a variável vai receber a quantidade de pacotes RECEBIDOS


#essa linha avisa que os 100 pings foram terminados
:log warning "Pings para gateway padrao encerrados."


#como informado acima, o valor que a variável $teste vai receber é a quantidade de pacotes recebidos, sendo assim, a linha abaixo vai subtrair o valor total de pacotes recebidos da quantidade total de pacotes enviados (100).
:gl perdas [(100-$teste)]
#agora temos de fato a quantidade de PACOTES PERDIDOS na variável $perdas


#as linhas abaixo descrevem as ações tomadas caso o resultado do teste condicional ($perdas>0) seja positivo. Após o comando "do". É possível executar vários comandos colocando apenas um ponto e vírgula no final de cada. Escolhemos escrever no LOG, e também enviar um email com o nome do equipamento (variavel $equip) e a quantidade de pacotes perdidos.

:if condition=($perdas>0) do=[log warning " $perdas% de perdas"; log warning "Enviando email..." ; /tool e-mail send to=" meu_email@gmail.com" subject=(" ALERTA!! O equipamento - ".$equip." está com ". $perdas."% de Perdas") from=" meu_email@gmail.com"; log warning "Email enviado." ] else=[log warning "teste concluído sem perdas"]

#Caso o resultado do teste condicional ($perdas>0) for negativo, serão executados apenas os comandos depois de "else=" e que nesse caso apenas gera uma mensagem no log avisando que não há perdas de pacotes.


#esse exemplo pode ser melhorado executando ações como mudança de link desabilitando uma sessão BGP com a operadora problemática, e muitas outras opções, dependendo das particularidades de cada rede.

2- Segundo passo, no menu system scheduler você manda executar esse script a cada 5 minutos. (+ ou - caso jugue necessário)

Agradecimento especial para Edilson José que me ajudou a melhorar esse código.

Um comentário:

Unknown disse...

Muito obrigado pela explicação, eu tirei o envio pelo email e somente nos logs ficou perfeito.