Pra quem não usa WhatsUp e Nagios mas tem um *inx.
Publicado por Henrique Aschenbrenner 10/03/2006
[ Hits: 7.498 ]
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
Detecta e bloqueia tentativa de acesso ao SSH
Firewall do mikrotik, limitando icmp (ping)
POSTFIX AUTOMÁTICO COM MYSQL E IPTABLES - APAGA AS MSG <.APAGADAS> GERADAS PELO SCRIPT delete_all_u
Barra de progresso em shell script com cores roxa e verde
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
Atualizando o Fedora 42 para 43
Como saber se o seu e-mail já teve a senha vazada?
Como descobrir se a sua senha já foi vazada na internet?
E aí? O Warsaw já está funcionando no Debian 13? [RESOLVIDO] (15)
Secure boot, artigo interessante, nada técnico. (4)
copiar library para diretorio /usr/share/..... su com Falha na a... (1)









