Как работать с несоответствующими фильтрами 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" ]
        }
    }

Тем не менее, все еще заинтересованы в обратной связи. Что здесь считается «лучшей практикой»?

Ответы на вопрос(4)

Ваш ответ на вопрос