2015-05-06 13 views
14

Sto cercando di analizzare un file di log utilizzando GrokLogstash campi facoltativi nel file di log

Ogni riga del file di log ha campi separati da virgole:

13,home,ABC,Get,,Private, Public,1.2.3 ecc... 

sto usando partita come questa: match => [ "message", "%{NUMBER:requestId},%{WORD:ServerHost},%{WORD:Service}, ...

La mia domanda è: Posso consentire campo opzionale? A volte alcuni campi potrebbero essere vuoti ,,

C'è uno schema che corrisponde a una stringa come questa 2.3.5? (una sorta di numero di versione)

+0

Oltre al filtro grok, il [filtro csv] (http://logstash.net/docs/latest/filters/csv) viene creato per analizzare questo tipo di dati. –

risposta

44

Alla sua base, Grok è basato sulle espressioni regolari, in modo da poter circondano un pattern con ()? per renderla facoltativa - per esempio (%{NUMBER:requestId})?,

Se non c'è un modello di grok che si adatta alle tue esigenze, puoi sempre creare un'estrazione denominata in questo modo: (?<version>[\d\.]+) che estragga nella versione, una stringa che contiene un numero qualsiasi di cifre e punti.

+0

Ottima risposta! Ho lo stesso problema e la tua risposta mi ha risparmiato ore per la ricerca! – Allen

+0

Sì, questo ha funzionato perfettamente anche per me. @Alcanzar, ti ho visto rispondere ad altre domande: quali buoni riferimenti consigli? Trovo che ci sia un divario di contesto tra i documenti di grok e i riferimenti di reg-exp sottostanti! – scipilot

+0

Solo un'osservazione, che il modificatore opzionale non sembra applicare per il modello GREEDYDATA. Ad esempio: '(% {GREEDYDATA: x})? % {IP: ipaddr} (% {GREEDYDATA: y})? ' – ifelsemonkey

Problemi correlati