Многострочный кодек Logstash для стековых трассировок Java

Документация logstash указывает, что вы можете свернуть несколько строк с отступом в записи журнала трассировки стека Java в одно событие, используя многострочный кодек:

https://www.elastic.co/guide/en/logstash/current/plugins-codecs-multiline.html

input {
   syslog {
       type => syslog
       port => 8514
       codec => multiline {
            pattern => "^\s"
            what => "previous"
       }
  }
}

Это основано на том, что logstash находит отступ в начале строки и комбинирует его с предыдущей строкой.

Однако документация logstash - единственное место, где я могу найти ссылку на это. Общее сообщество пользователей, кажется, использует сложные фильтры Grok для достижения того же эффекта.

Я пробовал базовый шаблон отступов, предоставленный logstash, но он не работает. Кому-нибудь еще удалось заставить это работать, сопоставляя образец отступа?

1 ответ

Решение

Да хоть и не с syslog {} вход. Я сделал это с file {} вход и журналы Tomcat. Если трассировки стека поступают в системный журнал с новым событием в каждой строке, и при этом все еще имеют обычный префикс системного журнала для метки даты и т. Д., Их повторная сборка в унитарную стековую печать становится намного сложнее. Это все еще можно сделать, но требует гораздо более широких фильтров.

  1. Входной кодек не является многострочным; в случае события на строку многострочный кодек не может справиться с этим.
  2. Фильтр Grok для разделения сообщения системного журнала на части, принимая часть SYSLOGMESSAGE в свое собственное поле.
  3. С использованием multiline {} фильтр в поле SYSLOGMESSAGE для повторной сборки вашего стека дамп.
  4. Используйте один и только один фильтр-работник (-w флаг), это единственный способ убедиться, что собрана вся трассировка стека.

Если это вообще возможно, лучше использовать file {} кодек файла, в который стекаются следы стека, и используйте метод отступа, который вы уже нашли.

Другие вопросы по тегам