2014-04-07 9 views
20

Sto utilizzando Logstash + Elasticsearch + Kibana per avere una panoramica dei miei file di registro Tomcat.Logstash: come aggiungere il nome del file come campo?

Per ogni voce del registro, è necessario conoscere il nome del file da cui proviene. Mi piacerebbe aggiungerlo come campo. C'è un modo per farlo? Ho cercato su Google un po 'e ho trovato solo this SO question, ma la risposta non è più aggiornata.

Finora l'unica soluzione che vedo è specificare la configurazione separato per ogni nome di file possibile con diverso "add_field" in questo modo:

input { 
    file { 
    type => "catalinalog" 
    path => [ "/path/to/my/files/catalina**" ] 
    add_field => { "server" => "prod1" } 
    } 
} 

Ma poi ho bisogno di riconfigurare logstash ogni volta che c'è un nuovo possibile nome del file. Qualche idea migliore?

risposta

35

Ciao ho aggiunto un filtro grok per fare proprio questo. Volevo solo che il nome file non fosse il percorso, ma puoi cambiarlo in base alle tue esigenze.

filter { 
    grok { 
    match => ["path","%{GREEDYDATA}/%{GREEDYDATA:filename}\.log"] 
    } 
} 
+0

grazie per la tua risposta :) Non cercherà il nome del file DENTRO il contenuto del file di registro? – machinery

+2

Di solito non lavoreresti con grok sul campo del messaggio, ma io uso il campo path, che è un campo speciale che viene aggiunto automaticamente dal logstash. –

+0

Grazie mille :) La tua soluzione funziona - dopo aver aggiunto il segno di percentuale prima di "{GREEDYDATA: nomefile}". Per favore aggiorna la tua risposta e io la accetterò come soluzione. Non ero a conoscenza dell'esistenza del campo "percorso". – machinery

1

Nel caso in cui si desidera combinare il messaggio e il nome del file in un unico evento:

filter { 
grok { 
    match => { 
     message => "ERROR (?<function>[\S]*)" 
     } 
} 
grok { 
    match => { 
     path => "%{GREEDYDATA}/%{GREEDYDATA:filename}\.log" 
     } 
}} 

Il risultato in elasticsearch (focus su 'nome' e campi di 'funzione'):

"_index": "logstash-2016.08.03", 
    "_type": "logs", 
    "_id": "AVZRyEI49-A6kyBCq6Yt", 
    "_score": 1, 
    "_source": { 
     "message": "27/07/16 12:16:18,321 ERROR blaaaaaaaaa.internal.com", 
     "@version": "1", 
     "@timestamp": "2016-08-03T19:01:33.083Z", 
     "path": "/home/admin/mylog.log", 
     "host": "my-virtual-machine", 
     "function": "blaaaaaaaaa.internal.com", 
     "filename": "mylog" 
    } 
Problemi correlati