Пользовательский шаблон фильтра logstash grok не работает

У меня есть файл журнала (http://codepad.org/vAMFhhR2), и я хочу извлечь конкретное число из него (строка 18). Я написал собственный шаблон фильтра Grok, протестировал его на http://grokdebug.herokuapp.com/, он отлично работает и извлекает желаемое значение.

вот как выглядит logstash.conf:

input {
    tcp {
        port => 5000
    }
}

filter {
    grok{
         match => [ "message", "(?<scraped>(?<='item_scraped_count': ).*(?=,))" ]
    }
}

output {
    elasticsearch {
        hosts => "elasticsearch:9200"
    }
}

но он не соответствует ни одной записи из того же журнала на Кибане

Мысли?


person IbrahimSharaf    schedule 11.04.2017    source источник
comment
Чего вы пытаетесь достичь с помощью этого просмотра вперед и назад? Вы пытаетесь отбросить несоответствующие строки?   -  person Antoine Cotten    schedule 11.04.2017


Ответы (1)


Ваше регулярное выражение может быть правильным, но просмотр вперед и назад («? =» И «?‹ = ») Не являются хорошим выбором в этом контексте. Вместо этого вы можете использовать более простой фильтр:

match => [ "message", "'item_scraped_count': %{NUMBER:scraped}" ]

Это извлечет число после 'item_scraped_count': в виде поля с именем scraped, используя Grok встроенный шаблон.

Результат в Кибане:

{
  "_index": "logstash-2017.04.11",
  "_type": "logs",
  "_source": {
    "@timestamp": "2017-04-11T20:02:13.194Z",
    "scraped": "22",
    (...)
  }
}

Если я могу предложить другое улучшение: поскольку ваше сообщение распределено по нескольким строкам, вы можете легко объединить его, используя входной кодек multiline:

input {
    tcp {
        port => 5000
        codec => multiline {
            pattern => "^(\s|{')"
            what => "previous"
        }
    }
}

Это объединит все строки, начинающиеся либо с пробела, либо с {' с предыдущей.

person Antoine Cotten    schedule 11.04.2017
comment
Это сработало, спасибо. откуда я могу получить больше знаний о кодировании фильтров logstash? - person IbrahimSharaf; 12.04.2017
comment
Официальная документация неплохая, проверьте раздел Получение помощи: elastic.co/guide/en/logstash/current/plugins-filters-grok.html. - person Antoine Cotten; 12.04.2017
comment
Что касается многострочного фильтра, я добавил его, но ожидал найти весь файл журнала в виде одного сообщения на Kibana, но он был разделен на 2 сообщения (codepad.org/gNGvbi4j), (codepad.org/qvRjg925) - person IbrahimSharaf; 12.04.2017
comment
Этого не ожидается, похоже, что после GET есть разрыв строки. - person Antoine Cotten; 12.04.2017