Elasticsearch / Kibana字段数据太大

时间:2015-04-28 17:57:57

标签: elasticsearch

我有一个正在测试的小型ELK群集。 kibana Web界面非常慢,并且会引发很多错误。

Kafka => 8.2
Logstash => 1.5rc3(最新)
Elasticsearch => 1.4.4(最新)
Kibana => 4.0.2(最新)

在Ubuntu 14.04上,elasticsearch节点每个都有10GB内存。我每天要吸收5GB到20GB的数据。

运行一个简单的查询,在kibana Web界面中只有15分钟的数据需要几分钟,并且经常会抛出错误。

[FIELDDATA] Data too large, data for [timeStamp] would be larger than limit of [3751437926/3.4gb]]

enter image description here

关于分片失败的这些错误只出现在kibana中。根据所有其他插件(head,kopf),elasticsearch分片非常精细,簇是绿色的。

我已经与google小组,IRC核对并查看了堆栈溢出。似乎唯一的解决方案是增加内存。我已经两次增加了节点上的ram。虽然这似乎解决了一两天,但问题很快就会恢复。 其他解决方案(如清理缓存)没有长期改进。

curl -XPUT 'http://elastic.example.com:9200/cache/clear?filter=true'
curl -XPOST 'http://elastic.example.com:9200/_cache/clear' -d '{ "fielddata": "true" }'

根据KOPF插件,在完全空闲的群集上,堆空间量通常接近75%。 (我是公司唯一使用它的人)。 3个拥有10GB内存的节点应该足以满足我拥有的数据量。

我也尝试将断路器调整为suggested by this blog.

PUT /_cluster/settings -d '{ "persistent" : { "indices.breaker.fielddata.limit" : "70%" } }'
PUT /_cluster/settings -d '{ "persistent" : {  "indices.fielddata.cache.size" : "60%" } }'

如何防止这些错误,并解决kibana极度缓慢的问题?

https://github.com/elastic/kibana/issues/3221
elasticsearch getting too many results, need help filtering query
http://elasticsearch-users.115913.n3.nabble.com/Data-too-large-error-td4060962.html

更新

我从logstash获得了大约30天的索引。 2x复制,因此每天10个分片。

enter image description here

UPDATE2

我已将每个节点的内存增加到16GB(总共48GB),并且我也升级到了1.5.2。

enter image description here

这似乎解决了一两天的问题,但问题又回来了。

enter image description here

UPDATE3

This blog article from an elastic employee has good tips解释可能导致这些问题的原因。

2 个答案:

答案 0 :(得分:10)

您正在为大量数据建立索引(如果您每天要添加/创建5到20GB)并且您的节点内存非常少。您不会在索引编制方面看到任何问题,但在单个或多个索引上获取数据将导致问题。请记住,Kibana在后台运行查询,而您收到的消息基本上是在说" 我无法为您获取数据,因为我需要放置内存中的数据比我运行这些查询的数据多。"

有两件事情比较简单,应该可以解决你的问题:

  • 升级至ElasticSearch 1.5.2(主要绩效改进)
  • 当你内存不足时,你真的需要在所有映射中使用doc_values,因为这会大大减少堆大小

关键在于 doc_values 。您需要修改映射以将此属性设置为 true 。原油示例:

[...],
"properties": {
    "age": {
      "type": "integer",
      "doc_values": true
    },
    "zipcode": {
      "type": "integer",
      "doc_values": true
    },
    "nationality": {
      "type": "string",
      "index": "not_analyzed",
      "doc_values": true
    },
    [...]

更新映射将使未来的索引考虑到这一点,但您需要完全重新索引现有的索引,以便 doc_values 应用于现有索引。 (有关更多提示,请参阅scan/scrollthis博文。)

副本有助于扩展,但如果不减少每个节点的堆大小,则会遇到同样的问题。至于你目前拥有的碎片数量,可能没有必要也没有最佳,但我认为这不是你问题的根本原因。

请注意,上述建议是允许Kibana运行查询并向您显示数据。速度将在很大程度上取决于您设置的日期范围,您拥有的机器(CPU,SSD等)以及每个节点上可用的内存。

答案 1 :(得分:2)

基本想法包括:

  • 开放索引较少。
  • 更少的碎片。
  • 使用doc_values。

哦,并且:

  • 更多内存。