Логсташ Грок Узор
Прежде всего, я извиняюсь за это, я довольно плох в регулярном выражении и пытаюсь написать собственный шаблон (так как я не могу найти что-то в существующем шаблоне 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/ - это позволит вам постепенно улучшить его до того, что вам действительно нужно.