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

如何在Logstash中将json拆分为多个事件,其中事件是散列(唯一)的一部分,json,logstash,Json,Logstash,如果已经有人问过这个问题,我很抱歉,但是我在任何地方都找不到 在Logstash中,我有如下json输入: { common_field: "commonValue", events: { ID_1: { name: "name1", other_field: "value1", ... }, ID_2: { name: "name2",

如果已经有人问过这个问题,我很抱歉,但是我在任何地方都找不到

在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]“\u split\u type\u failure”
。任何指导都会非常有用

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

上次我检查时(几年前),ruby过滤器无法使用
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"
    }
  }
} ...

如何将散列转换为数组,然后拆分数组

我会做类似的事情

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

非常感谢你!我也尝试使用ruby过滤器,但它不起作用。我将尝试克隆过滤器!再次感谢你的帮助。因此,当我使用克隆过滤器时,我生成的每个克隆事件都有一个字段“events”,其中包含所有ID及其字段。如何从“事件”字段中删除我不想要的数据,并将我想要的数据放入每个事件各自的字段中?一个快速跟进问题。如果ID不总是相同的,那么动态获取并克隆它们的最佳方法是什么?我使用ruby将它们放入数组字段,但克隆过滤器不允许我将该数组用作克隆的输入,例如:
clones=>[arrayField]
。不会创建新的克隆。我使用了错误的语法吗?在我的回答中,我把“如果你知道ID是什么”。。。我不知道有什么方法可以动态地将这样的东西传递给克隆人。。。我认为这是不可能的,因为克隆插件在启动时从配置文件中获取克隆数组。如果您想基于字段动态克隆,您可能需要为itI编写您自己的插件,然后分叉克隆筛选器并进行动态克隆所需的更改:--您将使用
clone{clone\u array\u name=>“clones”}
其中
克隆
是包含要创建的克隆列表的事件字段