segunda-feira, 15 de agosto de 2016

Alerta de erros no backup do windows por e-mail com python

O objetivo do artigo de hoje é prover uma solução simples para um ambiente com as seguintes necessidades

  • Impossibilidade de implementar uma solução de monitoramento como zabbix, nagios, etc
  • Impossibilidade de estar sempre acompanhando os logs do windows, comum em casos onde existem muitos servidores
Configuraremos uma tarefa para que ao ocorrer um erro no backup do windows, seja disparado um e-mail avisando sobre este erro.

Seria uma tarefa bem simples, que nem valeria a pena um artigo, mas como sabemos, versões <= ao Windows Server 2012 apesar de possuírem uma opção para enviar e-mail em uma tarefa, não temos como definir por ali as configurações necessárias para um servidor SMTP que necessita de autenticação. Claro existe na internet diversas formas de contornar isso, desde scripts batch até powershell, mas hoje vamos utilizar um script em Python, que pode ser compilado afim de evitar a instalação do Python no servidor

#Não cabe a este artigo discutir se o backup do Windows é ou não uma boa solução para backup

#A ideia apresentada pode facilmente ser aplicada para alertas relacionados a outros eventos do Windows


Primeiramente vamos trabalhar em cima do script em Python que enviará o e-mail

 # -*- coding: UTF-8 -*-  
 import smtplib, sys, socket, datetime, json  
 from urllib import request  
 from email.mime.text import MIMEText  
 if len(sys.argv) >1: contrato = sys.argv[1] #aqui é feita a verificação se foi ou não adicionado aquele argumento adicional com o nome do contrato/cliente  
 else: contrato = 'Não informado'  
 try:  
   url = request.urlopen('http://ip-api.com/json').read()  
   jsn = json.loads(url.decode('UTF-8'))  
   externo = (jsn['query'])#pega o IP externo  
 except:  
   externo = 'Não foi possivel obter o IP externo'  
 de = 'remetente@dominio.com.br'  
 para = 'destinatario@dominio.com.br'  
 user = 'user@dominio.com.br'#geralmente é o mesmo do remetente  
 passwd = 'senha'  
 msg = MIMEText('''  
 Ocorreu um erro no backup do Windows  
 Servidor:  {nomeserver}  
 Contrato:  {contrato}  
 Horario:  {horario}  
 IP local:  {iplocal}  
 IP externo: {ipexterno}  
 '''.format(nomeserver=socket.gethostname(), contrato=contrato, horario=str(datetime.datetime.today())[:19],  
       iplocal=socket.gethostbyname_ex(socket.gethostname())[2],ipexterno=externo))# pra mim essas informações são suficientes, mas altere se precisar  
 msg['To'] = 'destinatario@dominio.com.br'  
 msg['Subject'] = 'Erro no backup do windows'#assunto do e-mail, altere oconforme achar necessário  
 server = smtplib.SMTP('endereço smtp, geral é smtp.dominio.com.br', port=587)  
 server.login(user, passwd)  
 server.sendmail(de, para, msg.as_string())  
 server.quit() 

Depois de alterada as configurações do script conforme suas informações de e-mail, vamos compilar ele usando o pyinstaller.

Para a compilação de um script deste tipo não precisamos definir ícones, compactação ou coisas do tipo, usaremos apenas o parâmetro -F  para gerar um único arquivo, então o comando ficará da seguinte forma


 <caminho do python.exe> <caminho do pyinstaller.py> -F <caminho do script.py>

no meu caso


depois de compilado, será gerada  uma pasta com o nome do backup e depois uma pasta dist que é onde estará o arquivo executável

Feito isto, vamos criar a tarefa no servidor

Então 1° passo, vamos até o agendador de tarefas> criar uma nova tarefa


Em seguida, vamos em "novo filtro de eventos"  e criamos um filtro com base nos seguintes critérios:


no final acaba sendo um filtro Microsoft-Windows-Backup/Operational 

Feito isto, criamos então a seguinte ação


Que é o básico, apenas atente para adicionar em "Adicione argumentos" o nome do contrato ou do cliente,
essa informação será adicionada ao e-mail final, então é uma boa ideia preencher

E esta pronto, você testar a tarefa de forma simples, basta iniciar o backup e depois cancelar

#Para evitar ficar criando essa toda hora no caso de vc ter vários servidores, você exportar a tarefa, será então gerado um XML, o trabalho que vc terá é de apenas alterar o nome do usuário do autor da tarefa, ou se vc realmente quiser ter o mínimo de trabalho possível sem levar em conta certos critérios de segurança, pode editar o XML e colocar o autor como AUTORIDADE NT\SISTEMA, pois como toda versão em pt_BR do windows tem esse usuário, vc não precisará fazer alterações, faltaria apenas daí mover o script.exe para o local de sua preferência e se o for o caso alterar os parâmetros adicionais na tarefa para evitar possíveis confusões, já pensou ocorrer um problema no cliente A e seu e-mail vir configurado como cliente B ? :s

Até a prox :)

Nenhum comentário:

Postar um comentário