Pra quem não usa WhatsUp e Nagios mas tem um *inx.
Publicado por Henrique Aschenbrenner 10/03/2006
[ Hits: 7.562 ]
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
Instale o driver proprietário Nvidia baixado do site oficial em qualquer distro
POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - CALCULA O % DE USO DA QUOTA E ATUALIZA BANCO
sync2test - sincroniza arquivos do subversion
Verifica quais ports necessitam de atualização
Gentoo: detectando impressoras de rede e como fixar uma impressora por IP
Como o GNOME conseguiu o feito de ser preterido por outras interfaces gráficas
Gentoo binário em 2026: UEFI, LUKS, Btrfs e Systemd
Trabalhando Nativamente com Logs no Linux
Jogando Daikatana (Steam) com Patch 1.3 via Luxtorpeda no Linux
Por que sua empresa precisa de uma PKI (e como automatizar EMISSÕES de certificados via Web API)
Instalando NoMachine no Gentoo com Systemd (acesso Remoto em LAN)
Gentoo: Trocando wpa_supplicant pelo iwd no NetworkManager (Systemd)
Necessário autenticar ao imprimir - Ubuntu X Windowns (1)
O que houve com slackware ??? (11)
O Free Download Manager não abre no Fedora 43 KDE Plasma (2)









