шаблон grok для получения строк с определенным словом из файлов журналов в Logstash

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

 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" ]
  }
 }
}

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


person shashivs    schedule 01.09.2016    source источник


Ответы (1)


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

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

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