2017-01-01 116 views
1

我想索引数据从mysql数据库到elasticsearch使用logstash。 Logstash运行时没有错误,但问题是,它仅从我的SELECT查询中索引一行。 下面是我使用的软件版本:Logstash只索引从MySQL的选择查询的一行到弹性搜索

  • 弹性搜索: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"] 
    } 
} 

回答

2

这似乎是tracking_columnid)你使用的jdbc插件,和document_iduid)在output是不同的。如果你有他们两个相同的,因为它很容易通过id把所有的记录,并使用相同的id以及可能看起来更理解他们推到ES:

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

还请尝试添加这下面一行到你的jdbc输入tracking_column后:

tracking_column_type => "numeric" 

此外,以确保你没有当你运行logstash文件包括以下行以及该.logstash_jdbc_last_run文件存在:

clean_run => true 

因此,这是你的JDBC输入应该什么样子:

比的conf似乎要被罚款,除非你愿意有 :sql_last_value:如果你只是想更新
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 
    } 

其他数据库表中新增记录。希望能帮助到你!

+0

非常感谢回复。我不清楚几件事情。每次调度程序运行时,它都会在ES中选择所有行和重新索引(我知道它不会重复,因为我们有tracking_column)?例如,我最初在表中有10行,并且它们在ES中被编入索引。在下一次调度程序运行之前,会添加5个行。现在,调度程序会选择15行还是5行?我的理解是,如果:在选择查询中使用sql_last _value,那么5将选择,否则将选择15。请澄清我的理解。 –

+0

@MaruthiPodila是的没错。如果您的sql_last_value指向最后一次更新的ID,它将始终选择调度程序再次运行时添加的最后5行。 – Kulasangar