Назад | Перейти на главную страницу

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

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

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, но он не работает. Кому-нибудь еще удалось заставить это работать, сопоставив шаблон отступа?

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

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

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