2013-11-08 2 views
1

В последнее время мы собрали все журналы журналов java с помощью logstash.Конфигурация многострочного фильтра Logstash и исключения Java

Конфигурация по умолчанию log4j работает отлично, но для исключений и SQL запросов мы используем:

http://logstash.net/docs/1.2.2/filters/multiline

filter { 
multiline { 
    type => "somefiletype" 
    pattern => "^\s" 
    what => "previous" 
} 
} 

, но это не работает на 100% точно, некоторые исключения/SQLs не имеет нужный формат.

можно было бы настроить многострочный плагин в том, что:

Если есть не на отметку времени самого начала строки это многострочное сообщение журнала?

ответ

1

я, наконец, имел успех с разбором многострочного сообщения журнала моих файлов журнал. Обратите внимание, что ваши сообщения журнала могут быть немного разными, для чего требуется изменение шаблона grok. Основное исправление заключалось в том, чтобы разместить многострочный фильтр перед фильтром grok и сделать капли {} между ним и фильтром grok. Важно: используйте Grok Debugger для отладки ваших фильтров grok.

input { 
    stdin { 
    type => "log4j" 
    } 
} 

filter { 
    if [type] == "log4j" { 

    multiline { 
     pattern => "^[\d]{4}\-[\d]{2}\-[\d]{2} " 
     negate => true 
     what => previous 
    } 
    if "_grokparsefailure" in [tags] { 
     drop { } 
    } 
    grok { 
     match => { 
     "message" => "(?<logdate>[\d]{4}\-[\d]{2}\-[\d]{2} [\d]{2}:[\d]{2}:[\d]{2},[\d]{3})%{SPACE}%{NUMBER:unknown1}%{SPACE}%{LOGLEVEL:severity}%{SPACE}\[(?<logger>[^\]]+)\]%{SPACE}\((?<thread>[^\)]+)\)%{SPACE}%{GREEDYDATA:message}" 
     } 
     overwrite => [ "message" ] 
    } 

    if !("_grokparsefailure" in [tags]) { 
     date { 
     match => [ "logdate", "YYYY-MM-dd HH:mm:ss,SSS"] 
     } 
    } 
    } 
} 


output { 
    # Print each event to stdout. 
    stdout { 
    codec => json 
    } 
} 
Смежные вопросы