Фильтр удаления Logstash для события

#logstash

#logstash

Вопрос:

В моем файле журнала у меня есть записи, подобные следующим:

 2014-06-25 12:36:18,176 [10] ((null)) INFO  [s=(null)] [u=(null)] Hello from Serilog, running as "David"! [Program] 
2014-06-25 12:36:18,207 [10] ((null)) WARN  [s=(null)] [u=(null)] =======MyOwnLogger====== Hello from log4net, running as David! [MyOwnLogger] 
2014-06-25 12:36:18,209 [10] ((null)) ERROR [s=(null)] [u=(null)] =======MyOwnLogger====== Hello from log4net, running as David! [MyOwnLogger] 
 

которые имеют информацию об уровне журнала, ПРЕДУПРЕЖДАЮТ и ОШИБКА соответственно.

Что я хотел бы сделать, так это выводить в Elasticsearch только те записи, которые имеют уровень ОШИБОК. Вот мой файл конфигурации Logstash:

 input {
    file {
        path => "Somepath/*.log"
    }
}

# This filter doesn't work
filter {
  if [loglevel] != "error" { 
    drop { } 
  }
}

output {
    elasticsearch { host => localhost }
    stdout {}
}
 

Фактически, в настоящее время в Elasticsearch ничего не отправляется. Я знаю, что это связано с фильтром, потому что, если его там нет, все записи отправляются в Elastisearch.

Комментарии:

1. где ваш grok фильтр для анализа записей?

2. @Alcanzar: Как новичок во всем этом, я следовал инструкциям по logstash.net/docs/1.4.2/filters/drop . Существует фильтр удаления, и я не пытаюсь использовать фильтр grok. Я просто не знаю, как его правильно использовать.

3. Взгляните на документы для grok и определите шаблон, который будет соответствовать вашим записям ( grokdebug.herokuapp.com это сайт, который может помочь вам протестировать это).

Ответ №1:

Попробуйте этот фильтр grok. Это работает у меня с вашими журналами

 filter {
    grok {
            match => ["message","%{TIMESTAMP_ISO8601:logtime} [%{NUMBER}] ((%{WORD})) %{WORD:loglevel} %{GREEDYDATA:other}"]
    }

    if [loglevel]!= "ERROR" {
            drop {}
    }
}
 

Во-первых, вам нужно проверить уровень журнала, затем просто вы можете использовать поле, чтобы выполнить условие if else и решить, удалять или нет.