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

#logstash #logstash-grok #logstash-filter

#logstash #logstash-grok #logstash-фильтр

Вопрос:

У меня есть фильтр LogStash, я хотел бы знать, какие события в моих файлах журналов были удалены, поскольку я не вижу их в выходном файле logstash. Как это сделать?

Мой фильтр выглядит следующим образом:

 filter {
  grok {
    patterns_dir => "C:logstash-7.4.2patterns"
    match => { "message" => "^[%{TIMESTAMP_ISO8601:timestamp}][%{LOGLEVEL:level}][%{TThread:thread}][%{JAVACLASS:class}] %{GREEDYDATA:msg}" }
  }
  if "_grokparsefailure" in [tags] {
    drop{}
  }
  
  

}

Ответ №1:

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

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

Вы можете использовать что-то вроде следующей конфигурации.

 output {
  if "_grokparsefailure" in [tags] {
    output to store failed events
  }
  if "_grokparsefailure" not in [tags] {
    normal output for the other events
  }
}
  

Вы также можете запустить logstash с уровнем журнала, установленным на debug, но он будет регистрировать много материала, и в вашем случае это не лучший способ продолжить.

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

1. Ах, я не знал, что вы можете получить доступ к состоянию grok вне области действия фильтра. Попробую это.

2. Тег _grokparsefailure применяется по умолчанию grok фильтром, когда он не может соответствовать сообщению, вы также можете изменить этот тег .