首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何删除logstash中的动态mongodb oid?

如何删除logstash中的动态mongodb oid?
EN

Stack Overflow用户
提问于 2020-12-27 16:05:52
回答 1查看 111关注 0票数 1

Mongodb有两种类型的$oid引用-

类型1-

代码语言:javascript
复制
//MongoDB
city_id : "5fe3206428bf745876649fd3"

//Kafka Message
city_id : {
    "$oid": "5fe3206428bf745876649fd3"
}

类型2-

代码语言:javascript
复制
//MongoDB
city_ids : ["5fe3206428bf745876649fd3","5fe3206428bf745876649fd3","5fe3206428bf745876649fd3"]

//Kafka Message
city_ids : [
  {
    "$oid": "5fe3206428bf745876649fd3"
  },
  {
    "$oid": "5fe3206428bf745876649fd3"
  },
  {
    "$oid": "5fe3206428bf745876649fd3"
  }
]

如何在logstash中处理这两种类型,以便获得elasticsearch的确切数据结构,因为它保存在MongoDB中。

代码语言:javascript
复制
input {
  kafka {
        bootstrap_servers => "localhost:9092"
        decorate_events => true
        topics => ["users","organisations","cities"]
  }
}
filter { 
    json {
        source => "message"
        target => "json_payload"
    }

    json {
        source => "[json_payload][payload]"
        target => "payload"
    }
    
    mutate {
        rename => { "[payload]" => "document"}
        remove_field => ["message","json_payload","payload"]
        add_field => {
          "[es_index]" => "%{[@metadata][kafka][topic]}" 
          "[mongo_id]" => "%{[document][_id][$oid]}"
        }
    }
}
output {
    elasticsearch {
        hosts => ["localhost:9200"]
        index => "%{es_index}"
        document_id => "%{mongo_id}"
    }
    stdout {
      codec =>
        rubydebug {
            metadata => true
        }
    }
}

这是上一个question的后续版本。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-30 06:25:59

下面的代码将为每个包含$oid条目的字段动态执行此操作。它对结构做了很多假设--如果它包含$oid条目,那么就只保留这些条目。

代码语言:javascript
复制
    ruby {
        code => '
            event.to_hash.each { |k, v|
                if v.is_a? Hash
                    if v["$oid"]
                        event.set(k, v["$oid"])
                    end
                end
                if v.is_a? Array
                    if v[0]["$oid"]
                        a = []
                        v.each { |x| a << x["$oid"] }
                        event.set(k, a)
                    end
                end
            }
        '
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65463897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档