我正在尝试使用logstash将数据从mysql db索引到elasticsearch。 Logstash运行没有错误,但问题是,它只从我的SELECT查询索引一行。 以下是我正在使用的软件版本:
我不确定这是否是因为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"]
}
}
答案 0 :(得分:2)
好像您在tracking_column
插件和id
(jdbc
)中使用的document_id
(uid
) output
是不同的。如果你们两个都相同,那么该怎么办?因为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在哪里,如果您只想更新数据库表中新添加的记录。希望它有所帮助!