Insira partes de um arquivo de log nginx no banco de dados (mysql)

Insira partes de um arquivo de log nginx no banco de dados (mysql)

Quero inserir algumas partes do meu arquivo de log no mysql.
Este é o meu arquivo de log:

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

No meu banco de dados eu tenho as colunas[idLog] [date] [user] [module] [action] [doAjax] [ajaxAction]

Onde:
25/04/2017--> data
userx --> usuário
m=xxx -->módulo
a=xxx -->action
doajax=xxx-->doAjax
action=xxx-->ajaxAction
idLog é incremento automático

Então preciso inserir no meu arquivo de log essa informação:

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)

Quero inserir a data que está na 4ª coluna e algumas partes da requisição que está na 7ª coluna ( /userx/index.php?m=meeting&doajax=date&id=3) que estão na minha base de datas.
Algumas ideias?...

Tentei criar um script bash usando awke sedpara cortar algumas partes do meu arquivo de log e inserir no meu banco de dados

Responder1

Se a posição dos campos for constante, por exemplo: se a data estiver sempre no 2º campo. Então você pode usar o loop for para processar linhas de arquivo e usar awk para obter o campo obrigatório e atribuir a uma variável. Dentro do loop, ecoe a consulta de inserção com valores variáveis ​​​​de data, etc. para um arquivo.. e, finalmente, execute todas as consultas de inserção de uma vez.

informação relacionada