Выводит ли данные при использовании многострочного фильтра logstash?

#regex #logging #logstash

#регулярное выражение #ведение журнала #logstash

Вопрос:

Я пытаюсь использовать многострочный для объединения нескольких строк в файле журнала с одним и тем же начальным символом. В моем случае начальным символом является #S #. это будет выглядеть примерно так:

 #S# dsifj sdfojosf sfjosdfoisdjf 
#S# dsfj sdojifoig dfpkgokdfgk 89s7fsjlk sdf
#S# lsdffm dg;;dfgl djfg 930`e`fsd
...
...
...
  

Примечание: случайный символ используется только для имитации содержимого фактического журнала.

Ниже приведено то, что написано для многострочного запуска:

 multiline {
   type => "table_init"
   pattern => "#S#"
   negate => true
   what => "next"
}
  

Я предполагаю, что то, что я написал, объединяет их в одну строку, но мне интересно, выводит ли это строку или мне нужно использовать gork для анализа всей строки перед ее печатью. Любые мысли и вводные данные будут полезны. Спасибо.

Ответ №1:

Если вы пытаетесь сопоставить все строки, которые соответствуют «#S #», то для параметра negate должно быть установлено значение false. Вы используете отрицание, когда хотите получить все строки, которые НЕ соответствуют определенному шаблону.

Что касается вашего фактического вопроса, многострочный выводит все соответствующие строки и помещает их в поле «сообщение», включая символы новой строки (n , и я предполагаю r, если вы также используете Windows, хотя я никогда не проверял). Затем вы можете просмотреть все это сообщение, чтобы получить нужные данные.

Итак, если вы настроили свой вывод следующим образом:

 output { stdout { codec => rubydebug } }
  

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

 "message" = "#S# dsifj sdfojosf sfjosdfoisdjf n#S# dsfj sdojifoig dfpkgokdfgk 89s7fsjlk sdfn#S# lsdffm dg;;dfgl djfg 930`e`fsd
  

если вы правильно настроили многострочный фильтр.

Надеюсь, это поможет!