
Zunächst einmal entschuldige ich mich dafür, ich bin ziemlich schlecht in regulären Ausdrücken und versuche, ein benutzerdefiniertes Muster zu schreiben (da ich im vorhandenen Grok-Muster nichts finden kann oder vielleicht etwas übersehe), um SVN-Protokolle zu analysieren, die im Format von
r24|prashant|2015-02-26 12:38:04 -0800 (Thu, 26 Feb 2015)|33|Log: ABC-123 / Initial version||A test/log_testing1 A test/log_testing2 A test/log_testing3 A test/log_testing4 A test/log_testing5 \n
Es hat also das Format
$REVISION:$USER ID:$DATE:$CHECKED IN MESSAGE:$FILE CHECKED IN
Also habe ich ein benutzerdefiniertes Muster geschrieben
SVN [r0-9]
SVN_TIMESTAMP %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}? (%{DAY}, %{MONTHDAY} %{MONTH} %{YEAR})
und meine Logstash-Conf würde für den Filterabschnitt so aussehen
filter {
grok {
match => { "message" => "%{SVN:revision}|%{USERNAME:username}|%{SVN_TIMESTAMP:svntimestamp}|%{GREEDYDATA:syslog_message}||%{GREEDYDATA:syslog_message" }
}
}
Ich bin nicht sicher, ob es richtig ist, aber wie immer funktioniert es nicht. Jede Hilfe ist wirklich willkommen
Antwort1
Hier ist eine einfachere Version eines Musters, das Ihnen beim Einstieg helfen könnte:
(?<SVN>[0-9]+)\|%{USERNAME:username}\|(?<SVN_TIMESTAMP>[^\|]+)\|%{GREEDYDATA:syslog_message}
Der Einfachheit halber habe ich keine benannten Muster verwendet und der Zeitstempel ist überhaupt nicht sehr spezifisch, aber das sollte einfacher zu beheben sein.
Wichtige Hinweise:
- Das Pipe-Zeichen ist in diesen Ausdrücken ein logisches ODER und muss maskiert werden.
- wie @tigran anmerkte: Sie benötigen das Pluszeichen für „eine oder mehrere“ Ziffern in der SVN-Revision
- Ihr SVN_TIMESTAMP-Muster ist sehr komplex, scheint aber nicht ganz richtig zu sein. Zumindest müssen Sie die Klammern escapen, um eine Übereinstimmung zu erzielen.
Ich empfehle Ihnen, Ihre Eingabe und mein Muster zu nehmen und es inhttps://grokdebug.herokuapp.com/-- so können Sie es schrittweise entsprechend Ihren tatsächlichen Anforderungen erweitern.