使用 Logstash 过滤 MongoDB 文档的深层字段
Filter MongoDB document's deep fields using Logstash
我正在尝试重命名我的 MongoDB 文档中的一些深层字段,然后再使用 Logstash 将它们上传到 Elastic。
例如:我的 MongoDB 文档如下所示:
name: "firstDoc",
infoArray:
[
{infoName: "i", elements:{e1: "e1", e2: "e2"}},
{infoName: "j", elements:{e3: "e3", e4: "e4"}}
]
我能够像这样访问 logstash 中的 "name" 字段:
mutate { add_field => {"[otherDoc][name]" => "%{[document][name]}"} }
但我无法访问 infoArray 中的字段,我已尝试重命名:
mutate { rename => {"[document][infoArray][elements][e1]" => "[otherDoc][e1]"} }
我也尝试过将其添加为新字段:
mutate { add_field => {"[otherDoc][e1]" => "%{[document][infoArray][elements][e1]}"} }
但还是不行。
有什么方法可以访问深层字段吗?
我已经找到解决方法,如下:
mutate { rename => {"[document][infoArray][0][elements][e1]" => "[otherDoc][e1]"} }
或
mutate { add_field => {"[otherDoc][e1]" => "%{[document][infoArray][0][elements][e1]}"} }
infoArray的索引需要在Logstash中指定。
我正在尝试重命名我的 MongoDB 文档中的一些深层字段,然后再使用 Logstash 将它们上传到 Elastic。
例如:我的 MongoDB 文档如下所示:
name: "firstDoc",
infoArray:
[
{infoName: "i", elements:{e1: "e1", e2: "e2"}},
{infoName: "j", elements:{e3: "e3", e4: "e4"}}
]
我能够像这样访问 logstash 中的 "name" 字段:
mutate { add_field => {"[otherDoc][name]" => "%{[document][name]}"} }
但我无法访问 infoArray 中的字段,我已尝试重命名:
mutate { rename => {"[document][infoArray][elements][e1]" => "[otherDoc][e1]"} }
我也尝试过将其添加为新字段:
mutate { add_field => {"[otherDoc][e1]" => "%{[document][infoArray][elements][e1]}"} }
但还是不行。
有什么方法可以访问深层字段吗?
我已经找到解决方法,如下:
mutate { rename => {"[document][infoArray][0][elements][e1]" => "[otherDoc][e1]"} }
或
mutate { add_field => {"[otherDoc][e1]" => "%{[document][infoArray][0][elements][e1]}"} }
infoArray的索引需要在Logstash中指定。