Elasticsearch/Kibana字段数据太大

spu*_*der 11 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]]
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

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

我已经检查了谷歌组,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" }'
Run Code Online (Sandbox Code Playgroud)

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

我也尝试按照这个博客的建议调整断路器.

PUT /_cluster/settings -d '{ "persistent" : { "indices.breaker.fielddata.limit" : "70%" } }'
PUT /_cluster/settings -d '{ "persistent" : {  "indices.fielddata.cache.size" : "60%" } }'
Run Code Online (Sandbox Code Playgroud)

如何防止这些错误,并修复kibana的极端缓慢?

https://github.com/elastic/kibana/issues/3221
elasticsearch得到太多结果,需要帮助过滤查询
http://elasticsearch-users.115913.n3.nabble.com/Data-too-large-error-td4060962 html的

更新

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

在此输入图像描述

UPDATE2

我已经将每个节点的ram增加到16GB(总共48GB),我也升级到了1.5.2.

在此输入图像描述

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

在此输入图像描述

UPDATE3

这篇来自弹性员工的博客文章提供了解释可能导致这些问题的好方法.

Nic*_*ick 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
    },
    [...]
Run Code Online (Sandbox Code Playgroud)

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

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

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


Ala*_*ins 2

基本想法包括:

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

哦,还有:

  • 更多内存。