Elasticsearch / Logstash在使用计划时复制输出

时间:2016-06-06 06:13:21

标签: logstash

我在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"
        }
    }

1 个答案:

答案 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;"