2016-09-01 10 views
-1

Я пытаюсь внедрить Logstash для регистрации нескольких пользовательских файлов, для которых я должен получить строки, содержащие слова: «из памяти подкачки». Ниже приведено содержание /etc/logstash/conf.d/10-syslog.conf файла, где в я создал custom_error типа фильтра для пользовательских файлов журналы, которые мне нужно войти, чтобы получить нужную строку:grok pattern, чтобы получить строки с определенным словом из logfiles в Logstash

filter { 
    if [type] == "syslog" { 
    grok { 
     match => { "message" => "%{SYSLOGTIMESTAMP:syslog_timestamp} %{SYSLOGHOST:syslog_hostname} %{DATA:syslog_program}(?:\[%{POSINT:syslog_pid}\])?: %{GREEDYDATA:syslog_message}" } 
     add_field => [ "received_at", "%{@timestamp}" ] 
     add_field => [ "received_from", "%{host}" ] 
    } 
    syslog_pri { } 
    date { 
     match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] 
    } 
    } 
    if [type] == "custom_error" { 
    grok { 
     match => { "message" => "Exception java.lang.OutOfMemoryError: requested %{NUMBER:int} bytes for promotion. Out of swap space?" } 
     add_field => [ "received_at", "%{@timestamp}" ] 
     add_field => [ "received_from", "%{host}" ] 
    } 
    date { 
    match => [ "syslog_timestamp", "MMM d HH:mm:ss", "MMM dd HH:mm:ss" ] 
    } 
} 
} 

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

ответ

0

Если я понимаю ваш вопрос, вы можете использовать условный код в своей конфигурации logstash.
В документации приводится описание here.

Так что, если вы хотите конкретно отфильтровать строки, содержащие слово out of swap memory, вы можете использовать:

if ([message] =~/out of swap memory/) { 
    ... 
    only the lines containing "out of swap memory" will go through this part. 
}