将mongodb _id对象转换或转换为Logstash管道中的字符串

时间:2018-01-11 11:26:52

标签: mongodb elasticsearch logstash

我正在创建一个管道,使用Logstash从MongoDB获取数据到ElasticSearch。 我正在使用dbschema mongodb jdbc驱动程序。我可以使用驱动程序连接到数据库,但我遇到了_id的问题。就像在MongoDB中它的类型对象所以我遇到了转换器的问题。这是我得到的错误。

Exception when executing JDBC query {:exception=>#<Sequel::DatabaseError: Java::OrgLogstash::MissingConverterException: Missing Converter handling for full class name=org.bson.types.ObjectId, simple name=ObjectId>}

我的管道如下:

input{
jdbc{
jdbc_driver_library => "C:/logstash-6.1.0/logstash-6.1.0/bin/driver/mongo/dbschema/mongojdbc1.2.jar"
jdbc_driver_class => "Java::com.dbschema.MongoJdbcDriver"
jdbc_connection_string => "jdbc:mongodb://abc.com:27017/test"
jdbc_user => ""
statement => "db.getCollection('Employee').find({})"
codec => json
}
}

output {
elasticsearch {
hosts => 'http://localhost:9200'
index => 'mongodbschema'
codec => json   
}
stdout { codec => rubydebug }
}

我有什么方法可以转换/强制转换或在过滤器中执行某些操作来将_id的数据类型从对象更改为字符串

3 个答案:

答案 0 :(得分:0)

在过滤器中尝试此代码

filter {
mutate {
remove_field => [ "_id" ]
}}

答案 1 :(得分:0)

尝试

statement => "db.getCollection('Employee').find({ },{'_id': false})"

答案 2 :(得分:0)

由于在elasticsearch _id中是保留字段(您可以在PUT操作中将_id传递给索引API来更新文档),因此必须应用使mongodb _id发生突变的过滤器,例如:

filter {
  mutate {
    rename => [ "_id", "mongo_id" ]
  }
}