cyberflow_gravatar

Cyberflow

I am linux system administrator.


Navigation
» Home
» Categories
» Github
» XML Feed

Оптимизация standalone сервера elasticsearch

12 May 2016 » elasticsearch, monitoring, linux

При использовании elasticsearch для сбора и анализа логов возникает вопрос оптимизации для одного сервера. Т.к. elasticsearch расчитан для использования в кластере, то большинство настроек “по умолчанию” выставлены так, что один сервер работает не эффективно. В этой заметке я разберу несколько примеров оптимизации elasticsearch для работы на одном сервере.

Shards

Первое что нужно знать, что каждый шард использует пямять и процессор. При использовании elasticsearch и logstash получается, что каждый день logstash создает новый indice, а дефолтные настройки elasticsearch создают 5 шардов в каждом индексе. В итоге с каждым днем кол-во шардов увеличивается вместе с утилизацие памяти и процессора.

Первое что стоит сделать это изменить глобальные настройки elasticsearch так, чтобы кол-во шардов было оптимальное. Если не планируется кластер, то и создавать большое кол-во шардов не имеет смысла. За эту настройку отвечает директива index.number_of_shards. Добавив ее в конфиг можно установить кол-во создаваемых шардов для всех новых индексов. Как мне кажется, при использовании только одного сервера elasticsearch, логично установить этот параметр равным 1.

Replics

Реплики - еще один инструмент кластера elasticsearch, который взаимодействует с шардами. Кол-во реплик указывают сколько “копий” шардов должно храниться на других нодах кластера, что в случае использования одной ноды не актуально. За эту настройку отвечает директива index.number_of_replicas. Если сервер один, то и реплицировать некуда, устанавить этот параметр в 0 - логичное решение.

Однако что делать, если сервер уже работает какое-то время с дефолтными настройками? Можно заметить, что API elasticsearch возвращает следующее:

$ curl -XGET http://localhost:9200/_cat/shards
logstash-2016.05.09 1 p STARTED    1520055  985.3mb 127.0.0.1 logstash1
logstash-2016.05.09 1 r UNASSIGNED
logstash-2016.05.09 3 p STARTED    1520640  985.9mb 127.0.0.1 logstash1
logstash-2016.05.09 3 r UNASSIGNED
logstash-2016.05.09 4 p STARTED    1520955  981.4mb 127.0.0.1 logstash1
logstash-2016.05.09 4 r UNASSIGNED
logstash-2016.05.09 2 p STARTED    1520377    966mb 127.0.0.1 logstash1

где UNASSIGNED - это шарды-реплики, которые ожидают репликации.

Исправить это можно следующим обращением к api:

curl -XPUT "localhost:9200/logstash-2016.05.09/_settings" -d '{
    "index" : {
        "number_of_replicas" : 0
    }
}'

если количество индексов с шардами, ожидающими репликации большое, то можно воспользоваться следующим однострочником:

$ for ind in `curl -XGET http://localhost:9200/_cat/shards | grep UNASSIGNED | awk '{print $1}' | uniq`; do curl -XPUT "localhost:9200/$ind/_settings" -d '{ "index" : { "number_of_replicas" : 0 } }'; done