我在Logstash中使用Elasticsearch。 我希望在数据库更改时更新索引。所以我决定使用LS 计划。但每1分钟输出附加数据库表记录。 示例:合同表有2行。 前1分钟总计:2,总产出后1分钟为:4; 我该如何解决这个问题?
有我的配置文件。命令是 bin / logstash -f contract.conf
input {
jdbc {
jdbc_connection_string => "jdbc:postgresql://localhost:5432/resource"
jdbc_user => "postgres"
jdbc_validate_connection => true
jdbc_driver_library => "/var/www/html/iltodgeree/logstash/postgres.jar"
jdbc_driver_class => "org.postgresql.Driver"
statement => "SELECT * FROM contracts;"
schedule => "* * * * *"
codec => "json"
}
}
output {
elasticsearch {
index => "resource_contracts"
document_type => "metadata"
hosts => "localhost:9200"
}
}
答案 0 :(得分:0)
您需要通过指定document_id
设置来修改输出,并使用合同表中的ID字段。这样,你永远不会重复。
output {
elasticsearch {
index => "resource_contracts"
document_type => "metadata"
document_id => "%{ID_FIELD}"
hosts => "localhost:9200"
}
}
此外,如果您的contracts
表中有更新时间戳,您可以修改输入中的SQL语句,如下所示,以便仅复制最近更改的记录:
statement => "SELECT * FROM contracts WHERE timestamp > :sql_last_value;"