Elasticsearch正在使用过多的磁盘空间


12

我有一台安装了Elasticsearch 1.3.2CentOS 6.5服务器。

我的elasticsearch.yml配置文件是对默认发货的Elasticsearch的最小修改。除去所有注释行后,它看起来像:

cluster.name: xxx-kibana

node:
    name: "xxx"
    master: true
    data: true

index.number_of_shards: 5

index.number_of_replicas: 1

path:
    logs: /log/elasticsearch/log
    data: /log/elasticsearch/data


transport.tcp.port: 9300

http.port: 9200

discovery.zen.ping.multicast.enabled: false

Elasticsearch 默认情况下应启用压缩功能,并且我阅读了各种基准测试,将压缩率从低至50%提高到了95%。不幸的是,在我的情况下,压缩率为-400%,换句话说:用ES存储的数据占用的磁盘空间是内容相同的文本文件的4倍。看到:

12K     logstash-2014.10.07/2/translog
16K     logstash-2014.10.07/2/_state
116M    logstash-2014.10.07/2/index
116M    logstash-2014.10.07/2
12K     logstash-2014.10.07/4/translog
16K     logstash-2014.10.07/4/_state
127M    logstash-2014.10.07/4/index
127M    logstash-2014.10.07/4
12K     logstash-2014.10.07/0/translog
16K     logstash-2014.10.07/0/_state
109M    logstash-2014.10.07/0/index
109M    logstash-2014.10.07/0
16K     logstash-2014.10.07/_state
12K     logstash-2014.10.07/1/translog
16K     logstash-2014.10.07/1/_state
153M    logstash-2014.10.07/1/index
153M    logstash-2014.10.07/1
12K     logstash-2014.10.07/3/translog
16K     logstash-2014.10.07/3/_state
119M    logstash-2014.10.07/3/index
119M    logstash-2014.10.07/3
622M    logstash-2014.10.07/  # <-- This is the total!

与:

6,3M    /var/log/td-agent/legacy_api.20141007_0.log
8,0M    /var/log/td-agent/legacy_api.20141007_10.log
7,6M    /var/log/td-agent/legacy_api.20141007_11.log
6,7M    /var/log/td-agent/legacy_api.20141007_12.log
8,0M    /var/log/td-agent/legacy_api.20141007_13.log
7,6M    /var/log/td-agent/legacy_api.20141007_14.log
7,6M    /var/log/td-agent/legacy_api.20141007_15.log
7,7M    /var/log/td-agent/legacy_api.20141007_16.log
5,6M    /var/log/td-agent/legacy_api.20141007_17.log
7,9M    /var/log/td-agent/legacy_api.20141007_18.log
6,3M    /var/log/td-agent/legacy_api.20141007_19.log
7,8M    /var/log/td-agent/legacy_api.20141007_1.log
7,1M    /var/log/td-agent/legacy_api.20141007_20.log
8,0M    /var/log/td-agent/legacy_api.20141007_21.log
7,2M    /var/log/td-agent/legacy_api.20141007_22.log
3,8M    /var/log/td-agent/legacy_api.20141007_23.log
7,5M    /var/log/td-agent/legacy_api.20141007_2.log
7,3M    /var/log/td-agent/legacy_api.20141007_3.log
8,0M    /var/log/td-agent/legacy_api.20141007_4.log
7,5M    /var/log/td-agent/legacy_api.20141007_5.log
7,5M    /var/log/td-agent/legacy_api.20141007_6.log
7,8M    /var/log/td-agent/legacy_api.20141007_7.log
7,8M    /var/log/td-agent/legacy_api.20141007_8.log
7,2M    /var/log/td-agent/legacy_api.20141007_9.log
173M    total

我究竟做错了什么?为什么不压缩数据?

我已经临时添加index.store.compress.stored: 1到我的配置文件中,因为我在elasticsearch 0.19.5发行说明中发现(那是store压缩第一次出现的时候),但是我还无法确定它是否有所作为,无论如何,压缩应该通过如今,默认...


您是否考虑过存储和索引该数据所需的开销?这就是差异的来源。
mailq 2014年

@mailq -据我所知,弹性压缩两者数据和指标,你还是应该注意到减少磁盘上的空间使用率,相比于文本日志。我认为里程数可能会根据日志结构而有所不同,但是日志本质上通常是非常重复的,因此索引不应该是最耗费空间的操作。...还是我弄错了吗?
mac

日志并不是真正重复的。用户A在时间1登录。用户B在时间2登录。什么是重复性的?两个元组都必须被索引并分别存储。除了日志条目本身。
mailq 2014年


@mailq-Supercool Maliq,非常感谢。如果您对评论发表意见并写出正确的答案,我们很乐意将其标记为已接受(否则,我稍后会做,但不想窃取您的意见!)。
mac

Answers:


17

Elasticsearch不会自动缩小数据。对于任何数据库都是如此。除了存储原始数据外,每个数据库还必须存储元数据。普通数据库仅存储db-admin前期选择的列的索引(以便快速搜索)。ElasticSearch有所不同,因为默认情况下它会索引每一列。因此,使索引变得非常大,但另一方面,在检索数据时却可以提供完美的性能。

在正常配置中,索引后原始数据将增加4到6倍。尽管这在很大程度上取决于实际数据。但这实际上是预期的行为。

因此,要减小数据库大小,您必须像在RDBM中一样进行其他操作:从不需要索引或存储的列中排除不需要索引的列。

另外,您可以打开压缩功能,但是只有当“文档”很大时,这种情况才会改善,这对于日志文件条目而言可能不是正确的。

这里有一些比较和有用的技巧:https : //github.com/jordansissel/experiments/tree/master/elasticsearch/disk

但是请记住:搜索是有代价的。付出的代价是磁盘空间。但是您会获得灵活性。如果您的存储空间超出范围,则水平扩展!这就是ElasticSearch的优势。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.