Мне интересно, что лучше всего подходит для моих фильтров 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" ]
}
}
Тем не менее, он заинтересован в обратной связи. Что здесь считается "лучшей практикой"?