Pra quem não usa WhatsUp e Nagios mas tem um *inx.
Publicado por Henrique Aschenbrenner 10/03/2006
[ Hits: 7.276 ]
Homepage: NONE
Pessoal, primeiramente uma boa noite, este é o meu primeiro Script publicado na VOL e eu gostaria que me reportasem seus experimentos com o script que desenvolvi. Bom básicamente é um script que monitora hosts através de ping e envia e-mail para notificar o "host down", mas ele é um pouquinho inteligente. Ele é composto por 3 arquivos, o script própriamente dito, um arquivo onde irá conter os nomes dos hosts e IP`s e um arquivo temporário. Bom vamos lá ...
*****arquivo monitor******** #!/bin/ksh #Script de monitoracao dos servidores do datacenter #Criado por Henrique Aschenbrenner em 13/02/2003 #Versao 0.1.1.1.1.1.1.1.1.0 #________________________________________________ #Declaracao de variaveis #arqivos de log tela="/var/tmp/operador/henrique/logs/tela.log" infor="/var/tmp/operador/henrique/logs/infor.log" monit="/var/tmp/operador/henrique/logs/monit.log" monit1="/var/tmp/operador/henrique/logs/monit1.log" warning="/var/tmp/operador/henrique/logs/warning.log" #arquivos de informacao lista="/var/tmp/operador/henrique/progs/lista.inf" lista1="/var/tmp/operador/henrique/progs/lista1.inf" count=0 limit=1 hosts=79 a=2 message="" #_______________________________________________ #Criando arquivos cp /var/tmp/operador/henrique/progs/listaB.inf /var/tmp/operador/henrique/progs/lista.inf cp /var/tmp/operador/henrique/progs/listaB.inf /var/tmp/operador/henrique/progs/lista1.inf #_____________________________________________ #Laco de repeticao infinito while [ $count -le $limit ] do { a=2 clear echo >$tela echo >$monit1 echo >$monit echo >$lista1 #___________________________________________ #Enquanto a nao for host fassa while [ $a -le $hosts ] do for i in "`awk -F: 'BEGIN { b='$a' } { linha[NR]=$1} END { print linha[b] }' $lista`" do #__________________________________________ #variaveis de tempo time1=`date '+%H:%M'` time=`date '+%d/%m/%y'` #___________________________________________ #filtrando arquivo e criando variaveis t="`awk -F: 'BEGIN {b='$a'}{ linha[NR]=$1}END{print linha[b]}' $lista`" var="`awk -F: 'BEGIN {b='$a'}{ linha[NR]=$2}END{print linha[b]}' $lista`" u="`awk -F: 'BEGIN {b='$a'}{ linha[NR]=$3}END{print linha[b]}' $lista`" v="`awk -F: 'BEGIN {b='$a'}{ linha[NR]=$4}END{print linha[b]}' $lista`" p="`ping $var > /dev/null ; echo $?`" hora=`date +%H` min=`date +%M` if [ $p -eq $v ] then { if [ $p -eq 1 ] then { p=`expr $v + 1` echo "${t}:${var}:${u}:${p}">> $lista1 } else { echo "${t}:${var}:${u}:${p}">> $lista1 } fi } else { if [ $p -eq 0 ] then { echo "${t}:${var}:${u}:${p}">> $lista1 } else { if [ $p -eq 1 -a $v -eq 2 ] then { p=2 echo "${t}:${var}:${u}:${v}">> $lista1 } else { p=`expr $v + 1` echo "${t}:${var}:${u}:${p}">> $lista1 } fi } fi } fi message="${time} ${time1} | HOST: $i | STATUS: " #___________________________________________ #Testando as condicoes entre p e v e comparando com a log if [ $p -eq $v ] then { if [ $p -eq 0 ] then { message="${message} OK " } else { message="${message} Ainda fora do ar..." } fi } else { if [ $p -eq 0 ] then { if [ $v -eq 1 ] then { message="${message} OK " } else { message="${message} OK" echo $message >> $monit1 mailx -s "Server Up - $i" -r DATACENTER@elektro.com.br $u < $monit1 sleep 1 echo $message >> $infor echo > $monit1 } fi } else { if [ $p -eq 2 ] then { message="${message} Fora do ar..." echo $message >> $monit1 mailx -s "Server Down - $i" -r DATACENTER@elektro.com.br $u < $monit1 sleep 1 echo $message >> $infor echo > $monit1 } else { message="${message} Atencao, possivel desconecxao..." echo $message >> $warning # mailx -s "Server Warning - $i" -r DATACENTER@elektro.com.br $u < $monit1 sleep 1 echo $message >> $infor echo > $monit1 } fi } fi } fi echo $message done a=`expr $a + 1` done #______________________________________ #parada de 3 minutos sleep 180 #____________________________________________________ #Mesma coisa que a parte de cima clear a=2 echo >$tela echo >$monit1 echo >$monit echo >$lista while [ $a -le $hosts ] do for i in "`awk -F: 'BEGIN { b='$a' } { linha[NR]=$1} END { print linha[b] }' $lista1`" do time1=`date '+%H:%M'` time=`date '+%d/%m/%y'` t="`awk -F: 'BEGIN {b='$a'}{ linha[NR]=$1}END{print linha[b]}' $lista1`" var="`awk -F: 'BEGIN {b='$a'}{ linha[NR]=$2}END{print linha[b]}' $lista1`" u="`awk -F: 'BEGIN {b='$a'}{ linha[NR]=$3}END{print linha[b]}' $lista1`" v="`awk -F: 'BEGIN {b='$a'}{ linha[NR]=$4}END{print linha[b]}' $lista1`" p="`ping -c 2 $var > /dev/null ; echo $?`" hora=`date +%H` min=`date +%M` if [ $p -eq $v ] then { if [ $p -eq 1 ] then { p=`expr $v + 1` echo "${t}:${var}:${u}:${p}">> $lista } else { echo "${t}:${var}:${u}:${p}">> $lista } fi } else { if [ $p -eq 0 ] then { echo "${t}:${var}:${u}:${p}">> $lista } else { if [ $p -eq 1 -a $v -eq 2 ] then { p=2 echo "${t}:${var}:${u}:${v}">> $lista } else { p=`expr $v + 1` echo "${t}:${var}:${u}:${p}">> $lista } fi } fi } fi message="${time} ${time1} | HOST: $i | STATUS: " if [ $p -eq $v ] then { if [ $p -eq 0 ] then { message="${message} OK " } else { message="${message} Ainda fora do ar..." } fi } else { if [ $p -eq 0 ] then { if [ $v -eq 1 ] then { message="{message} OK " } else { message="${message} OK" echo $message >> $monit mailx -s "Server Up - $i" -r DATACENTER@elektro.com.br $u < $monit sleep 1 echo $message >> $infor echo > $monit } fi } else { if [ $p -eq 2 ] then { message="${message} Fora do ar..." echo $message >> $monit mailx -s "Server Down - $i" -r DATACENTER@elektro.com.br $u < $monit sleep 1 echo $message >> $infor echo > $monit } else { message="${message} Atencao, possivel desconecxao..." echo $message >> $warning # mailx -s "Server Warning - $i" -r DATACENTER@elektro.com.br $u < $monit sleep 1 echo $message >> $infor echo $message > $monit } fi } fi } fi echo $message done a=`expr $a + 1` done sleep 180 um } done *****arquivo listaB.inf************ nome_do_servidor:IP_do_servidor:e_mail_para_notificacao:0 ******************************** O Zero no final da linha mensurada acima é uma flag que corresponde : 0 host up 1 host não respondeu ao primeiro ping 2 host down
Raiz Quadrada (Square Root) para Bash
Claro 3g Sony Ericsson md300 script conexao REVISAO 2
Acesso remoto via SSH sem senha
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
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código (2)
Preciso resolver um erro de DPKG (0)
Não to conseguindo resolver este problemas ao instalar o playonelinux (1)
[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