如何为 Logstash 输入 MongoDB 类型的输入

hel*_*_me 6 mongodb elasticsearch logstash

我知道我们可以输入文件,然后输出到 mongo 数据库。但是我的 mongodb 中有一个集合,我希望将其作为输入,以便我可以将它与 ES 一起使用。这可能吗?谢谢你。

Ser*_*hez 7

我也遇到过类似的问题,logstash-input-mongodb插件很好,但是功能很有限,而且好像也不再维护了,所以我选择了logstash-integration-jdbc插件。

我按照以下步骤将 MongoDB 集合与 ES 同步:

首先,我已经下载了DBSchema 开发的适用于 MongoDB的 JDBC 驱动程序,您可以在此处找到。

我准备了一个自定义 Dockerfile来集成驱动程序和插件,如下所示:

FROM docker.elastic.co/logstash/logstash:7.9.2

RUN mkdir /usr/share/logstash/drivers
COPY ./drivers/* /usr/share/logstash/drivers/

RUN logstash-plugin install logstash-integration-jdbc
RUN logstash-plugin install logstash-output-elasticsearch
Run Code Online (Sandbox Code Playgroud)

我已经配置了一个每 30 秒执行一次的查询,并将查找插入时间戳晚于上次查询时间戳的文档(提供参数:sql_last_value

input {
  jdbc {
    jdbc_driver_library => "/usr/share/logstash/drivers/mongojdbc2.3.jar"
    jdbc_driver_class => "com.dbschema.MongoJdbcDriver"
    jdbc_connection_string => "jdbc:mongodb://devroot:devroot@mongo:27017/files?authSource=admin"
    jdbc_user => "devroot"
    jdbc_password => "devroot"
    schedule => "*/30 * * * * *"
    statement => "db.processed_files.find({ 'document.processed_at' : {'$gte': :sql_last_value}},{'_id': false});"
  }
}

output {
  stdout {
    codec => rubydebug
  }
  elasticsearch {
    action => "create"
    index => "processed_files"
    hosts => ["elasticsearch:9200"]
    user => "elastic"
    password => "password"
    ssl => true
    ssl_certificate_verification => false
    cacert => "/etc/logstash/keys/certificate.pem"
  }
}
Run Code Online (Sandbox Code Playgroud)

希望它可以帮助某人,问候


hel*_*_me 1

显然,简短的答案是否定的,不可能从 Logstash 中的数据库获得输入。

\n\n

编辑

\n\n

@elssar 谢谢你的回答:

\n\n
\n

实际上,logstash 有一个第三方 mongodb 输入 -\n github.com/phutchins/logstash-input-mongodb \xe2\x80\x93 elssar

\n
\n