Logstash仅将一行选择查询从mysql索引到弹性搜索

时间:2017-01-01 18:48:53

标签: elasticsearch logstash

我正在尝试使用logstash将数据从mysql db索引到elasticsearch。 Logstash运行没有错误,但问题是,它只从我的SELECT查询索引一行。 以下是我正在使用的软件版本:

  • 弹性搜索:2.4.1
  • logstash:5.1.1
  • mysql:5.7.17
  • jdbc_driver_library:mysql-connector-java-5.1.40-bin.jar

我不确定这是否是因为logstash和elasticsearch版本不同。

以下是我的管道配置:

input {
  jdbc {
    jdbc_driver_library => "mysql-connector-java-5.1.40-bin.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
    jdbc_user => "user"
    jdbc_password => "password"
    schedule => "* * * * *"
    statement => "SELECT * FROM employee"
    use_column_value => true
    tracking_column => "id"
  }
}
output {
    elasticsearch {
        index => "logstash"
        document_type => "sometype"
        document_id => "%{uid}"
        hosts => ["localhost:9200"]
    }
}

1 个答案:

答案 0 :(得分:2)

好像您在tracking_column插件和idjdbc)中使用的document_iduidoutput是不同的。如果你们两个都相同,那么该怎么办?因为id很容易获得所有记录,并使用相同的id将它们推送到ES中,这看起来更容易理解:

document_id => "%{id}" <-- make sure you've got the exact spellings

另请在jdbc之后尝试在tracking_column输入中添加以下这一行:

tracking_column_type => "numeric"

此外,为了确保您在运行.logstash_jdbc_last_run文件时不存在logstash文件,还包括以下行:

clean_run => true

这就是你的jdbc输入应该是这样的:

jdbc {
    jdbc_driver_library => "mysql-connector-java-5.1.40-bin.jar"
    jdbc_driver_class => "com.mysql.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://localhost:3306/mydb"
    jdbc_user => "user"
    jdbc_password => "password"
    schedule => "* * * * *"
    statement => "SELECT * FROM employee"
    use_column_value => true
    tracking_column => "id"
    tracking_column_type => "numeric"
    clean_run => true
  }

除此之外,conf似乎没问题,除非您愿意让:sql_last_value在哪里,如果您只想更新数据库表中新添加的记录。希望它有所帮助!