Alexsandro Felix

Monitorar hosts por meio de ping

Depois de publicar aqui o meu script em bash para enviar comando ssh para mikrotik, compartilho com os leitores do blog outro script em bash que na verdade não sou seu verdadeiro autor, confesso. Porém já fica difícil dar os devidos créditos, pois já o uso há algum tempo e perdi as referências que usei para montá-lo, caso volte a encontrá-las atualizarei o post com as informações completas, peço desculpas desde já.

Este script parte do princípio do mesmo já citado anteriormente, temos uma lista de hosts em um arquivo separado de nome “hosts.txt” – mas nada impede de usarmos o mesmo arquivo criado anteriormente – lembrando que devemos inserir um ip por linha dentro deste arquivo.

Um requisito não obrigatório mas muito interessante é que tenhamos no micro/servidor onde executaremos este script um servidor Sendmail instalado e funcional, pois desta forma o script enviará um e-mail de alerta para o endereço cadastrado quando houverem falas de ping; caso não tenhamos um servidor de e-mail configurado nosso script apenas irá gerar os logs de registro.

Pois bem, com os ip’s dos hosts devidamente cadastrados em nosso arquivo, podemos fazer nosso script conforme abaixo; com estas configurações ele irá executar um teste de ping enviando 4 requisições para cada host, em caso de falha será gerado um log para podermos analisar e termos os registros para análise. Como dito anteriormente, se possuirmos um servidor de e-mail rodando em nossa máquina, também será enviado um e-mail de alerta a cada falha.


#!/bin/bash
############################################################################
# Monitoraramento de host baseado em resposta de ping
# pingHOST.sh - v.0.1 - 2011/03/01
#
# Autor: Alexsandro Felix
# Site: http://blog.ffelix.eti.br
# E-mail/MSN/GTalk: felix@ffelix.eti.br
# Este script pode ser copiado e modificado livremente,
# desde que os devidos créditos sejam concedam ao autor os devidos créditos
# O script original pode ser encontrado em: http://blog.ffelix.eti.br/monitorar-hosts-por-meio-de-ping/
############################################################################
# Quantia de ping a serem enviados para cada host
COUNT=4
for hosts in $(cat hosts.txt); do
	# email report when
	SUBJECT="#Falha de ping"
	EMAILID="email@dominio.com"
	for myHost in $hosts do
		count=$(ping -c $COUNT $myHost | grep 'received' | awk -F',' '{ print $2 }'| awk '{ print $1 }')

		if [ $count -eq 0 ]; then
			echo "RB : $myHost apresenta-se offline em $(date)" | mail -s "$SUBJECT" $EMAILID
			echo "Rb: $myHost apresenta-se offline em $(date)" >> ping.log
		fi
	done
done

Com o script devidamente configurado, uma boa opção é deixá-lo programado em nosso crontab com intervalos regulares, de 1, 5 ou talvez 10 minutos (fica a seu critério) para termos nossa monitoria constante.

Este script fica como alternativa para diversos sites e serviços de uptime que vemos na Internet, muitos deles sendo até mesmo pagos, acreditem, alguns fazem simplesmente só isso.

Fica aqui registrada a dica de mais um bash script, por mais simples que seja, sempre serve ao menos para o nosso aprendizado. Se quiser sugerir algo, mandar um “Hello, world!” ou mesmo reclamar, me siga no Twitter.

Sair da versão mobile