如何在Logstash中使用新数据更新索引?

时间:2018-10-27 04:20:35

标签: elasticsearch logstash elastic-stack

我有PostgreSQL 10个数据库和表。每小时有7000个新数据进入该表。

Logstash 6.4中,我有一个.conf文件,它在Elasticsearch中创建了索引。

.conf

input {
    jdbc {
        jdbc_connection_string => "jdbc:postgresql://@host:@port/@database"
        jdbc_user => "@username"
        jdbc_password => "@password"
        jdbc_driver_library => "C:\postgresql-42.2.5.jar"
        jdbc_driver_class => "org.postgresql.Driver"
        statement => "SELECT * from table_name"
    }
}
output {
    elasticsearch {
        hosts => ["localhost:9200"]
        index => "table_name"
    }
}

问题

  1. 如何用表中显示的新数据更新现有索引?
  2. 索引最多可以存储多少个数据?会溢出吗?

1 个答案:

答案 0 :(得分:2)

如何使用表中显示的新数据更新现有索引?

索引table_name会自动更新,并在数据库表中添加新条目。但是,如果在数据库表中更新了任何现有条目,则它们将作为具有新文档ID的新文档添加到索引中。相反,如果您希望更新ES中的现有文档,请使用具有唯一值的列名称,并将其分配为文档ID。这样,如果数据库中的现有条目已更新,则ES中的相应文档将被最新值覆盖。

在输出配置中使用document_id => "%{column_name_with_unique_values>}"

索引可以存储的最大数据量是多少?会发生溢出吗?

这取决于您的资源。但是,为了获得最佳性能,建议将碎片大小保持在20-40 GB之间。如果索引有5个主分片,则可以在一个索引中存储大约200 GB的数据。高于此的任何因素都考虑将数据存储在新索引中。理想情况下,请使用时间序列索引(例如每天或每月),这样便于维护。进行存档和备份,然后清除。