2017-01-17 2 views
1

Hallo, ich habe die folgen Beispiel Linien mit grok passen, aber es nur dieses _grokparsefailure Fehler erzeugen:Sintax Fehler _grokparsefailure in logstash

OSSEC - RULEID: "1484654377"; RULEID: "5402"; RULELEVEL: "3"; RULEGROUP: "syslog,sudo"; RULECOMMENT: "Successful sudo to ROOT executed"; DSTUSER: "root"; SRCIP: "None"; HOSTNAME: "elk-stack-2"; LOCATION: "/var/log/auth.log"; EVENT: "[INIT]Jan 17 09:59:36 elk-stack-2 sudo: root : TTY=pts/1 ; PWD=/root ; USER=root ; COMMAND=/bin/su[END]";

Mein grok conf ist:

filter { 
    grok { 
     match => { "message" => "OSSEC - RULEID: \"%{NUMBER:timestamp}\"; RULEID: \"${NUMBER:ruleid}\"; RULELEVEL: \"${NUMBER:rulelevel}\"; RULEGROUP: \"${GREEDYDATA:rulegroup}\"; RULECOMMENT: \"${DATA:rulecomment}\"; DSTUSER: \"${NOTSPACE:dstuser}\"; SRCIP: \"${NOTSPACE:srcip}\"; HOSTNAME: \"${NOTSPACE:hostname}\"; LOCATION: \"${NOTSPACE:location}\"; EVENT: \"[INIT]${DATA:event}[END]\";" 
     } 
    } 
} 

Wohin ich gehe falsch?

+0

Sorry, das ist die vollständige Zeile: 'OSSEC - RULEID:" 1484654377 "; RULEID: "5402"; RULELEVEL: "3"; REGELGRUPPE: "syslog, sudo"; REGELUNG: "Erfolgreiches Sudo zu ROOT ausgeführt"; DSTUSER: "Wurzel"; SRCIP: "Keine"; HOSTNAME: "elk-stack-2"; STANDORT: "/var/log/auth.log"; EREIGNIS: "[INIT] Jan 17 09:59:36 elk-stack-2 sudo: root: TTY = Punkte/1; PWD =/root; USER = Wurzel; COMMAND =/bin/su [END]"; ' –

+0

Verwenden Sie keine Kommentare zum Aktualisieren von Fragen; Bearbeiten Sie einfach die Frage und fügen Sie Ihre Details hinzu. – jdv

Antwort

0

Sie verwechselten die Syntax: Sie verwendeten $ anstelle von % in vielen Fällen oben (mit %{...}). Außerdem muss die [ außerhalb der Zeichenklasse mit Escape-Zeichen versehen werden, damit sie einem Literalzeichen [ entspricht. Ich schlage auch vor, DATA anstelle von GREEDYDATA mit dem rulegroup Feld zu verwenden.

Verwenden

OSSEC - RULEID: \"%{NUMBER:timestamp}\"; RULEID: \"%{NUMBER:ruleid}\"; RULELEVEL: \"%{NUMBER:rulelevel}\"; RULEGROUP: \"%{DATA:rulegroup}\"; RULECOMMENT: \"%{DATA:rulecomment}\"; DSTUSER: \"%{NOTSPACE:dstuser}\"; SRCIP: \"%{NOTSPACE:srcip}\"; HOSTNAME: \"%{NOTSPACE:hostname}\"; LOCATION: \"%{NOTSPACE:location}\"; EVENT: \"\[INIT\]%{DATA:event}\[END\]\"; 

Auch Sie können alle Räume mit \s+ ersetzen, wenn das Leerzeichen unterscheiden zu optimieren entsprechen.

+0

Arbeitete perfekt !! Vielen Dank für Ihre Zeit, um dieses Problem zu lösen. und nochmals vielen Dank für das verwirrte $ anstelle von%. Aber was ist der wirkliche Unterschied zwischen DATA und GREEDYDATA? Danke! –

+0

'DATA' (='. *? ') Passt träge, so wenig Zeichen wie möglich, und' GREEDYDATA' packt so viele Zeichen von der aktuellen Position wie möglich nach rechts (= '. *'). –