如何将json拆分为Logstash中的多个事件,其中事件是哈希的一部分(唯一)

时间:2017-02-24 20:00:15

标签: json logstash

如果已经提出这个问题我很抱歉,但我无法在任何地方找到它。

在Logstash中我有json输入,如下所示:

{
    common_field: "commonValue",
    events: {
        ID_1: {
            name: "name1",
            other_field: "value1",
            ...
        },
        ID_2: {
            name: "name2",
            other_field: "value2",
            ...
        },
        ID_3: {
            name: "name3",
            other_field: "value3",
            ...
        },
        ID_4: {
            name: "name4",
            other_field: "value4",
            ...
        }
    }
}

logstash为每个“ID”创建单独事件的最佳方法是什么? Logstash不允许我拆分“事件”,我得到一个标签:[0] "_split_type_failure"。任何指导都会非常有帮助!

2 个答案:

答案 0 :(得分:1)

如果ID_1 / ID_2 / ID_3始终相同,则可以使用clone过滤器克隆事件,然后删除克隆上的其他字段。如果他们不是,据我所知,唯一的方法是使用自定义插件。

我最后一次检查(几年前),clone使用的机制(yield)无法用于红宝石过滤器。

要使用克隆,您可以这样做:

clone {
  clones => ["ID_1","ID_2"..,"ID_n"]
}
if [type] == "ID_1" {
  mutate {
    remove_field => ["[events][ID_2]","[events][ID_3]",..."[events][ID_n]"]
    rename => {
        "[events][ID_1][name]" => "name",
        "[events][ID_1][other_field]" => "other_field"
    }
  }
} else if [type] == "ID_2" {
  mutate {
    remove_field => ["[events][ID_1]","[events][ID_3]",..."[events][ID_n]"]
    rename => {
        "[events][ID_2][name]" => "name",
        "[events][ID_2][other_field]" => "other_field"
    }
  }
} ...

答案 1 :(得分:0)

如何将哈希转换为数组,然后拆分数组?

我会做像

这样的事情
ruby { code => "event.set('events_array', event.get('events').to_a) "}
split {field => "events_array"
       target => "new_object"
      }