- 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
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