Данные по Elasticsearch/Kibana слишком велики

У меня есть небольшой кластер ELK, который находится в тестировании. Веб-интерфейс kibana чрезвычайно медленный и вызывает множество ошибок.

Кафка = > 8.2
Logstash = > 1.5rc3 (последние)
Elasticsearch = > 1.4.4 (последняя)
Kibana = > 4.0.2 (последняя)

Узлы elasticsearch имеют 10 ГБ оперативной памяти каждый на Ubuntu 14.04. Я забираю между 5 и 20 ГБ данных в день.

Запуск даже простого запроса, причем всего 15 минут данных в веб-интерфейсе kibana занимает несколько минут и часто вызывает ошибки.

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

enter image description here

Эти ошибки о неудачах осколков появляются только в кибане. Согласно всем другим плагинам (head, kopf), обрезки elasticsearch совершенно прекрасны, а кластер зеленый.

Я проверил группу google, IRC и посмотрел на переполнение стека. Кажется, единственное решение - увеличить баран. Я увеличил баран на своих узлах дважды. Хотя это, кажется, исправить это на день или два, проблема быстро возвращается. Другие решения, такие как очистка кеша, не имеют долгосрочных улучшений.

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 Узлы с 10 ГБ оперативной памяти должны быть более чем достаточны для количества данных, которые у меня есть.

Я также попытался настроить выключатели как предложенный в этом блоге.

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

Как я могу предотвратить эти ошибки и исправить экстремальную медлительность в кибане?

https://github.com/elastic/kibana/issues/3221
elasticsearch получает слишком много результатов, нужна помощь в фильтрации запроса
http://elasticsearch-users.115913.n3.nabble.com/Data-too-large-error-td4060962.html

Обновление

У меня около 30 дней индексов из logstash. 2x Репликация так, чтобы она составляла 10 осколков в день.

enter image description here

Update2

Я увеличил барабан каждого node до 16 ГБ (всего 48 ГБ), и я также обновил его до 1.5.2.

enter image description here

Кажется, что проблема исправлена ​​на день или два, однако проблема возвращается.

enter image description here

Update3

Эта статья в блоге от эластичного сотрудника имеет хорошие советы, объясняющие, что может вызвать эти проблемы.

Ответ 1

Вы индексируете большое количество данных (если вы добавляете/создаете от 5 до 20 ГБ в день), а ваши узлы довольно малы в памяти. Вы не увидите никаких проблем с индексированием, но извлечение данных по одному или нескольким индексам вызовет проблемы. Имейте в виду, что 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 ​​для применения к существующим индексам. (Подробнее см. сканирование/прокрутка и это в блоге.)

Шкала справки Replicas, но столкнется с теми же проблемами, если вы не уменьшите размер кучи каждого node. Что касается количества осколков, которые у вас есть в настоящее время, это может быть необязательным и оптимальным, но я не считаю это основной причиной ваших проблем.

Имейте в виду, что упомянутые выше рекомендации позволяют Kibana запускать запросы и показывать вам данные. Скорость будет сильно опираться на установленные вами диапазоны дат, на машинах, которые у вас есть (CPU, SSD и т.д.), Так и на памяти, доступной на каждом node.

Ответ 2

Основные идеи включают:

  • Меньше открытых индексов.
  • Меньше осколков.
  • Использование doc_values.

Oh и:

  • Больше оперативной памяти.