如何在 logstash 中使用嵌套的 Json 字段作为 elasticsearch 文档
how to use nested Json field as elasticsearch doc in logstash
说事件是这样的:
{
"name": "xxx",
"data": {
"a": xxx
}
}
使用 logstash,如何仅使用内部 data
字段作为文档源发送到 elasticsearch,例如:
{
"a": xxx
}
任何回复,我们将不胜感激!
尝试使用 json
过滤器
filter {
json {
source => "data"
}
}
但似乎该事件已被解析为 json,终端仅打印此错误消息:
Error parsing json {:source=>"data", :raw=>{"a"=>xxx}, :exception=>java.lang.ClassCastException: org.jruby.RubyHash cannot be cast to org.jruby.RubyIO}
仅供参考,找到了有效的答案
https://discuss.elastic.co/t/move-subarrays-to-document-root/143876
只需使用 ruby
代码将嵌套字段移动到文档根目录,remove
所有其他字段
ruby {
code => 'event.get("data").each { | k, v| event.set(k, v) }'
}
mutate {
remove_field => [ "name", "data" ]
}
说事件是这样的:
{
"name": "xxx",
"data": {
"a": xxx
}
}
使用 logstash,如何仅使用内部 data
字段作为文档源发送到 elasticsearch,例如:
{
"a": xxx
}
任何回复,我们将不胜感激!
尝试使用 json
过滤器
filter {
json {
source => "data"
}
}
但似乎该事件已被解析为 json,终端仅打印此错误消息:
Error parsing json {:source=>"data", :raw=>{"a"=>xxx}, :exception=>java.lang.ClassCastException: org.jruby.RubyHash cannot be cast to org.jruby.RubyIO}
仅供参考,找到了有效的答案 https://discuss.elastic.co/t/move-subarrays-to-document-root/143876
只需使用 ruby
代码将嵌套字段移动到文档根目录,remove
所有其他字段
ruby {
code => 'event.get("data").each { | k, v| event.set(k, v) }'
}
mutate {
remove_field => [ "name", "data" ]
}