Logstash создать новый JSON из существующего JSON - PullRequest
0 голосов
/ 25 октября 2018

Я получаю данные в этом формате:

{
    "a": "1",
    "b": "2"
}

Я хочу изменить их на:

{
    data: {
        "a": "1",
        "b": "2"
    }
}

Я могу изменить их, используя фильтр mutate:

mutate {
     rename => {
        "[a]" => "[data][a]"
        "[b]" => "[data][b]"
    }
}

Но здесь я должен переименовать каждое поле по отдельности.

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

rename => {"[entite_message]" => "[data][entire_message]"}

1 Ответ

0 голосов
/ 29 октября 2018

Вы можете использовать API событий и фильтр рубина для достижения этой цели.

Добавление приведенного ниже блока рубина должно помочь.

ruby {
    code => '
        # Move everything to data
        event.set("data", event.to_hash)

        # Remove fields other than data
        fields = event.to_hash.keys
        fields.each{|field|
            if (field != "data")
                event.remove(field)
            end
        }
    '
}
...