Узор Logstash Grok

Узор Logstash Grok

Прежде всего, я прошу прощения за это, я довольно плох в регулярных выражениях и пытаюсь написать собственный шаблон (так как я не могу найти что-то в существующем шаблоне Grok или, может быть, я что-то упускаю) для разбора журналов SVN, которые имеют формат

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

Итак, это в формате

$REVISION:$USER ID:$DATE:$CHECKED IN MESSAGE:$FILE CHECKED IN 

Поэтому я написала некую индивидуальную выкройку

SVN [r0-9]
SVN_TIMESTAMP %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?  (%{DAY}, %{MONTHDAY} %{MONTH} %{YEAR})

и мой logstash-conf будет выглядеть так для раздела фильтра

filter {
  grok {
  match => { "message" => "%{SVN:revision}|%{USERNAME:username}|%{SVN_TIMESTAMP:svntimestamp}|%{GREEDYDATA:syslog_message}||%{GREEDYDATA:syslog_message" }
}

}

Я не уверен, что это правильно, но, как обычно, это не работает. Любая помощь будет очень кстати.

решение1

Вот более простая версия шаблона, которая может помочь вам начать:

(?<SVN>[0-9]+)\|%{USERNAME:username}\|(?<SVN_TIMESTAMP>[^\|]+)\|%{GREEDYDATA:syslog_message}

Для простоты я не использовал именованные шаблоны, а временная метка вообще не очень конкретна, но это должно быть проще исправить.

Важные моменты, на которые следует обратить внимание:

  • символ вертикальной черты является логическим ИЛИ в этих выражениях, его необходимо экранировать
  • как указал @tigran: вам нужен символ плюс для «одной или более» цифр в ревизии SVN
  • Ваш шаблон SVN_TIMESTAMP очень сложный, но не кажется правильным. Как минимум, вам нужно экранировать скобки, чтобы соответствовать.

Я рекомендовал вам взять ваши данные и мой шаблон и поместить их вhttps://grokdebug.herokuapp.com/— это позволит вам постепенно усовершенствовать его до того, что вам действительно нужно.

Связанный контент