elasticsearch Logstash只将mysql中的一行select查询索引到弹性搜索
我正在尝试使用logstash将数据从mysql数据库索引到elasticsearch。Logstash运行时没有出现错误,但问题是,它只索引了SELECT查询中的一行。 以下是我正在使用的软件版本:elasticsearch Logstash只将mysql中的一行select查询索引到弹性搜索,elasticsearch,logstash,elasticsearch,Logstash,我正在尝试使用logstash将数据从mysql数据库索引到elasticsearch。Logstash运行时没有出现错误,但问题是,它只索引了SELECT查询中的一行。 以下是我正在使用的软件版本: 弹性搜索:2.4.1 日志存储:5.1.1 mysql:5.7.17 jdbc_驱动程序_库:mysql-connector-java-5.1.40-bin.jar 我不确定这是否是因为logstash和elasticsearch版本不同 以下是我的管道配置: input { jdbc {
- 弹性搜索:2.4.1
- 日志存储:5.1.1
- mysql:5.7.17
- jdbc_驱动程序_库:mysql-connector-java-5.1.40-bin.jar
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"]
}
}
您在
jdbc
插件中使用的跟踪列(id
)和输出中的文档id
(uid
)似乎是不同的。如果两者都是相同的,因为通过id
可以很容易地获取所有记录,并使用相同的id
将它们推入ES,这看起来更容易理解:
document_id => "%{id}" <-- make sure you've got the exact spellings
此外,为了确保运行logstash
文件时不存在.logstash\u jdbc\u last\u run
文件,还包括以下行:
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似乎还可以,除非您愿意选择where。希望有帮助 非常感谢您的回复。我对几件事不清楚。每次调度程序运行时,它是否会选择所有行并在ES中重新索引(我知道它不会重复,因为我们有跟踪列)?例如,我在表中最初有10行,它们在ES中被索引。在计划程序下次运行之前,将再添加5行。现在,调度器选择15行还是5行?我的理解是,如果在select查询中使用了sql\u last\u值,那么将选择5,否则将选择15。请澄清我的理解。@MaruthiPodila是的,没错。如果您的sql\u last\u值指向上次更新的id,则它将始终拾取调度程序再次运行时添加的最后5行。
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
}