Analizar un archivo de registro en Python

Vaibhav Vaibhav 22 enero 2022
Analizar un archivo de registro en Python

Un archivo de registro contiene información sobre los eventos que ocurren durante la ejecución de un sistema de software o una aplicación. Estos eventos incluyen errores, solicitudes hechas por los usuarios, errores, etc. Los desarrolladores pueden escanear más estos detalles sobre el uso para descubrir problemas potenciales con el sistema, implementar nuevas y mejores soluciones y mejorar el diseño general. Los archivos de registro pueden revelar mucho sobre la seguridad del sistema, lo que ayuda a los desarrolladores a mejorar el sistema o la aplicación.

Generalmente, las entradas dentro de un archivo de registro tienen un formato o patrón. Por ejemplo, un sistema de software puede tener un formato que imprima tres cosas: marca de tiempo, mensaje de registro y tipo de mensaje. Estos formatos pueden tener cualquier cantidad de información estructurada en un texto bien formateado para fines de legibilidad y administración.

Para realizar análisis sobre estos archivos de registro, se puede considerar cualquier lenguaje de programación. Pero este artículo hablará específicamente sobre cómo se pueden analizar dichos archivos de registro usando Python. Sin embargo, la teoría detrás del proceso sigue siendo la misma para todos los lenguajes de programación. Uno puede traducir fácilmente el código Python a cualquier otro lenguaje de programación para realizar la tarea requerida.

Analizar un archivo de registro en Python

Como se mencionó anteriormente, las entradas dentro de un archivo de registro tienen un formato específico. Esto significa que podemos aprovechar este formato para analizar la información escrita dentro de un archivo de registro línea por línea. Intentemos comprender esto con un ejemplo.

Considere el siguiente formato de registro que se utiliza para una aplicación web. Tiene cuatro detalles significativos, a saber, la fecha y hora o la marca de tiempo (formato aaaa-mm-dd hh:mm:ss), la URL a la que se accede, el tipo de mensaje de registro (éxito, error, etc.) y el mensaje de registro.

DateTime | URL | Log - Type | Log

Ahora, considere un archivo log.txt que contiene registros en el formato mencionado anteriormente. El archivo log.txt se vería así.

2021-10-26 10:26:44 | https://website.com/home | SUCCESS | Message
2021-10-26 10:26:54 | https://website.com/about | SUCCESS | Message
2021-10-26 10:27:01 | https://website.com/page | ERROR | Message
2021-10-26 10:27:03 | https://website.com/user/me | SUCCESS | Message
2021-10-26 10:27:04 | https://website.com/settings/ | ERROR | Message
...

El siguiente código de Python leerá este archivo de registro y almacenará la información dentro de un diccionario. Una variable order almacena todas las claves del diccionario en el mismo orden que el de un solo registro. Dado que el log formal tiene un |, podemos usarlo para dividir una cadena de log en elementos y almacenarlos como queramos.

import json

file_name = "log.txt"
file = open(file_name, "r")
data = []
order = ["date", "url", "type", "message"]

for line in file.readlines():
    details = line.split("|")
    details = [x.strip() for x in details]
    structure = {key: value for key, value in zip(order, details)}
    data.append(structure)

for entry in data:
    print(json.dumps(entry, indent=4))

Salida

{
    "date": "2021-10-20 10:26:44",
    "url": "https://website.com/home",
    "type": "SUCCESS",
    "message": "Message",
}
{
    "date": "2021-10-20 10:26:54",
    "url": "https://website.com/about",
    "type": "SUCCESS",
    "message": "Message",
}
{
    "date": "2021-10-20 10:27:01",
    "url": "https://website.com/page",
    "type": "ERROR",
    "message": "Message",
}
{
    "date": "2021-10-20 10:27:03",
    "url": "https://website.com/user/me",
    "type": "SUCCESS",
    "message": "Message",
}
{
    "date": "2021-10-20 10:27:04",
    "url": "https://website.com/settings/",
    "type": "ERROR",
    "message": "Message",
}

Una vez que se lee la información, podemos realizar cualquier otra operación sobre ella. Podemos almacenarlo dentro de una base de datos para futuros análisis, importar NumPy y Matplotlib y trazar algunos gráficos para comprender la información de forma gráfica. Filtre los registros con etiquetas ERROR y escanee los errores que enfrentan los usuarios, o tenga cuidado con alguna actividad sospechosa o brechas de seguridad, por ejemplo, spam o accesos no autorizados. Las oportunidades son infinitas y depende de lo que los desarrolladores o científicos de datos estén intentando aprender de los datos obtenidos.

Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.