Фильтр Grok не работает, хотя он работает в отладчике Grok

Я использую logstash-1.4.0 с elasticsearch 1.3.4 и kibana 3.1.1 (я знаю, что устарел, это лучшее, что я могу сделать прямо сейчас).

Пример журнала:

2016-05-31 16:05:33 RequestManager [INFO] Ручной флаг LOLROFLin TRALALA 123456 был изменен на true

Мой фильтр grok:

filter {
    grok {
        match => { "message" => "%{DATESTAMP:timestamp} %{WORD:clazz} %{NOTSPACE:level} %{GREEDYDATA:content}"}
    }

    if (!([stack_trace])) and (!([clazz] == "RequestAsset")) {
        drop {}
    }
}

Мои вопросы:

  1. Почему я не вижу полей гроков в кибане? Я вижу только поля по умолчанию, но не свои. Grok Debugger показывает успех, но кибана не работает.

  2. Моя цель - удалить любое сообщение журнала, которое не имеет трассировки стека ИЛИ не из класса (называемого clazz в моем фильтре Grok) "RequestAsset". Должно ли это сработать? Могу ли я использовать поля, созданные фильтром Grok, в отдельном фильтре if?

РЕДАКТИРОВАТЬ: Я понял, что пошло не так, я использовал плагин log4j, который уже разделяет журнал на его содержимое, а сообщение поля уже было просто самим сообщением.


person user1137582    schedule 31.05.2016    source источник


Ответы (2)


Я протестировал ваш фильтр Grok в этом отладчике Grok, и он не прошел. Так что я его переписал.

Вот правильный фильтр Grok.

filter {
grok {
    match => { "message" => "%{TIMESTAMP_ISO8601:timestamp} %{WORD:clazz} %{NOTSPACE:level} %{GREEDYDATA:content}"}
}

if (!([stack_trace])) and (!([clazz] == "RequestAsset")) {
    drop {}
}

TIMESTAMP_ISO8601 => %{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE}?

Если вы видите "_grokparsefailure" в Kibana, значит, ваш фильтр Grok не работает.

Отвечая на второй вопрос, не следует ли использовать оператор ИЛИ?

person Jeroen Vandevelde    schedule 31.05.2016
comment
Я не вижу разницы между ними? Я также попробовал их оба в упомянутом вами отладчике grok, но оба не сработали. Я использовал этот, и оба работают: grokdebug.herokuapp.com - person user1137582; 01.06.2016
comment
Извините, я вставил неправильное выражение Grok. Вы должны проверить правку. - person Jeroen Vandevelde; 01.06.2016

Я понял, что пошло не так, я использовал плагин log4j, который уже разделяет журнал на его содержимое, а поле message уже было просто самим сообщением.

person user1137582    schedule 01.06.2016