Monitorar servidores e enviar alertas por e-mail e SMS

Neste artigo, mostro uma pequena ideia para monitorar servidores em uma rede e ser informado sobre algo errado através e-mail e SMS.

[ Hits: 39.712 ]

Por: William Amaral de Souza em 30/08/2013 | Blog: https://bit.ly/3itYVzq


Funcionamento



Colocando para funcionar definitivamente.

Vou mostrar exatamente como fiz no meu caso, sintam-se à vontade para modificar as instruções.

# cd /
# mkdir monitor
# cd monitor/
# mkdir logs


Salve o script abaixo como "monitor.sh":

#!/bin/bash
############CONFIGURACAO

local=/monitor
log=$local/logs/"LOG-`date +%d%m%y`.txt"
numero=5498979897
EMAIL_DE="@gmail.com"
EMAIL_PARA="@outlook.com"
EMAIL_PARA2=""
SERVIDOR_SMTP="smtp.gmail.com:587"
SENHA='senha'
#########################
echo "---------------------------------------" >> $log
        for i in $( cat $local/servidores.txt)
        do
              ping -c 1 -W 3 "$i" > /dev/null # -c para 1 ping e -W para 1 segundo de espera por ping
                    if [ "$?" -ne 1 ];then
                                # RECONECTADO
                                if [ -e $local/$i-OFF.txt ]; then
                                     printf "%13s - %12s - %6s\n" $i RECONECTADO `date +%H:%M:%S` >> $log
                                         if [ $(cat $local/$i-OFF.txt) -ge 3 ]; then
                                                # ENVIA EMAIL
                                                ASSUNTO="SERVIDOR RECONECTADO - $i"
                                                MENSAGEM="Servidor $i reconectado - `date +%H:%M:%S`"
                                                   ANEXO=""
sendEmail -f $EMAIL_DE -t $EMAIL_PARA -bcc $EMAIL_PARA2 -u "$ASSUNTO" -m "$MENSAGEM" -a $ANEXO -s $SERVIDOR_SMTP -xu $EMAIL_DE -xp $SENHA >
$local/log_email.txt
                                                           # ENVIA SMS
                                                           echo "$MENSAGEM" | gammu --sendsms TEXT $numero > $local/log_sms.txt
                                                   fi
                                         rm $local/$i-OFF.txt
                               else
                                         # CONECTADO
                                         printf "%13s - %12s - %6s\n" $i CONECTADO `date +%H:%M:%S` >> $log
                               fi

                   else
                               # DESCONETADO
                               printf "%13s - %6s - %6s\n" $i DESCONECTADO `date +%H:%M:%S` >> $log
                                         if [ -e $local/$i-OFF.txt ]; then
                                         cont=$(cat $local/$i-OFF.txt) && soma=$(($cont + 1)) && echo "$soma" > $local/$i-OFF.txt
                                                   else
                                         echo "1" > $local/$i-OFF.txt
                                         fi
                                                   if [ $(cat $local/$i-OFF.txt) -eq 3 ]; then
                                                           # PERDEU 3 PINGS ENVIA EMAIL
                                                   ASSUNTO="PERDA DE REDE - $i"
                                                   MENSAGEM="Servidor $i sem resposta - Primeiro Alerta - `date +%H:%M:%S`"
                                                           ANEXO=""
sendEmail -f $EMAIL_DE -t $EMAIL_PARA -bcc $EMAIL_PARA2 -u "$ASSUNTO" -m "$MENSAGEM" -a $ANEXO -s $SERVIDOR_SMTP -xu $EMAIL_DE -xp $SENHA >
$local/log_email.txt
                                                   # ENVIA SMS
                                                   echo "$MENSAGEM" | gammu --sendsms TEXT $numero > $local/log_sms.txt
                                                           #rm $local/$i-OFF.txt
                                                   elif [ $(cat $local/$i-OFF.txt) -eq 34 ]; then
                                                           # PERDEU + de 4 PINGS ENVIA EMAIL
                                                   ASSUNTO="PERDA DE REDE - $i"
                                                   MENSAGEM="Servidor $i sem resposta - Alerta Continuo - `date +%H:%M:%S`"
   ANEXO=""
sendEmail -f $EMAIL_DE -t $EMAIL_PARA -bcc $EMAIL_PARA2 -u "$ASSUNTO" -m "$MENSAGEM" -a $ANEXO -s $SERVIDOR_SMTP -xu $EMAIL_DE -xp $SENHA >
$local/log_email.txt
                                                   # ENVIA SMS
                                                   echo "$MENSAGEM" | gammu --sendsms TEXT $numero > $local/log_sms.txt
                                                   echo "4" > $local/$i-OFF.txt
                                   fi
       fi
           done
echo "---------------------------------------" >> $log

1. Colocaremos o script "monitor.sh" dentro do diretório “/monitor”.
2. Criaremos um arquivo dentro de “/monitor”, com os IPs dos servidores a serem monitorado, e terá o nome “servidores.txt”.

E para finalizar, colocaremos o script para ser executado a cada 1 minuto.

# crontab -e

* * * * * /monitor/monitor.sh

Finalizando

Obs.: dentro do diretório “/monitor/logs”, estará os logs de cada ping junto com os horários de queda e reconexão. Dêem uma lida no script para entender seu funcionamento e mudar, caso queiram.

Após ler várias dicas contidas na Internet, bolei esta ideia. Se for útil para alguém, está aí!

Não sei se ficou legal, se o conteúdo ficou claro, mas gostei do que fiz e quis compartilhar com todos.

Este foi meu primeiro artigo, pode ser que não tenha ficado muito bom, mas quem sabe os próximos, ficarão.

Abraço!

Página anterior    

Páginas do artigo
   1. Apresentação
   2. Funcionamento
Outros artigos deste autor
Nenhum artigo encontrado.
Leitura recomendada

Expressões regulares no Bash : parte I

Utilizando "expr" para "String Matching" através de expressões regulares em shell

Recebendo seu IP dinâmico via email

Operadores de redirecionamento

Definição automática de wallpaper em função do horário

  
Comentários
[1] Comentário enviado por ederpaulopereira em 30/08/2013 - 08:29h

Muito legal seu artigo, já add nos favoritos! O linux sempre me surpreende (positivamente é claro). Sempre tem um jeito de fazer algo.

[2] Comentário enviado por dannyalisson em 30/08/2013 - 10:21h

Parabéns muito bom.

[3] Comentário enviado por Valdivino Aquino em 30/08/2013 - 15:11h

Parabéns pela iniciativa think linux, artigo favoritado!

[4] Comentário enviado por dennylawrence em 30/08/2013 - 16:12h

Fantástico o artigo e a idéia!
Favoritei tmb

[5] Comentário enviado por reng.unip em 30/08/2013 - 16:49h

Parabéns, ótimo artigo!!!

[6] Comentário enviado por marcioprt em 30/08/2013 - 19:45h

Vou testar, parabéns, já esta nos favoritos.

[7] Comentário enviado por blaiser em 30/08/2013 - 20:22h

Parabéns e favoritado !!!

[8] Comentário enviado por Williamm em 30/08/2013 - 20:54h

Muito obrigado a todos, o script da para dar uma boa melhorada, mas espero ajudar a todos que precisarem desta ideia compartilhada!

[9] Comentário enviado por MarceloTheodoro em 31/08/2013 - 01:17h

Colega... você não tem ideia do tanto que me ajudou! rs

Na verdade, não pelo script em si, mas a ideia de enviar informações do próprio servidor via SMS me ajudou a bolar uma ótima ideia para resolver um problema antigo. :)

Muito obrigado.

[10] Comentário enviado por felipetravassos em 31/08/2013 - 02:47h

Maravilhoso artigo!
Parabéns e abraços

[11] Comentário enviado por px em 01/09/2013 - 18:42h

Adoro pessoas que inovam e fazem nosso horizontes se ampliarem! muito obrigado por dividir sua ideia com a comunidade! nota 10!

[12] Comentário enviado por gpxlnx em 02/09/2013 - 17:55h

Parabens pelo artigo amigo, só uma dúvida, na linha " elif [ $(cat $local/$i-OFF.txt) -eq 34 ]; then" no fim do arquivo nao seria apenas 4 ao invez de 34? vlw

[13] Comentário enviado por Williamm em 02/09/2013 - 18:53h


[12] Comentário enviado por gpxlnx em 02/09/2013 - 17:55h:

Parabens pelo artigo amigo, só uma dúvida, na linha " elif [ $(cat $local/$i-OFF.txt) -eq 34 ]; then" no fim do arquivo nao seria apenas 4 ao invez de 34? vlw


Muito obrigado, mas a respeito da sua dúvida, esta parte do script é para alertas contínuos, você pode alterá-lo, pois assim ele não envia os alertas em curto prazo de tempo, no exemplo ele envia os alertas contínuos em torno de a cada 30 minutos após o primeiro alerta. Qualquer duvida to ai, e obrigado novamente.

[14] Comentário enviado por fmpfmp em 16/12/2013 - 13:34h

Não sabia que tinha como enviar SMS pelo Linux plugando um modem 3G nele. Bem legal.

[15] Comentário enviado por darles em 18/12/2013 - 22:40h

Parabens pelo artigo cara. É possível usar a propria placa de rede ao inves de modem? como?

[16] Comentário enviado por Williamm em 19/12/2013 - 21:33h


[15] Comentário enviado por darles em 18/12/2013 - 22:40h:

Parabens pelo artigo cara. É possível usar a propria placa de rede ao inves de modem? como?


Obrigado, sobre sua pergunta acho que até tem como, mas não com este script, eu encontrei bem pouco conteúdo sobre isso, por isso bolei esse artigo...

[17] Comentário enviado por luc1anocruz em 02/08/2014 - 10:14h

Parabéns pelo tutorial. Estou a procura de "quase isso" eu preciso de algo que fique pingando um servidor na rede, e ao não ter resposta do ping ele envia uma SMS para o celular do administrador, estava pensando em um aplicativo que ficasse rodando em uma outra maquina com uma internet mais confiável, alguém ae sabe se existe algo pronto ? pois tenho um servidor e as vezes a internet dele cai, então eu queria monitorar em tempo real quando a internet dele cair.

[18] Comentário enviado por williamm em 02/08/2014 - 21:22h


[17] Comentário enviado por luc1anocruz em 02/08/2014 - 10:14h:

Parabéns pelo tutorial. Estou a procura de "quase isso" eu preciso de algo que fique pingando um servidor na rede, e ao não ter resposta do ping ele envia uma SMS para o celular do administrador, estava pensando em um aplicativo que ficasse rodando em uma outra maquina com uma internet mais confiável, alguém ae sabe se existe algo pronto ? pois tenho um servidor e as vezes a internet dele cai, então eu queria monitorar em tempo real quando a internet dele cair.


Obrigado, mas o que você est'procurando não é exatamente o que o script faz?
Você coloca ele rodar em um servidor ou até mesmo para monitorar o proprio e quando ele nao retornar um ping a um determinado IP ou o IP de outro servidor ele lhe envia um SMS e até mesmo um e-mail.... Qualquer coisa posso tentar lhe ajudar, ao existir outros programas que façam isso tem um que não sei ao certo como funciona mas é o PHP server monitor.
http://www.phpservermonitor.org/

[19] Comentário enviado por felipe19 em 29/04/2015 - 14:31h

muito bom o artigo, parabéns! Me ajudou a resolver um problema...
Amigo, sabe me dizer se tem como eu fazer um envio em massa? Tipo, enviar vários SMS "de uma vez".

[20] Comentário enviado por Williamm em 04/05/2015 - 17:48h


[19] Comentário enviado por felipe19 em 29/04/2015 - 14:31h

muito bom o artigo, parabéns! Me ajudou a resolver um problema...
Amigo, sabe me dizer se tem como eu fazer um envio em massa? Tipo, enviar vários SMS "de uma vez".


Obrigado, olha não cheguei a testar algo parecido, mas você pode testar utilizando um arquivo com os números e fazer um laço para que envie a mesma mensagem para cada um que estiver no arquivo.

[21] Comentário enviado por windpanda em 05/12/2015 - 13:11h


Parabéns pelo artigo, vou montar aqui em casa para ver como fica :) vlw


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts