如何在 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" ]
  }