【问题标题】:How in Logstash update index with new data?Logstash 如何用新数据更新索引?
【发布时间】:2018-10-27 04:20:35
【问题描述】:

我有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. 索引可以存储的最大数据量是多少?会不会溢出?

【问题讨论】:

标签: elasticsearch logstash elastic-stack


【解决方案1】:

如何用表中出现的新数据更新现有索引?

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

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

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

这真的取决于你的资源。但是,为了获得最佳性能,建议将分片大小保持在 20 - 40 GB 之间。如果您的索引有 5 个主分片,您可以在单个索引中存储大约 200 GB 的数据。上述任何内容都考虑将数据存储在新索引中。理想情况下,使用时间序列指数,例如每日或每月,这样就更容易维护 ex。存档和备份,然后清除。

【讨论】:

  • 不错的答案,很好
  • 感谢您的回答!我还有一些问题。正如我正确理解的那样,当我们启动 .conf 文件时,它运行我们在该文件中设置的 SQL 状态。该 SQL 语句扫描全表并仅将新数据添加到现有索引。假设我想在 SQL 语句中使用时间,我需要做什么?例如:SELECT * FROM table_name where data_field="2018-10-27 00:00:00" 如何设置当前系统时间?另外我可以在.conf文件中使用SQL文件代替语句吗?
  • 我通过statement_filepath设置了SQL文件的路径。
  • 嗨,请就时间戳问题提出一个新问题 :)
猜你喜欢
  • 1970-01-01
  • 2018-02-16
  • 2020-03-07
  • 2016-08-05
  • 1970-01-01
  • 2017-10-27
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
相关资源
最近更新 更多