Шаблон Grok для журналов tomcat дает ошибку компиляции в Grok Debugger

Я пытаюсь настроить ELK для приложения Java. Журналы tomcat создаются с использованием log4j. Чтобы написать тестовый шаблон, я использую Grok Debugger. Но в отладчике всегда показывает

ОШИБКА компиляции

Мой образец журнала:

YYYY-MM-DD HH:MM:SS,SSS INFO : [so-me-uni-que-id] com.xx.xx.xx.xx.xx - log message here

Мой фильтр grok:

filter {   if [type] == "tomcat" {     grok {       match => { "message" => "%{TOMCATLOG}" }     }     date {       match => [ "timestamp", "yyyy-MM-dd HH:mm:ss,SSS" ]     } } }

Моя выкройка:

TOMCATLOG %{TOMCAT_DATESTAMP:timestamp} \| %{LOGLEVEL:level} \| %{UNIQUEID:uniqueid}\| %{JAVACLASS:class} - %{JAVALOGMESSAGE:logmessage}

person mathakoot    schedule 09.07.2015    source источник
comment
Почему в вашем шаблоне есть экранированные каналы, если во входных данных нет каналов?   -  person Alain Collins    schedule 09.07.2015
comment
Я новичок в этом. Итак, я прочитал в каком-то блоге; где-то но ссылку вспомнить не могу. Полагаю, я не совсем понимаю шаблоны письма.   -  person mathakoot    schedule 09.07.2015
comment
Это большая тема, но вы можете начать здесь: svops.com/blog/ Introduction-to-logstash-grok-patterns   -  person Alain Collins    schedule 10.07.2015
comment
Я боялся, что получу резкую критику за такой простой вопрос. Но подобные ответы / комментарии действительно обнадеживают. Спасибо @AlainCollins.   -  person mathakoot    schedule 10.07.2015


Ответы (2)


Основная проблема в том, что ваш шаблон не соответствует вашему вводу. Посмотрите на начало:

YYYY-MM-DD HH:MM:SS,SSS INFO : [so-me-uni-que-id]

%{TOMCAT_DATESTAMP:timestamp} \| %{LOGLEVEL:level} \| %{UNIQUEID:uniqueid}\|

В вашем шаблоне есть экранированные каналы ("|"), но вход не использует их.

Я также не вижу, чтобы TOMCAT_DATESTAMP находится в шаблонах по умолчанию, но, возможно, он где-то похоронен.

Начните с левой стороны, сопоставляя по одному в отладчике.

%{TIMESTAMP_ISO8601} %{WORD:level} : \[%{GREEDYDATA:uniqueid}\]

Затем продолжайте продвигаться вперед, добавляя больше деталей в свой узор. Обратите внимание, что литералы (":" и экранированный "[") становятся частью вашего шаблона.

Удачи!

person Alain Collins    schedule 09.07.2015
comment
Между тем, когда вы комментировали вопросы, я нахожу больше в сети, методом проб и ошибок, как вы сказали: по одной части за раз, и я смогу это сделать. Успевать!! Итак, у меня есть этот шаблон, работающий в отладчике Grok: Шаблон:% {TOMCAT_DATESTAMP: timestamp}% {LOGLEVEL: level}:% {GREEDYDATA: coorelationid}% {JAVACLASS: class} -% {GREEDYDATA: logmessage} Пользовательский шаблон: TOMCAT_DATESTAMP% {YEAR: year} -% {MONTHNUM: month} -% {MONTHDAY: day}% {HOUR: hour}:?% {MINUTE: minute} (? ::?% {SECOND: second}) - person mathakoot; 10.07.2015
comment
Я вижу, что вы использовали% {WORD: level} для уровня журнала. Просто для информации, есть шаблон Grok logstash по умолчанию. Вы можете проверить это здесь. - person mathakoot; 10.07.2015
comment
TMTOWTDI! С разделителями: и [мне не требовалось дополнительной сложности. - person Alain Collins; 10.07.2015

У меня тоже были проблемы с Tomcat. Также не нужно забывать, что шаблон %LOGLEVEL не содержит всех уровней для Tomcat (CONFIG, FINE, FINER, FINEST). Возможно

TOMCAT_LOGLEVEL ([A-a]lert|ALERT|[T|t]race|TRACE|[D|d]ebug|DEBUG|[N|n]otice|NOTICE|[I|i]nfo|INFO|[W|w]arn?(?:ing)?|WARN?(?:ING)?|[E|e]rr?(?:or)?|ERR?(?:OR)?|[C|c]rit?(?:ical)?|CRIT?(?:ICAL)?|[F|f]atal|FATAL|[S|s]evere|SEVERE|EMERG(?:ENCY)?|[Ee]merg(?:ency)?|CONFIG|FINE|FINER|FINEST)

Я добавил все шаблоны Grok в одном месте (Nginx, Tomcat, Spring): https://gist.github.com/petrov9/4740c61459a5dcedcef2f27c7c2900fd

Надеюсь, это сэкономит ваше время

person Anton    schedule 02.06.2021