将MongoDB与ElasticSearch同步

13

我想将MongoDB数据同步到ElasticSearch,我读了很多关于elasticsearch river插件和mongo connector的文章,但它们都已经过时,不支持mongo 4和elasticsearch 7!

由于logstash是专有软件,我想使用它来同步这两个... 有人知道如何做到吗?

2个回答

4
您可以使用Logstash将MongoDB和Elasticsearch进行同步,实际上同步是Logstash的主要应用之一。在安装Logstash之后,您需要为您的用例指定一个“管道”:一个或多个输入源(在您的情况下是MongoDB)和一个或多个输出汇(在您的情况下是Elasticsearch),并将其作为配置文件(示例如下)放在Logstash的“管道”目录中;然后Logstash会处理剩余的事情。
Logstash官方提供了许多常用数据源和汇的插件,这些插件可以让您通过仅进行少量配置即可从各种数据源读取数据并将数据写入各种汇。你只需要找到正确的插件安装它,并为您的场景进行配置。Logstash有一个官方的Elasticsearch输出插件,它的配置相当直观。但是,Logstash没有为MongoDB提供任何输入插件。您需要找到第三方插件;这个看起来非常有前途。
最后,您的管道可能如下所示:
input {
  mongodb {
    uri => 'mongodb://10.0.0.30/my-logs?ssl=true'
    placeholder_db_dir => '/opt/logstash-mongodb/'
    placeholder_db_name => 'logstash_sqlite.db'
    collection => 'events_'
    batch_size => 5000
  }
}
output {
  stdout {
    codec => rubydebug #outputs the same thing as elasticsearch in stdout to facilitate debugging
  }
  elasticsearch {
    hosts => "localhost:9200"
    index => "target_index"
    document_type => "document_type"
    document_id => "%{id}"
  }
}

3
关于这个输入插件的说明:它是为解析写入 mongodb 的日志而设计的。这意味着它可能不会重新解析已更改和已经解析过的数据库条目。因此,它只在非常有限的用例中有用。 - Madbreaks
换句话说,logstash-input-mongodb 插件不支持跟踪文档的“删除”和“更新”,并且似乎没有得到维护。 - Gabriel Gimenes

0
我正在开发一个简单的软件包,用于将ElasticSearch服务器与MongoDB同步。
该软件包接受一组MongoDB集合,每个集合都有一个名称和管道。
例如,以下代码片段通过指定MongoDb URI和名称、集合数组以及与ElasticSearch客户端软件包中一样的ElasticSearch选项来开始同步:
const mongoDbOptions: MongoDbOptions = {
    uri: config.mongodbURI,
    dbName: config.dbName,
    collections: [
        {
            name: 'collection-name',
            pipeline: [{ $match: { name: { $regex: 'jan' } } }, { $group: { _id: '$name', totalDocs: { $sum: 1 } } }],
        },
    ],
};
const elasticOptions: ElasticOptions = {
    node: 'http://localhost:9200',
    auth: {
        username: 'elastic',
        password: 'elastic-user-password',
    },
    // tls: {
    //  ca: fs.readFileSync('./http_ca.crt'),
    //  rejectUnauthorized: false,
    // },
};
const syncDbWithElasticsearch = new SyncMongoDbWithElasticSearch(mongoDbOptions, elasticOptions);
syncDbWithElasticsearch.start();

该软件包可通过npm下载和使用,链接在this


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接