删除未使用的数据Elasticsearch

时间:2018-09-18 06:53:04

标签: elasticsearch

我是使用Elasticseach的新手。我使用elasticsearch聚合日志。我的问题是存储,我删除了所有索引,现在只有一个索引。

当我呼叫 / _ cat / allocation?v 时,disk.indices是23.9mb,disk.used是16.4gb。为什么会有这种差异?如何删除未使用的数据或如何正确删除索引?

我运行了命令:

curl -XPOST "elasticsearch:9200/_forcemerge?only_expunge_deletes=true"

但是我没有看到任何改善。

_cat / allocation?v 的输出:

shards disk.indices disk.used disk.avail
12       24.3mb    16.4gb     22.7gb   

_cat / shards?v 的输出:

index        shard prirep state      docs  store ip           node
articles     0     p      STARTED    3666 24.2mb 192.168.1.21 lW9hsd5
articles     0     r      UNASSIGNED                          
storage_test 2     p      STARTED       0   261b 192.168.1.21 lW9hsd5
storage_test 2     r      UNASSIGNED                          
storage_test 3     p      STARTED       0   261b 192.168.1.21 lW9hsd5
storage_test 3     r      UNASSIGNED                          
storage_test 4     p      STARTED       0   261b 192.168.1.21 lW9hsd5
storage_test 4     r      UNASSIGNED                          
storage_test 1     p      STARTED       0   261b 192.168.1.21 lW9hsd5
storage_test 1     r      UNASSIGNED                          
storage_test 0     p      STARTED       0   261b 192.168.1.21 lW9hsd5
storage_test 0     r      UNASSIGNED                          
twitter      3     p      STARTED       1  4.4kb 192.168.1.21 lW9hsd5
twitter      3     r      UNASSIGNED                          
twitter      2     p      STARTED       0   261b 192.168.1.21 lW9hsd5
twitter      2     r      UNASSIGNED                           
twitter      4     p      STARTED       0   261b 192.168.1.21 lW9hsd5
twitter      4     r      UNASSIGNED                          
twitter      1     p      STARTED       0   261b 192.168.1.21 lW9hsd5
twitter      1     r      UNASSIGNED                          
twitter      0     p      STARTED       0   261b 192.168.1.21 lW9hsd5
twitter      0     r      UNASSIGNED                          
.kibana      0     p      STARTED       4 26.4kb 192.168.1.21 lW9hsd5

谢谢

2 个答案:

答案 0 :(得分:0)

https://www.elastic.co/guide/en/elasticsearch/guide/current/delete-doc.html

  

如更新整个文档中所述,删除文档   不会立即从磁盘上删除文档;它只是将其标记为   已删除。 Elasticsearch将清理已删除文档中的   您继续为更多数据编制索引的背景。

答案 1 :(得分:0)

您可能会在非只读索引上遇到_forcemerge的一些副作用:

  

警告:仅应针对只读索引调用强制合并。对读写索引进行强行合并可能会产生非常大的段(每个段大于5Gb),并且合并策略永远不会考虑将其再次合并,直到它主要由已删除的文档组成为止。这会导致很大的段保留在碎片中。

在这种情况下,我建议先将索引设为只读:

PUT your_index/_settings
{
  "index": {
    "blocks.read_only": true
  }
}

然后再次强制合并并启用回写到索引:

PUT your_index/_settings
{
  "index": {
    "blocks.read_only": false
  }
}

如果这不起作用,您可以将旧索引中的reindex转换为新索引,然后删除旧索引。

是否有更好的删除旧日志的方法?

好像您要删除旧的日志消息。尽管您可以通过查询发出删除操作,但实际上还有一种更好的方法:使用Rollover API

这个想法是每当旧索引太大时就创建一个新索引。写操作将发生在固定的alias中,并且当旧索引太旧或太大时,Rollover API将使别名指向新索引。然后,要删除旧数据,只需删除旧索引。

希望有帮助!