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!
・ Sammeln Sie die gewünschten Informationen mit Befehlen in einer Textdatei
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"
Diese Operation verwendet hauptsächlich die Befehle sed und awk. Als Fluss,
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.
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 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
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/
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.
Danach können Sie eine Zeitreihenanalyse usw. durchführen, indem Sie eine weitere Vorverarbeitung durchführen.
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