2014-09-09 3 views
1

Я играл с логсташем и хотел попробовать многострочный фильтр. Я пытаюсь разобрать один файл, который может содержать многострочный контент. Я использую многострочный фильтр, но он не работает так, как должен. У меня есть следующий файл в файле.Многострочный фильтр с logstash не работает, как ожидалось

2014-10-11 10:10:10 xxxx yyyy 
2013-09-12 11:11:11 aaaa bbbb 
2012-01-01 10:10:10 cccc dddd 
2011-10-12 01:01:01 mmmm Nan 

Grok-модель используется

CUSTOMTIME %{YEAR}-%{MONTHNUM}-%{MONTHDAY} %{TIME} 

Я использую следующий файл конфигурации в logstash

input { 
    file{ 
     path => "/Users/akshayanilkapoor/Kumo/logs/akshay" 
     codec => multiline { 
      pattern => "^.*" 
      what => "previous" 
      negate => true 
     } 
    } 
    stdin{ 
     codec => multiline { 
      pattern => "^%{CUSTOMTIME}" 
      what => "previous" 
      negate => true 
     } 
    } 
} 
filter { 
    grok { 
     patterns_dir => "./patterns" 
     match => ["message", "%{CUSTOMTIME:date1} %{GREEDYDATA:lumber-type} %{GREEDYDATA:lumber-desc}"] 
     } 
    } 

output { 
    stdout {codec => rubydebug} 
} 

Когда я копировать вставить данные, приведенные выше, из стандартного ввода , он работает как ожидалось, т.е. отображает вывод с сообщением, содержащим все события в файле. Когда я передаю то же самое с файлом, он выводит другое сообщение для каждой записи в журнале, то есть я получаю 4 разных события журнала (что не то, что я хочу)

Примечание: Я попытался использовать следующие параметры вместе с многострочным,

  1. (? M) многострочный режим в grok, и это тоже никоим образом не помогает.
  2. Также используется фильтр mutate для замены «\ n» на «» и проанализируйте его с помощью grok.

Я думаю, что есть очень глупая ошибка, которую я делаю, или я понимаю, что фильтр неправильно реализован. Любая помощь приветствуется!

ответ

0

Я неправильно понял опцию отрицания многострочного кодека, как я ожидал: p Это конфигурационный файл, который я использовал для работы конфигурации, чтобы он помог кому-то.

input { 
    file{ 
     path => "/Users/akshayanilkapoor/Kumo/logs/akshay" 
     codec => multiline { 
      pattern => "^[0-9]" 
      what => "previous" 
      #negate => true 
     } 
    } 
    stdin{ 
     codec => multiline { 
      pattern => "^[a-z]" 
      what => "previous" 
      negate => "true" 
     } 
    } 
} 

filter { 
    grok { 
     match => ["message", "(?m)%{RSMROLLBACKTIME:date1} %{GREEDYDATA:lumber-type} %{GREEDYDATA:lumber-desc}"] 
    } 
} 

output { 
    stdout {codec => rubydebug} 
} 
Смежные вопросы