gpt4 book ai didi

elasticsearch - Logstash - 如何在没有目标的情况下使用拆分过滤器拆分数组?

转载 作者:行者123 更新时间:2023-11-29 02:52:11 24 4
gpt4 key购买 nike

我正在尝试将 JSON 数组拆分为多个事件。这是一个示例输入:

{"results" : [{"id": "a1", "name": "hello"}, {"id": "a2", "name": "logstash"}]}

这是我的过滤器和输出配置:

filter {
split {
field => "results"
}
}
stdout {
codec => "rubydebug"
}

这会产生 2 个事件,每个事件对应数组中的每个 JSON。它接近我要找的东西:

{                                              
"results" => {
"id" => "a1",
"name" => "hello"
},
"@version" => "1",
"@timestamp" => "2015-05-30T18:33:21.527Z",
"host" => "laptop",
}
{
"results" => {
"id" => "a2",
"name" => "logstash"
},
"@version" => "1",
"@timestamp" => "2015-05-30T18:33:21.527Z",
"host" => "laptop",
}

问题是嵌套的“结果”部分。 “结果”是目标参数的默认值。有没有一种方法可以在不生成嵌套 JSON 的情况下使用拆分过滤器,并得到如下内容:

{                                                                     
"id" => "a1",
"name" => "hello"
"@version" => "1",
"@timestamp" => "2015-05-30T18:33:21.527Z",
"host" => "laptop",
}
{
"id" => "a2",
"name" => "logstash"
"@version" => "1",
"@timestamp" => "2015-05-30T18:33:21.527Z",
"host" => "laptop",
}

目的是将其提供给 ElasticSearch 输出,每个事件都是一个 document_id => "id"的文档。欢迎任何好的解决方案!

最佳答案

如果您知道所有字段的内容(看起来您知道),您可以简单地重命名这些字段:

    mutate {
rename => [
"[results][id]", "id",
"[results][name]", "name"
]
remove_field => "results"
}

如果您不知道所有字段是什么,您可以编写一个 ruby 代码过滤器来执行 event['results'].each... 并从结果的子字段中创建了新字段。

关于elasticsearch - Logstash - 如何在没有目标的情况下使用拆分过滤器拆分数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30558535/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com