[PYTHON] La première étape de l'analyse du journal (comment formater et mettre les données du journal dans Pandas)

Contexte

Actuellement, je suis impliqué dans l'analyse des journaux d'applications en tant que stagiaire chez EXIDEA Co., Ltd., qui développe des outils de rédaction SEO. J'ai donc mis beaucoup de données de journal dans la trame de données Pandas avec le notebook Jupyter. Cependant, j'ai remarqué qu'aucun article n'écrivait simplement sur la méthode. Peu importe combien vous voulez analyser, si vous ne mettez pas les données de journal dans les pandas, rien ne démarrera. Donc, cette fois, je vais réellement expliquer en utilisant les données brutes du journal. Nous allons jeter un coup d'oeil!

Méthode (2 étapes)

・ Collectez les informations souhaitées avec des commandes dans un fichier texte -Stocker le fichier texte dans le bloc de données avec pd.read_csv ()

Données du journal utilisées cette fois

À titre d'exemple, nous utiliserons le journal d'accès Nginx.

172.17.x.xxx - - [23/Jun/2020:06:25:18 +0900] "GET /xxxxx.js HTTP/1.1" 200 5032 "http://example.net/" "Mozilla/5.0 (iPhone; CPU iPhone OS 13_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) GSA/112.0.316532311 Mobile/15E148 Safari/604.1" "203.0.113.195"
172.17.x.xx - - [23/Jun/2020:06:25:18 +0900] "GET /xxxxx.js HTTP/1.1" 304 0 "http://example.net/" "Mozilla/5.0 (iPhone; CPU iPhone OS 12_3_1 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 YJApp-IOS jp.co.yahoo.ipn.appli/4.16.14" "203.0.113.195"
172.17.x.xxx - - [23/Jun/2020:06:25:18 +0900] "GET /xxxxx.js HTTP/1.1" 304 0 "http://example.net/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.106 Safari/537.36" "203.0.113.195"

étape 1

Collectez les informations que vous souhaitez avec une commande dans un fichier texte

Cette opération utilise principalement les commandes sed et awk. En tant que flux,

  1. Utilisez la commande sed pour prétraiter les données du journal (remplacer)
  2. Extrayez le champ souhaité avec la commande awk

Traitement de la commande sed

test.txt


WhiskyWhiskyWhisky
Grammaire de base
$ sed 's/Source de remplacement/Après remplacement/g' 
ex)
$sed 's/Whisky/Beer/g' test.txt
>>>BeerBeerBeer

Avec cela, vous pouvez formater les données du journal en remplaçant les caractères inutiles par des caractères vides. Dans ce cas, [] et "" vous gêneront lorsque vous les placerez dans la trame de données avec Pandas, alors traitez-les à l'avance.

Traitement de la commande awk

test.txt


apple orange grape banana
Grammaire de base
$ awk '{imprimer le champ souhaité}' 
ex)#Je veux les 1ère et 3ème rangées
$ awk '{print $1,$3}' test.txt
>>> apple grape 

Cette fois, je veux l'adresse IP, l'heure, la demande, le chemin, le code d'état, le référent. Extrayez les 1ère, 4ème, 6ème, 7ème et 11ème colonnes.

La commande réelle cette fois

Le code suivant résume le traitement de la commande.

cat access.log | sed 's/\[//g' -e  's/\]//g' -e 's/"//g' | awk '{print $1,$4,$6,$7,$11}' > test.txt

couler

-D'abord, ouvrez access.log avec la commande cat. (Si vous souhaitez exécuter chaque commande à la fois, connectez-vous avec |.) -Après cela, supprimez [] et "" avec la commande sed. (La commande sed peut être remplacée consécutivement en écrivant -e) ・ Ensuite, extrayez le champ souhaité avec la commande awk. ・ Enfin, convertissez ces access.logs transformés en test.txt

Résultat de l'exécution de la commande

172.17.x.xxx 23/Jun/2020:06:25:18 GET /xxxxx.js 200 http://example.net/
172.17.x.xx 23/Jun/2020:06:25:18 GET /xxxxx.js 304 http://example.net/
172.17.x.xxx 23/Jun/2020:06:25:18 GET /xxxxx.js 304 http://example.net/

Étape 2

Stocker le fichier texte dans le bloc de données avec pd.read_csv ()

Avec le traitement jusqu'à présent, il est devenu un fichier texte qui ne contient que les informations pour lesquelles des données de journal sont souhaitées. De là, cela se termine en un seul coup.

import pandas as pd
columns=["IP","Datetime","method","URI","status","referer"]
df = pd.read_csv('test.txt',delimiter=' ',names=columns) #Le délimiteur est vide

Le résultat est là. スクリーンショット 2020-07-26 17.49.09.jpg

Après cela, vous pouvez effectuer une analyse de séries chronologiques, etc. en effectuant un prétraitement supplémentaire.

finalement

La méthode présentée dans cet article est celle que j'ai personnellement trouvée la plus simple. Donc, s'il y a un moyen plus simple, j'apprécierais que vous me le fassiez savoir dans les commentaires.

Recommended Posts

La première étape de l'analyse du journal (comment formater et mettre les données du journal dans Pandas)
Comment retourner les données contenues dans le modèle django au format json et les mapper sur le dépliant
Je suis accro à la différence dans la façon dont Flask et Django reçoivent les données JSON
Comment diviser les données de formation en machine learning en variables objectives et autres dans Pandas
[Pandas] Si les données de la première ligne sont dans l'en-tête de DataFrame
Combinez des listes dans un DataFrame avec des pandas
Comment se connecter automatiquement comme 1Password depuis CLI
Comment obtenir toutes les clés et valeurs du dictionnaire
Comment obtenir un aperçu de vos données dans Pandas
Comment créer une trame de données et jouer avec des éléments avec des pandas
Compagnon de science des données en python, comment spécifier des éléments dans les pandas
Comment se connecter à AtCoder avec Python et soumettre automatiquement
La méthode minimale à retenir lors de l'agrégation de données avec Pandas
Comment représenter la distribution de la composition bactérienne à partir des données d'analyse Qiime2 dans un diagramme de moustaches
Comment écrire sobrement avec des pandas
Essayez de mettre des données dans MongoDB
La première étape de Python Matplotlib
Comment se connecter à Docker + NGINX
Déterminez le format de la date et de l'heure avec Python et convertissez-le en Unixtime
Comment donner et signifier l'option des contraintes dans scipy.optimize.minimize
[Python] Comment obtenir le premier et le dernier jour du mois
Comment formater un tableau à l'aide de Pandas Appliquer, pivoter et permuter le niveau
[ROS2] Comment décrire le remappage et les paramètres au lancement au format python
Comment visualiser où se produit une mauvaise classification dans la classification de l'analyse des données
Formatez le journal Git et obtenez le nom du fichier validé au format csv
Comment afficher les octets de la même manière en Java et Python
[RHEL7 / CentOS7] J'ai mis dans le swatch de l'outil de surveillance du journal et j'ai essayé de notifier par e-mail.
Comment diviser et traiter une trame de données à l'aide de la fonction groupby
Comment écrire le bon shebang dans les scripts Perl, Python et Ruby
[Itertools.permutations] Comment créer une séquence en Python
Comment obtenir la différence de date et d'heure en secondes avec Python
Comment réattribuer un index dans pandas dataframe
Comment mettre un espace demi-largeur avant les lettres et les chiffres en Python.
Analyse des données: application facile des statistiques descriptives et des statistiques d'estimation aux données CSV en Python
Comment copier et coller le contenu d'une feuille au format JSON avec une feuille de calcul Google (en utilisant Google Colab)
Comment lire des fichiers CSV avec Pandas
Comment utiliser is et == en Python
Comment utiliser les pandas Timestamp et date_range
(Journal 1) Comment créer, parcourir et enregistrer des données dans la base de données SQL du service Microsoft Azure avec python
Je veux visualiser où et combien de personnes se trouvent dans l'usine
Analyse des données en Python Résumé des sources que les débutants devraient d'abord consulter
Comment passer le chemin vers la bibliothèque construite avec pyenv et virtualenv avec PyCharm
Comment compter le nombre d'éléments dans Django et sortir dans le modèle
[Pandas] Comment vérifier les doublons dans un tableau et supprimer les doublons (équivalent à supprimer les doublons dans Excel)
Comment rendre la largeur de police du notebook jupyter mis dans pyenv égale
Scraping avec Python - Introduction à Scrapy Première 2e étape
Comment utiliser la bibliothèque C en Python
Connectez-vous à un serveur distant avec SSH
Comment utiliser MkDocs pour la première fois
Comment générer une séquence en Python et C ++
[Python] Comment changer le format de la date (format d'affichage)
12. Enregistrez la première colonne dans col1.txt et la deuxième colonne dans col2.txt
La première étape du problème de réalisation des contraintes en Python
[Python] Comment lire les données de CIFAR-10 et CIFAR-100
Comment utiliser les outils d'analyse de données pour les débutants
[Introduction à Python] Comment gérer les données au format JSON
Comment obtenir les fichiers dans le dossier [Python]
Comment lire les données de séries chronologiques dans PyTorch