2015-03-26 5 views
-4

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

+0

Возможный дубликат [Как обработать поле сообщения logstash многострочного фильтра?] (Https://stackoverflow.com/questions/22172879/how-to -process-logstash-multiline-filters-message-field) –

ответ

3

Вы должны смотреть на многострочного фильтра - http://logstash.net/docs/1.4.1/filters/multiline

я сделал что-то подобное с бревнами MariaDB, которые могут быть многострочным - регулярные выражения будут разными, но посмотреть на http://simonhanmer.co.uk/processing-mysql-mariadb-galera-logs-for-logstash/ для некоторых идей

ОК, извлечение потока довольно просто, поскольку оно ограничено [], но запрос немного сложнее. Если это всегда предшествует линии, показанной вы могли бы использовать что-то вроде этого

input { 
    pipe { 
     command => 'type C:\Users\MEGDICHE\Downloads\default.log' 
    } 
} 

filter{ 
    multiline { 
     pattern => "^%{MONTH} %{MONTHDAY}" 
    negate => true 
    what => "previous" 
    } 

    grok { 
     match => [ 'message', "(?m)^%{MONTH} %{MONTHDAY}.*\[%{GREEDYDATA:thread}\]:%{GREEDYDATA:rest_of_message}" ] 
    } 

    if [rest_of_message] =~ /select/ { 
     grok { 
      match => [ 'message', '(?m).*\nThe query before.*\n%{GREEDYDATA:query}$' ] 
     } 
    } 

    mutate { 
     remove_field => [ 'rest_of_message'] 
    } 
} 

output { 
    elasticsearch { host => localhost } 
    stdout { codec => rubydebug } 
} 
+0

спасибо SimonH, пожалуйста, у вас есть идея по этому фильтру case { multiline { type => "somefiletype" pattern => "\\ $"/* this one i wana замените его на «:» */ what => «next» } – MEGDICHE007

+0

в приведенных выше примерах, ожидаете ли вы, что последние две строки будут записаны в последнюю строку с меткой времени? Было бы полезно, если бы вы могли привести пример того, что вы ожидаете, учитывая приведенные выше записи журнала. – SimonH

+0

да, потому что последние три строки - одна запись в журнале. Я хочу извлечь поток (пример default- [DashBoard Thread]) и запрос (выберите счетчик (*) из epool) – MEGDICHE007

Смежные вопросы