Teile einer nginx-Protokolldatei in die Datenbank (mysql) einfügen

Teile einer nginx-Protokolldatei in die Datenbank (mysql) einfügen

Ich möchte einige Teile meiner Protokolldatei in MySQL einfügen.
Dies ist meine Protokolldatei:

195.xx.x.x - - [25/Apr/2017:09:60:xx +0200] "POST /userx/index.php?m=contacts&a=form&...
192.xx.x.x - - [25/Apr/2017:09:45:xx +0200] "POST /usery/index.php?m=customer&doajax=request&action=getContacts...
197.xx.x.x - - [25/Apr/2017:09:20:xx +0200] "GET /userx/index.php?m=meeting&doajax=date&id=3

In meiner Datenbank habe ich die Spalten[idLog] [date] [user] [module] [action] [doAjax] [ajaxAction]

Dabei gilt:
25. April 2017 -> Datum
Benutzer x -> Benutzer
m = xxx -> Modul
a = xxx -> Aktion
doajax = xxx -> doAjax-
Aktion = xxx -> ajaxAction-
IDLog wird automatisch hochgezählt.

Daher muss ich diese Informationen in meine Protokolldatei einfügen:

INSERT INTO logs VALUES('null',25/04/2017,usery,contacts,form,null,null)
INSERT INTO logs VALUES('null',25/04/2017,usery,customer,null,request,getContacts)
INSERT INTO logs VALUES('null',25/04/2017,userz,meeting,null,date,null)

Ich möchte das Datum aus der 4. Spalte und einige Teile der Anfrage aus der 7. Spalte ( /userx/index.php?m=meeting&doajax=date&id=3) einfügen, die sich in meiner Datumsdatenbank befinden.
Einige Ideen?...

Ich habe versucht, ein Skript Bash zu erstellen awk, sedum einige Teile meiner Protokolldatei auszuschneiden und in meine Datenbank einzufügen

Antwort1

Wenn die Feldposition konstant ist, z. B.: wenn Datum immer im 2. Feld. Dann können Sie eine for-Schleife verwenden, um Dateizeilen zu verarbeiten und awk verwenden, um das erforderliche Feld abzurufen und einer Variablen zuzuweisen. Geben Sie innerhalb der Schleife die Insert-Abfrage mit variablen Werten von Datum usw. in eine Datei zurück und führen Sie schließlich alle Insert-Abfragen auf einmal aus.

verwandte Informationen