Analyser un fichier journal en Python

Vaibhav Vaibhav 22 janvier 2022
Analyser un fichier journal en Python

Un fichier journal contient des informations sur les événements qui se produisent pendant l’exécution d’un système logiciel ou d’une application. Ces événements incluent les erreurs, les demandes faites par les utilisateurs, les bogues, etc. Les développeurs peuvent analyser davantage ces détails sur l’utilisation pour déterminer les problèmes potentiels avec le système, mettre en œuvre des solutions plus récentes et meilleures et améliorer la conception globale. Les fichiers journaux peuvent révéler beaucoup de choses sur la sécurité du système, ce qui aide les développeurs à améliorer le système ou l’application.

Généralement, les entrées dans un fichier journal ont un format ou un modèle. Par exemple, un système logiciel peut avoir un format qui imprime trois choses : l’horodatage, le message de journal et le type de message. Ces formats peuvent contenir n’importe quelle quantité d’informations structurées dans un texte bien formaté à des fins de lisibilité et de gestion.

Pour effectuer une analyse sur ces fichiers journaux, on peut considérer n’importe quel langage de programmation. Mais cet article parlera spécifiquement de la façon dont on peut analyser de tels fichiers journaux à l’aide de Python. Néanmoins, la théorie derrière le processus reste la même pour tous les langages de programmation. On peut facilement traduire le code Python dans n’importe quel autre langage de programmation pour effectuer la tâche requise.

Analyser un fichier journal en Python

Comme mentionné ci-dessus, les entrées dans un fichier journal ont un format spécifique. Cela signifie que nous pouvons tirer parti de ce format pour analyser les informations écrites dans un fichier journal ligne par ligne. Essayons de comprendre cela à l’aide d’un exemple.

Considérez le format de journal suivant qui est utilisé pour une application Web. Il comporte quatre détails importants, à savoir, la date et l’heure ou l’horodatage (format yyyy-mm-dd hh:mm:ss), l’URL consultée, le type de message de log (succès, erreur, etc.) , et le message de journal.

DateTime | URL | Log - Type | Log

Considérons maintenant un fichier log.txt qui contient des logs au format mentionné ci-dessus. Le fichier log.txt ressemblerait à ceci.

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

Le code Python suivant lira ce fichier journal et stockera les informations dans un dictionnaire. Une variable order stocke toutes les clés du dictionnaire dans le même ordre que celui d’un seul journal. Étant donné que le log formel a un |, nous pouvons l’utiliser pour diviser une chaîne de journal en éléments et stocker ceux qui nous plaisent.

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

Sortie:

{
    "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",
}

Une fois les informations lues, nous pouvons effectuer toute autre opération dessus. Nous pouvons le stocker dans une base de données pour une analyse future, importer NumPy et Matplotlib et tracer des graphiques pour comprendre les informations de manière graphique. Filtrez les journaux avec des balises ERROR et parcourez les erreurs rencontrées par les utilisateurs, ou faites attention à certaines activités suspectes ou failles de sécurité, par exemple, le spam ou les accès non autorisés. Les opportunités sont infinies et cela dépend de ce que les développeurs ou les scientifiques des données essaient d’apprendre à partir des données obtenues.

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.