Как работать с несоответствующими фильтрами Logstash Grok
Мне интересно, какой лучший подход использовать с моими фильтрами Logstash Grok. У меня есть несколько фильтров, которые предназначены для определенных записей журнала, и не будут применяться ко всем записям. Те, которые не применяются, всегда генерируют теги _grokparsefailure. Например, у меня есть один фильтр grok для каждой записи в журнале, и он работает нормально. Тогда у меня есть еще один фильтр для сообщений об ошибках с трассировками. Фильтр трассировки генерирует ошибку grokparsefailure для каждой записи журнала, которая не имеет трассировки.
Я бы предпочел, чтобы оно просто передавало правило, если совпадения не было, вместо добавления тега parsefailure. Я использую тег parsefailure, чтобы найти вещи, которые не анализируются должным образом, а не вещи, которые просто не соответствуют определенному фильтру. Может быть, это просто номенклатура "сбой разбора", которая получает меня. Для меня это означает, что с фильтром что-то не так (например, плохо отформатировано), а не то, что он не совпадает.
Итак, вопрос в том, как мне справиться с этим?
Сделать шаблон фильтра необязательным, используя?
(ab) использовать опцию tag_on_failure, задав для нее значение []
сделать фильтр условным, используя что-то вроде «if traceback in message»
что-то еще я не рассматриваю?
Заранее спасибо.
РЕДАКТИРОВАТЬ
Я взял путь добавления условия вокруг фильтра:
if [message] =~ /took\s\d+/ {
grok {
patterns_dir => "/etc/logstash/patterns"
match => ["message", "took\s+(?<servicetime>[\d\.]+)"]
add_tag => [ "stats", "servicetime" ]
}
}
Тем не менее, все еще заинтересованы в обратной связи. Что здесь считается «лучшей практикой»?