[PYTHON] Der erste Schritt zur Protokollanalyse (Formatieren und Einfügen von Protokolldaten in Pandas)

Hintergrund

Derzeit bin ich als Praktikant bei EXIDEA Co., Ltd., das SEO-Schreibwerkzeuge entwickelt, in der App-Protokollanalyse tätig. Also habe ich mit jupyter notebook viele Protokolldaten in den Pandas-Datenrahmen eingefügt. Ich bemerkte jedoch, dass es keinen Artikel gab, der einfach über die Methode schrieb. Egal wie viel Sie analysieren möchten, wenn Sie die Protokolldaten nicht in Pandas ablegen, wird nichts gestartet. Dieses Mal werde ich die Verwendung der Rohdaten des Protokolls erläutern. Lass uns einen Blick darauf werfen!

Methode (2 Schritte)

・ Sammeln Sie die gewünschten Informationen mit Befehlen in einer Textdatei

Diesmal verwendete Protokolldaten

Als Beispiel verwenden wir das Nginx-Zugriffsprotokoll.

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"

Schritt 1

Sammeln Sie die gewünschten Informationen mit einem Befehl in einer Textdatei

Diese Operation verwendet hauptsächlich die Befehle sed und awk. Als Fluss,

  1. Verwenden Sie den Befehl sed, um die Protokolldaten vorzuverarbeiten (ersetzen)
  2. Extrahieren Sie das gewünschte Feld mit dem Befehl awk

Verarbeitung des Befehls sed

test.txt


WhiskyWhiskyWhisky
Grundlegende Grammatik
$ sed 's/Ersatzquelle/Nach dem Austausch/g' 
ex)
$sed 's/Whisky/Beer/g' test.txt
>>>BeerBeerBeer

Mit dieser Option können Sie die Protokolldaten formatieren, indem Sie unnötige Zeichen durch Leerzeichen ersetzen. In diesem Fall stören [] und "", wenn Sie sie mit Pandas in den Datenrahmen einfügen. Verarbeiten Sie sie daher im Voraus.

Verarbeitung des Befehls awk

test.txt


apple orange grape banana
Grundlegende Grammatik
$ awk '{gewünschtes Feld drucken}' 
ex)#Ich möchte die 1. und 3. Reihe
$ awk '{print $1,$3}' test.txt
>>> apple grape 

Dieses Mal möchte ich die IP-Adresse, Zeit, Anfrage, Pfad, Statuscode, Referer. Extrahieren Sie die 1., 4., 6., 7. und 11. Spalte.

Der eigentliche Befehl dieses Mal

Der folgende Code fasst die Befehlsverarbeitung zusammen.

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

fließen

Ergebnis der Befehlsausführung

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/

Schritt 2

Speichern Sie die Textdatei im Datenrahmen mit pd.read_csv ()

Bei der bisherigen Verarbeitung ist es zu einer Textdatei geworden, die nur die Informationen enthält, für die Protokolldaten gewünscht werden. Von hier aus endet es in einem Schuss.

import pandas as pd
columns=["IP","Datetime","method","URI","status","referer"]
df = pd.read_csv('test.txt',delimiter=' ',names=columns) #Das Trennzeichen ist leer

Das Ergebnis ist hier. スクリーンショット 2020-07-26 17.49.09.jpg

Danach können Sie eine Zeitreihenanalyse usw. durchführen, indem Sie eine weitere Vorverarbeitung durchführen.

Schließlich

Die in diesem Artikel vorgestellte Methode ist die, die ich persönlich am einfachsten fand. Wenn es also einen einfacheren Weg gibt, würde ich mich freuen, wenn Sie mich in den Kommentaren darüber informieren könnten.

Recommended Posts

Der erste Schritt zur Protokollanalyse (Formatieren und Einfügen von Protokolldaten in Pandas)
So geben Sie die im Django-Modell enthaltenen Daten im JSON-Format zurück und ordnen sie der Broschüre zu
Ich bin süchtig nach dem Unterschied, wie Flask und Django JSON-Daten empfangen
Aufteilen von Trainingsdaten für maschinelles Lernen in objektive Variablen und andere in Pandas
[Pandas] Wenn sich die Daten der ersten Zeile im Header von DataFrame befinden
Kombinieren Sie Listen zu einem DataFrame mit Pandas
So melden Sie sich automatisch wie 1Password von der CLI an
So erhalten Sie alle Schlüssel und Werte im Wörterbuch
So erhalten Sie einen Überblick über Ihre Daten in Pandas
So erstellen Sie einen Datenrahmen und spielen mit Elementen mit Pandas
Data Science-Begleiter in Python, wie man Elemente in Pandas spezifiziert
So melden Sie sich mit Python bei AtCoder an und senden automatisch
Die minimale Methode, die beim Aggregieren von Daten mit Pandas zu beachten ist
Darstellung der Verteilung der Bakterienzusammensetzung aus Qiime2-Analysedaten in einem Box-Whisker-Diagramm
Wie man nüchtern mit Pandas schreibt
Versuchen Sie, Daten in MongoDB abzulegen
Der erste Schritt von Python Matplotlib
So melden Sie sich bei Docker + NGINX an
Bestimmen Sie das Datums- und Uhrzeitformat mit Python und konvertieren Sie es in Unixtime
Geben und meinen Sie die Einschränkungsoption in scipy.optimize.minimize
[Python] So erhalten Sie den ersten und den letzten Tag des Monats
So formatieren Sie eine Tabelle mit Pandas Apply, Pivot und Swaplevel
[ROS2] Beschreibung der Neuzuordnung und der Parameter beim Start des Python-Formats
Visualisierung, wo bei der Klassifizierung der Datenanalyse eine Fehlklassifizierung auftritt
Formatieren Sie das Git-Protokoll und erhalten Sie den festgeschriebenen Dateinamen im CSV-Format
So zeigen Sie Bytes in Java und Python auf die gleiche Weise an
[RHEL7 / CentOS7] Ich habe das Farbfeld des Protokollüberwachungstools eingefügt und versucht, per E-Mail zu benachrichtigen.
Teilen und Verarbeiten eines Datenrahmens mithilfe der Groupby-Funktion
So schreiben Sie den richtigen Shebang in Perl-, Python- und Ruby-Skripten
[Itertools.permutations] So löschen Sie eine Sequenz in Python
So ermitteln Sie mit Python den Unterschied zwischen Datum und Uhrzeit in Sekunden
So weisen Sie den Index im Pandas-Datenrahmen neu zu
So setzen Sie in Python ein Leerzeichen mit halber Breite vor Buchstaben und Zahlen.
Datenanalyse: Einfache Anwendung deskriptiver Statistiken und Schätzungsstatistiken auf CSV-Daten in Python
Kopieren und Einfügen des Inhalts eines Blattes im JSON-Format mit einer Google-Tabelle (mithilfe von Google Colab)
Lesen von CSV-Dateien mit Pandas
Verwendung ist und == in Python
Verwendung von pandas Timestamp und date_range
(Tagebuch 1) Erstellen, Durchsuchen und Registrieren von Daten in der SQL-Datenbank des Microsoft Azure-Dienstes mit Python
Ich möchte visualisieren, wo und wie viele Leute in der Fabrik sind
Datenanalyse in Python Zusammenfassung der Quellen, die Anfänger zuerst betrachten sollten
So übergeben Sie den Pfad zu der mit pyenv und virtualenv mit PyCharm erstellten Bibliothek
So zählen Sie die Anzahl der Elemente in Django und geben sie in die Vorlage aus
[Pandas] So überprüfen Sie Duplikate in einer Tabelle und löschen Duplikate (entspricht dem Löschen von Duplikaten in Excel)
So stellen Sie die Schriftbreite des in pyenv eingegebenen Jupyter-Notizbuchs gleich
Scraping mit Python-Einführung in Scrapy Erster 2. Schritt
Verwendung der C-Bibliothek in Python
Melden Sie sich mit SSH bei einem Remote-Server an
So verwenden Sie MkDocs zum ersten Mal
So generieren Sie eine Sequenz in Python und C ++
[Python] So ändern Sie das Datumsformat (Anzeigeformat)
12. Speichern Sie die erste Spalte in col1.txt und die zweite Spalte in col2.txt
Der erste Schritt im Problem der Erfüllung von Einschränkungen in Python
[Python] Lesen von Daten aus CIFAR-10 und CIFAR-100
Verwendung von Datenanalysetools für Anfänger
[Einführung in Python] Umgang mit Daten im JSON-Format
So erhalten Sie die Dateien im Ordner [Python]
Lesen von Zeitreihendaten in PyTorch