Разбить сообщение Logstash json в полях
Он имеет файл журнала, в котором хранится событие с меткой времени и сообщением json. Например:
timestamp { "foo": 12, "bar": 13}
Я хотел бы разложить ключи (foo и bar) в json part на поля в выводе Logstash.
Я знаю, что я могу установить поле формата в файле фильтра Logstash на json_event, но в этом случае мне нужно включить метку времени в json. Существует также json-фильтр, но он добавляет одно поле с полной структурой данных json вместо использования ключей.
Любые идеи, как это можно сделать?
Ответы
Ответ 1
Попробуйте использовать последнюю версию logstash 1.2.1 и используйте значение кодека для непосредственного анализа событий json.
input {
file {
type => "tweetfile"
path => ["/home/nikhil/temp/feed/*.txt"]
codec => "json"
}
}
filter{
json{
source => "message"
target => "tweet"
}
}
output {
stdout { }
elasticsearch { embedded => true }
}
Ответ 2
Я сделал это со следующей конфигурацией:
filter {
grok {
match => ["message", "\[%{WORD}:%{LOGLEVEL}\] %{TIMESTAMP_ISO8601:tstamp} :: %{GREEDYDATA:msg}"]
}
date {
match => [ "tstamp", "yyyy-MM-dd HH:mm:ss" ]
}
json {
source => "msg"
}
}
Кстати, это конфиг для новой версии 1.2.0.
В версии 1.1.13 вам нужно включить target в json-фильтр, а ссылка для сообщения в grok - это @message.
Ответ 3
Вы можете просто использовать простые фильтры Grok (фильтры/шаблоны стиля регулярных выражений) и назначить сопоставленное значение переменной для упрощения организации, фильтрации и поиск.
Пример:
((?<foo_identifier>(\"foo\"))):((?<foo_variable_value>(\d+,)))
Что-то в этом роде.
Используйте GrokDebugger, чтобы помочь, если вы застряли на синтаксисе, шаблонах и вещах, которые, по вашему мнению, должны быть сопоставлены, но нет.
Надеюсь, что это поможет.
Ответ 4
ваш JSON ошибочен {"foo": 12, "bar" 13}
должен быть:
{"foo": 12, "bar": 13}