Шаблон Grok для Logstash с использованием запроса HTTP POST в качестве входных данных

Я использую Logstash для обработки журналов и сохранения их в Elastic Search. Я использую http в качестве подключаемого модуля ввода для моего журнала регистрации.

Мой HTTP-запрос на публикацию:

$http.post(url, {type: 'reference error', message: 'y is not defined'});

Я хотел бы сохранить тип и ключ сообщения как разные поля в эластичном поиске.

В настоящее время все данные записи хранятся в одном поле, например:

"message": "{\" type \ ": \" ReferenceError \ ", \" message \ ": \" y не определено \ "}"

Я думаю, что это можно сделать с помощью фильтра grok, но я не смог найти способ сделать это.

Любая помощь высоко ценится. Спасибо.


person JSNinja    schedule 20.07.2015    source источник


Ответы (2)


Если вы используете json-кодек, информация должны быть автоматически разбиты на поля.

person Alain Collins    schedule 20.07.2015
comment
Спасибо @Alain, я использовал кодек JSON, и он работал как шарм. - person JSNinja; 21.07.2015

РЕДАКТИРОВАТЬ: Как упоминал Ален, это лучший способ использовать кодек json, который можно установить непосредственно в вашем плагине ввода http. Если по какой-то причине это невозможно, вы можете использовать фильтр Grok.

Если я вас правильно понял, ваше входящее событие выглядит так:

{"type": "reference error", "message": "y is not defined"}

Тогда соответствующий шаблон grok будет выглядеть так:

{"type": %{QUOTEDSTRING:http_type}, "message": %{QUOTEDSTRING:http_message}}

В вашей конфигурации logstash:

grok {
    match => [ "message", "{\"type\": %{QUOTEDSTRING:http_type}, \"message\": %{QUOTEDSTRING:http_message}}" ]
}

Тогда результат будет иметь два поля http_type и http_message.

person hurb    schedule 20.07.2015