【发布时间】:2020-09-14 11:24:53
【问题描述】:
我正在尝试使用 Logstash 使 MongoDB 集合与 Elasticsearch 索引保持同步。
为此,我正在使用带有 DBSchema JDBC 驱动程序库的 Logstash JDBC 插件。
这是我用于 logstash 的配置文件:-
input {
jdbc{
jdbc_driver_class => "com.dbschema.MongoJdbcDriver"
jdbc_driver_library => "/path/to/mongojdbc1.8.jar"
jdbc_user => ""
jdbc_password => ""
jdbc_connection_string => "jdbc:mongodb://127.0.0.1:27017/db1"
statement => "db.collection1.find({ }, { '_id': false })"
}
}
output {
elasticsearch {
hosts => ["http://127.0.0.1:9200"]
index => "testing"
user => ""
password => ""
}
}
这没问题,但是当我多次运行 logstash 时,记录会多次插入 Elasticsearch。我不希望记录被重写。此外,如果我修改文档并再次运行 logstash,它应该会更改 Elasticsearch 中的相同记录,而无需创建新文档。我该如何实现这一目标?
【问题讨论】:
-
如果你在你的logstash输出中使用选项
document_id并带有来自你的源的一些唯一标识符,它只会更新elasticsearch中的同一个文档,如果你不使用它,elasticsearch将生成一个唯一的id对于每个文档,您的源中是否有唯一标识符字段? -
尝试将
record_last_run => true和last_run_metadata_path => "/usr/share/logstash/bin/since"添加到logstash 中的jdbc 部分。你可以在这里阅读更多信息:elastic.co/guide/en/logstash/current/plugins-inputs-jdbc.html -
@leandrojmp 知道了,我需要先为每个文档设置一个唯一标识符
-
@eladyanai 这是另一个很好的解决方案,谢谢
标签: mongodb elasticsearch jdbc logstash mongo-jdbc-driver