Página 1 de 1

Script de salvas de logs en servidor proxy

Publicado: Lun, 03 Ene 2011, 12:04
por Metal
Esta es una versión libre del script de Gaara. Pueden criticar sin piedad(así aprendo).

Código: Seleccionar todo

#! /usr/bin/python
from datetime import datetime
import shutil,subprocess, os, smtplib, gzip, tarfile
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart

now = str(datetime.now())
data = {'SERVER_DIR'    :'/home/backups/Servers/Virtue',
        'WORK_DIR'      :'/home/backups/Servers/Virtue/'+now+'.logs/',
        'WORK_CREATE'   :'/home/backups/Servers/Virtue/'+now+'.logs/1',
        'ADMINS'        :('kzkggaara@ipichcb.rimed.cu', 'elav@ipichcb.rimed.cu'),
        'SMTP_SERVER'   :'smtp.ipichcb.rimed.cu'}

def enviar_email(para, subject, texto, smtp_server):
    COMMASPACE = ', '
    text = MIMEText(texto)
    msg = MIMEMultipart()
    msg['Subject'] = subject
    msg['From'] = 'error@server'
    msg['To'] = COMMASPACE.join(para)
    msg.attach(text)
    s = smtplib.SMTP(smtp_server)
    s.sendmail('error@server', para, msg.as_string())
    s.quit()

def copiar_archivo(desde, hasta, subject, mensaje_error, data, scp = False):
    try:
        if scp:
            os.system("scp "+desde+' '+hasta)
        else:
            shutil.copy(desde, hasta)
    except IOError as (errno, strerror):
        mensaje_error = mensaje_error + '\nI/O error({0}): {1}'.format(errno, strerror)+'\n '+desde+'->'+hasta+'\n El error ocurrio ' + now
        enviar_email(data['ADMINS'], subject, mensaje_error, data['SMTP_SERVER'])
        return False
    return True

def comprimir_dir(directorio, subject, mensaje_error, data):
    try:
        tar = tarfile.open(now+'.logs.tar', 'w')
        tar.add(directorio)
        tar.close()
    except IOError as (errno, strerror):
        mensaje_error = mensaje_error + '\nI/O error({0}): {1}'.format(errno, strerror)+'\n El error ocurrio ' + now
        enviar_email(data['ADMINS'], subject, mensaje_error, data['SMTP_SERVER'])
        return False
    f_in = open(now+'.logs.tar', 'rb')
    f_out = gzip.open(now+'.logs.tar.gz', 'wb')
    f_out.writelines(f_in)
    f_out.close()
    f_in.close()
    return True

def principal():
    if not os.path.exists(data['WORK_CREATE']):
        os.mkdir(data['WORK_CREATE'])
    os.execlp('/etc/init.d/squid','', 'stop')

    mensaje_error = 'La salva de logs del servidor Virtue ha dado ERROR, se adjunta log. '
    subject = '[Virtue] | [ERROR] Status de salva de logs.'
    flag = copiar_archivo('/var/log/squid/access.*', data['WORK_DIR'], subject, mensaje_error, data)
    if not flag:
        return

    flag = copiar_archivo('/var/log/auth.*', subject, data['WORK_DIR'], mensaje_error, data)
    if not flag:
        return

    os.remove('/var/log/squid/access.*')
    os.remove('/var/log/auth.*')
    os.execlp('/etc/init.d/squid','', 'start')
    open('/var/log/auth.log', 'w')
    os.lchown('/var/log/auth.log', 'adm', 'adm')
    os.chmod('/var/log/auth.log', 640)
    os.chdir(data['SERVER_DIR'])

    mensaje_error1 = 'La salva de logs del servidor Virtue ha dado ERROR. Especificamente a la hora de COMPRIMIR el directorio, se adjunta log. '
    flag = comprimir_dir(data['WORK_DIR'], subject, mensaje_error1, data)
    if not flag:
        return

    os.remove(data['WORK_DIR'])
    
    flag = copiar_archivo(data['SERVER_DIR']+now+'.logs.tar.gz', 'root@192.168.200.4:/home/backups/Servers/Virtue/', subject, mensaje_error, data, True)
    if not flag:
        return

    subject1 = '[Virtue] | [OK] Status de salva de logs.'
    mensaje_error2 = 'La salva de logs del servidor Virtue (192.168.200.3) se ha efectuado satisfactoriamente. \n'+now
    enviar_email(data['ADMINS'], subject1, mensaje_error2, data['SMTP_SERVER'])

if __name__ == '__main__':
    principal()

Re: Script de salvas de logs en servidor proxy

Publicado: Lun, 03 Ene 2011, 14:25
por KZKG^Gaara
Qué tal socio.
Oye una duda, qué ventajas tiene este en Python sobre el otro en Bash?

Saludos y gracias por el trabajo bro ;)

Re: Script de salvas de logs en servidor proxy

Publicado: Lun, 03 Ene 2011, 14:48
por Metal
Ventajas ninguna, solo lo hice para los novatos en python y sobre todo si a alguien se le ocurre mejoras q las comente aquí. Todo el crédito es tuyo q fue al q se le ocurrió, yo solo me limite a traducirlo :lol: , también q no me gusta el bash y si el python.

Cambios:
Obvie la creación de body.txt los adjunte directo al mensaje sin crearlos.
Obvio también los logs $LOG_FILE los adjunto también directo al correo.
Utilizo un servidor de smtp para enviar los correos.

Re: Script de salvas de logs en servidor proxy

Publicado: Lun, 03 Ene 2011, 15:15
por KZKG^Gaara
Metal escribió:Ventajas ninguna, solo lo hice para los novatos en python y sobre todo si a alguien se le ocurre mejoras q las comente aquí. Todo el crédito es tuyo q fue al q se le ocurrió, yo solo me limite a traducirlo :lol: , también q no me gusta el bash y si el python.

Cambios:
Obvie la creación de body.txt los adjunte directo al mensaje sin crearlos.
Obvio también los logs $LOG_FILE los adjunto también directo al correo.
Utilizo un servidor de smtp para enviar los correos.
jaja no men, no lo decía por eso, solo que me preguntaba por las ventajas, pero ya me las dices tú mismo.
No necesitas los logs aparte, ni el body.txt, estos se puede decir que son parches, chapuzas que tuve que hacer para que toda la información me llegase bien jeje, pero con tu script ya no hacen falta ;)
Estas son mejoras ^_^ men jeje.

Saludos y me lo quedo.
Ah un detalle, para hacerlo funcionar qué hace falta? Python instalado algo bastante obvio jaja, qué más haría falta??
Y ejecutarlo es lo mismo no? ./script.py no?

Re: Script de salvas de logs en servidor proxy

Publicado: Lun, 03 Ene 2011, 15:20
por Metal
Si, así debe funcionar. Cualquier problema q te de lo pones aquí y entre todos lo arreglamos. No creo q este perfecto y si al final necesitas otras modificaciones igual las implementamos.

Algo no me gusto de lo q hice y es q el scp pide contraseña, como resuelves eso?? La única solución q encontré era con certificados digital

Re: Script de salvas de logs en servidor proxy

Publicado: Lun, 03 Ene 2011, 15:30
por KZKG^Gaara
Metal escribió:Si, así debe funcionar. Cualquier problema q te de lo pones aquí y entre todos lo arreglamos. No creo q este perfecto y si al final necesitas otras modificaciones igual las implementamos.

Algo no me gusto de lo q hice y es q el scp pide contraseña, como resuelves eso?? La única solución q encontré era con certificados digital
Configuro los servers para que se conozcan entre ellos (esto suena a cita LOL!!!)
O sea, Virtue en este caso es el que hace la salva, Freedom es el servidor central donde se almacenan las salvas no?
Le digo a Freedom que genere una llave pública, luego Virtue es el que la usa para conectarse sin necesidad de autentificación a Freedom.
No encontré otra forma de pasar archivos encriptados con SSH sin tener que escribir yo mismo el password, si conoces algún otro método me dices.

Saludos

Re: Script de salvas de logs en servidor proxy

Publicado: Mar, 04 Ene 2011, 08:00
por linvix
Hola Metal

Te invito a que subas este scripts a snippets de c'odigo que hemos creado en Linux Pinar

La url de acceso es http://www.pri.jovenclub.cu/jc/linux/snippets/
para crear un nuevo snippets: http://www.pri.jovenclub.cu/jc/linux/snippets/add/

salu2

Re: Script de salvas de logs en servidor proxy

Publicado: Vie, 07 Ene 2011, 08:53
por Metal
Gaara probaste el script de python??

Re: Script de salvas de logs en servidor proxy

Publicado: Vie, 07 Ene 2011, 10:39
por KZKG^Gaara
Metal escribió:Gaara probaste el script de python??
Nop, no lo he probado aún, he estado haciendo varias cosas.