2016-06-22 8 views
0

Nach Protokolle Parsen Ich bin finden es einige neue Zeilen am Ende der Nachricht sindGrok Muster arbeiten nicht in Logstash

Beispiel Nachricht

ts: 2016.04.26 05-02-16 -018 CDT | ll: TRACE | tid: 10000.140 | scf: xxxxxxxxxxxxxxxxxxxxxxxxxxx.pc | mn: null | fn: xxxxxxxxxxxxxxxxxxxxxxxxxxx | ln: 749 | auid: xxxxxxxxxxxxxxxxxxxxxxxxxxx | eid: xxx.xxx.xxx.xxx-58261618-1-1461664935955 -139 | cid: 900009865 | ml: null | mittel: -99 | uip: xxx.xxx.xxx.xxx | hip: xxx.xxx.xxx.xxx | pli: null | msg: xxxxxxxxxxxxxxxxxxxxxxxxxxx | pl: xxxxxxxxxxxxxxxxxxxxxxxxxxx

TAKE 1 xxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxx

ich das RegexMuster verwenden unten, wie unten vorgeschlagen als Antworten

ts: ((([0-9] +) - ) + ([0-9] + -) + [AZ] +) \ | ll:% {WORT: ll} \ | tid:% {NUMMER: tid} \ | scf:% {DATA: scf} \ | mn:% {WORT: mn} \ | fn:% {WORT: fn} \ | ln:% {WORT: ln} \ | auid:% {WORT: auid} \ | eid:% {DATA: eid} \ | cid:% {WORD: cid} \ | ml:% {WORT: ml} \ | mid:% {NUMBER: mid} \ | uip:% {DATEN: uip} \ | hip:% {DATA: hip} \ | pli:% {WORD: pli} \ | \ s msg:% {GREEDYDATA: Nachricht} (\ | pl: (? (. | \ R | \ n)))

Aber leider ist es nicht richtig funktioniert, wenn der letzte Teil des Stammes nicht vorhanden ist

ts: 2016.04.26 05-02-16-018 CDT | ll: TRACE | tid: 10000.140 | scf: xxxxxxxxxxxxxxxxxxxxxxxxxxx.pc | mn: null | fn: xxxxxxxxxxxxxxxxxxxxxxxxxxx | ln: 749 | auid: xxxxxxxxxxxxxxxxxxxxxxxxxxx | eid: xxx.xxx.xxx.xxx-58261618-1-1461664935955-139 | cid: 900009865 | ml : null | mittel: -99 | uip: xxx.xxx.xxx.xxx | hip: xxx.xxx.xxx.xxx

Was sollte das richtige Muster sein?

------------------- Vorherige Frage ------------------------- -------------

Ich versuche, Protokollzeile wie diese zu analysieren.

ts: 2016.04.26 05-02-16-018 CDT | ll: TRACE | tid: 10.000,140 | scf: xxxxxxxxxxxxxxxxxxxxxxxxxxx.pc | mn: null | fn: xxxxxxxxxxxxxxxxxxxxxxxxxxx | ln: 749 | AUID: xxxxxxxxxxxxxxxxxxxxxxxxxxx | eid: xxx.xxx.xxx.xxx-58261618-1-1461664935955-139 | cid: 900009865 | ml: null | mittel: -99 | uip: xxx.xxx.xxx.xxx | hip: xxx.xxx.xxx.xxx | pli: null | msg: xxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxxxxxxxxxxxx

Unten ist mein logstash Filter

filter { 
    grok { 
     match => ["mesage", "ts:(?<date>(([0-9]+)-*)+ ([0-9]+-*)+ [A-Z]+)\|ll:%{WORD:ll}\|tid:%{WORD:tid}\|scf:%{WORD:scf}\|mn:%{WORD:mn}\|fn:%{WORD:fn}\|ln:%{WORD:ln}\|auid:%{WORD:auid}\|eid:%{WORD:eid}\|cid:%{WORD:cid}\|ml:%{WORD:ml}\|mid:%{WORD:mid}\|uip:%{WORD:uip}\|hip:%{WORD:hip}\|pli:%{WORD:pli}\|msg:%{WORD:msg}"] 
    } 
    date { 
     match => ["ts","yyyy-MM-dd HH-mm-ss-SSS ZZZ"] 
     target => "@timestamp" 
    } 
} 

ich erhalte "_grokparsefailure"

Antwort

0

Versuchte um Ihre Eingabe über grokdebug mit Ihrem Ausdruck zu analysieren, aber es konnte keine Felder auslesen. Managed, um es durch eine Änderung der Expression zu arbeiten:

ts:(?<date>(([0-9]+)-*)+ ([0-9]+-*)+ [A-Z]+)\|ll:%{WORD:ll}\|tid:%{NUMBER:tid}\|scf:%{DATA:scf}\|mn:%{WORD:mn}\|fn:%{WORD:fn}\|ln:%{WORD:ln}\|auid:%{WORD:auid}\|eid:%{DATA:eid}\|cid:%{WORD:cid}\|ml:%{WORD:ml}\|mid:%{NUMBER:mid}\|uip:%{DATA:uip}\|hip:%{DATA:hip}\|pli:%{WORD:pli}\|\s*msg:%{GREEDYDATA:msg} 

Ich denke auch, dass Sie den Namen der Spalte ändern, müssen die logstash wird mesage-message analysieren.

Außerdem sollte das Datum Parsing-Muster mit dem Format des Datums in der Eingabe übereinstimmen. Es gibt keine Zeitzonenidentität (ZZZ) in Ihren Eingabedaten (zumindest nicht im Beispiel).

So etwas sollte besser funktionieren (wenn auch nicht getestet):

filter { 
    grok { 
     match => ["mesage", "ts:(?<date>(([0-9]+)-*)+ ([0-9]+-*)+ [A-Z]+)\|ll:%{WORD:ll}\|tid:%{NUMBER:tid}\|scf:%{DATA:scf}\|mn:%{WORD:mn}\|fn:%{WORD:fn}\|ln:%{WORD:ln}\|auid:%{WORD:auid}\|eid:%{DATA:eid}\|cid:%{WORD:cid}\|ml:%{WORD:ml}\|mid:%{NUMBER:mid}\|uip:%{DATA:uip}\|hip:%{DATA:hip}\|pli:%{WORD:pli}\|\s*msg:%{GREEDYDATA:msg}"] 
    } 
    date { 
     match => ["ts","yyyy-MM-dd HH-mm-ss-SSS"] 
     target => "@timestamp" 
    } 

}

+0

Es gibt ein paar Fehler in der Konfiguration ist, siehe meine Antwort – baudsp

1

ich die Konfiguration von @HAL getestet haben, war es ein paar Dinge zu ändern:

  • Im Grokfilter mesage =>message
  • Im Datumsfilter ts =>date, so dass die Datumsanalyse im rechten Feld ist
  • Die CDT ist ein Zeitzonenname, wird von z in der Datumssyntax erfasst.

So ist die richtige Konfiguration würde wie folgt aussehen:

filter{ 
    grok { 
     match => ["message", "ts:(?<date>(([0-9]+)-*)+ ([0-9]+-*)+ [A-Z]+)\|ll:%{WORD:ll}\|tid:%{NUMBER:tid}\|scf:%{DATA:scf}\|mn:%{WORD:mn}\|fn:%{WORD:fn}\|ln:%{WORD:ln}\|auid:%{WORD:auid}\|eid:%{DATA:eid}\|cid:%{WORD:cid}\|ml:%{WORD:ml}\|mid:%{NUMBER:mid}\|uip:%{DATA:uip}\|hip:%{DATA:hip}\|pli:%{WORD:pli}\|\s*msg:%{GREEDYDATA:msg}"] 
    } 
    date { 
     match => ["date","yyyy-MM-dd HH-mm-ss-SSS z"] 
     target => "@timestamp" 
    } 
} 
+0

Vielen Dank baudsp – Roy

+0

Wenn meine Antwort funktioniert, sollten Sie es akzeptieren – baudsp

Verwandte Themen