[Python-es] Procesar archivos de SYSLOG

Carlos Herrera Polo carlos.herrerapolo en gmail.com
Mar Abr 13 17:37:41 CEST 2010


Gracias a todos por las sugerencias,
Finalmente hice un pequeño programa utilizando el modulo csv para leer el
archivo y la libreria MySQLdb para insertar los registros en una base de
datos que cree.
Adjunto el codigo, se aceptan sugerencias.

Saludos

import csv
import MySQLdb

log = csv.reader(open('Syslog_2010-04-12.txt'), dialect='excel-tab')
db = MySQLdb.connect(host='localhost', user='root', passwd='****',db =
'pythonlog')

c = db.cursor()

for row in log:

    cadena_total = row[3]

    x=0
    x = cadena_total.find('system-information-00769')

    if x > 1:
        fecha=row[0]

        mensaje = cadena_total[91:]

        y = mensaje.find(' ')
        url=mensaje[y+1:]
        url=url[:url.find('CATEGORY:')-1]

        ip_origen = mensaje[0:mensaje.find('(')]
        dominio = url[0:url.find('/')]

        print ip_origen,' >> ' , url

        registro=[fecha,url,dominio,mensaje,ip_origen]
        c.execute ('INSERT INTO log_url
(fecha,url,dominio,mensaje,ip_origen)  values (%s,%s,%s,%s,%s)',registro )


c.close()
db.commit()
db.close()



El 12 de abril de 2010 18:27, lopz <lowlifebob en gmail.com> escribió:

> No sé, yo no lo veo necesario usar un módulo de 3ros para parsear un
> string, podrías hacerlo a base de strings y slices, o ahora que
> aprendí lo básico de expresiones regulares me encantan, tiraría por
> esto último.
> Lo de abrir todo el fichero grande es mucho para cargarlo en memória,
> tendrás que usar buffers o algo así, no estoy puesto al tema y me
> gustaría saber cómo los expertos solucionarían este caso que a mi me
> interesa :)
>
> Saludos!
>
> El día 12 de abril de 2010 19:05, César García <celord en gmail.com>
> escribió:
> > que tal pyparsing ? veo que hasta tiene ejemplos de un archivo de log de
> apache
> >
> > http://pyparsing.wikispaces.com/
> >
> > El día 12 de abril de 2010 13:48, Carlos Herrera Polo
> > <carlos.herrerapolo en gmail.com> escribió:
> >> Estimados:
> >>
> >> Pienso desarrollar un pequeño programa en python que procese un gran
> archivo
> >> de texto ASCII (200Mb aprox) el cual tiene varias lineas con informacion
> de
> >> URLs visitadas. Este archivo lo tengo en una PC Window$ que uso como
> Syslog
> >> y el firewall almacena ahi la informacion en linea.
> >> La idea es que pueda hacer un programa que ubique en cada linea (que
> >> terminan siempre con <000>) un URL, y de ser asi, almacenar en una base
> de
> >> datos , se me ocurre Mysql lo siguiente:
> >>
> >> Fecha , hora, IP , y el dominio del URL, de manera que pueda luego,
> mediante
> >> consultas a esa base de datos, obtener informacion agrupada sobre
> paginas
> >> mas vistas, usuarios con mas trafico, etc.
> >>
> >> Ejemplo de archivo ASCII:
> >>
> >> 2010-04-12 11:15:13    Local0.Info    192.168.1.1    FW_UNO: NetScreen
> >> device_id=FW_REM  [Root]system-information-00769: UF-MGR: URL PERMITTED:
> >> 192.168.1.41(1619)->68.142.101.11(80)
> >>
> sunmicro-6.vo.llnwd.net/u/esd6/jscdl/jre/6u17-b80/jre/jre-6u17-windows-i586-if
> >> CATEGORY: default REASON: BY_OTHER PROFILE: Acceso_Total (2010-04-12
> >> 11:14:36)<000>
> >> 2010-04-12 11:15:13    Local0.Notice    192.168.1.1    FW_REM: NetScreen
> >> device_id=FW_REM  [Root]system-notification-00257(traffic):
> >> start_time="2010-04-12 11:14:23" duration=14 policy_id=27 service=http
> >> proto=6 src zone=Trust dst zone=Untrust action=Permit sent=1011
> rcvd=1042
> >> src=10.10.10.45 dst=204.160.104.126 src_port=1932 dst_port=80 src-xlated
> >> ip=200.62.154.89 port=15204 dst-xlated ip=204.160.104.126 port=80
> >> session_id=45288 reason=Close - TCP RST<000>
> >> 2010-04-12 11:15:14    Local0.Info    192.168.1.1    FW_REM: NetScreen
> >> device_id=FW_REM  [Root]system-information-00769: UF-MGR: URL PERMITTED:
> >> 192.168.1.45(1928)->208.89.14.135(80) sales.liveperson.net/hc/55170107/
> >> CATEGORY: default REASON: BY_OTHER PROFILE: Acceso_Total (2010-04-12
> >> 11:14:37)<000>
> >>
> >>
> >> Podrian por favor aconsejarme que modulos de Python deberia utilizar ?
> Se
> >> que Python tiene cientos de librerias, imagino que alguna debe poder
> >> identificar de una variable string, el URL, y luego el dominio...
> >>
> >> Mil gracias de antemano por las sugerencias.
> >>
> >> Saludos
> >>
> >> _______________________________________________
> >> Python-es mailing list
> >> Python-es en python.org
> >> http://mail.python.org/mailman/listinfo/python-es
> >> FAQ: http://python-es-faq.wikidot.com/
> >>
> >>
> >
> >
> >
> > --
> > http://celord.blogspot.com/
> > _______________________________________________
> > Python-es mailing list
> > Python-es en python.org
> > http://mail.python.org/mailman/listinfo/python-es
> > FAQ: http://python-es-faq.wikidot.com/
> >
>
>
>
> --
> lopz es libre, usa --> GNU/linux gentoo
>
> +--[RSA 2048]--+
> |  ..o.o=+       |
> |   o =o*.+      |
> |  . . *oO .      |
> |     .EBoo      |
> |      o.S         |
> +--[lopz.org]--+
> _______________________________________________
> Python-es mailing list
> Python-es en python.org
> http://mail.python.org/mailman/listinfo/python-es
> FAQ: http://python-es-faq.wikidot.com/
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://mail.python.org/pipermail/python-es/attachments/20100413/e9a011f3/attachment.html>


Más información sobre la lista de distribución Python-es