Необходимо следить за состоянием кластера Elasticsearch. Постоянная проверка и мониторинг состояния кластера, как в разработке, так и в производстве, позволяет быстро обнаружить и устранить ошибки.
В данном руководстве показано, как проверять и отслеживать состояние кластера Elasticsearch с помощью API health.
Использование
Чтобы получить информацию о состоянии кластера, выполните GET-запрос к API health, как показано в запросе ниже:
1 | GET /_cluster/health/ |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | { "cluster_name" : "55fe667810a347cebf1db500b702f968", "status" : "yellow", "timed_out" : false, "number_of_nodes" : 3, "number_of_data_nodes" : 2, "active_primary_shards" : 109, "active_shards" : 218, "relocating_shards" : 0, "initializing_shards" : 0, "unassigned_shards" : 6, "delayed_unassigned_shards" : 0, "number_of_pending_tasks" : 0, "number_of_in_flight_fetch" : 0, "task_max_waiting_in_queue_millis" : 0, "active_shards_percent_as_number" : 97.32142857142857 } |
Одним из элементов результата запроса, приведенного выше, является status (статус). В нашем примере статус кластера желтый.
Elasticsearch имеет три основных статуса состояния кластера:
- Green - зеленый означает, что все шарды в кластере выделены.
- Yellow - желтый статус означает, что основной шард кластера выделен, но реплики не выделены.
- Red - красный статус означает, что указанный шард не выделен в кластере.
На основании результатов работы API-интерфейса здоровья можно определить, какие действия необходимо предпринять для исправления состояния кластера.
Параметры запроса Health API
Существуют различные параметры, которые можно передать конечной точке Health API. К таким параметрам относятся:
- Level - определяет уровень детализации информации о здоровье, получаемой в результате запроса. По умолчанию это значение имеет значение cluster, но может также включать: indices и shards.
- Timeout - Задает максимальное время ожидания ответа. По умолчанию установлено значение 30 с. Если указанное время истекает до того, как Elasticsearch отправит ответ, запрос не будет выполнен.
- wait_for_nodes - Указывает запросу ожидать определенного количества узлов, которые будут доступны.
- wait_for_status - Запрос будет ждать, пока статус кластера не изменится на указанный. Например, если задано значение green, то запрос будет ждать, пока статус не изменится с желтого или красного на зеленый. Это может быть полезно для определения того, работает ли исправление, которое вы применяете к кластеру.
Понимание тела ответа
В предыдущем примере мы получили ответ о состоянии кластера в формате JSON. Обсудим, что означает каждая из записей в ответе.
- cluster_name - Указывается имя указанного кластера Elasticsearch.
- status - Состояние здоровья кластера. Либо зеленый, либо желтый, либо красный.
- timed_out - Булево значение true или false, характеризующее получение ответа в течение максимального таймаута.
- number_of_nodes - Общее количество узлов в указанном кластере.
- number_of_data_nodes - Общее количество узлов, предназначенных для работы с данными.
- active_primary_shards - общее количество активных первичных шардов в кластере.
- active_shards - общее количество шардов в кластере. Как первичных, так и реплик.
- relocating_shards - количество шардов, находящихся в процессе перемещения.
- initializing_shards - шарды, находящиеся в процессе инициализации.
- unassigned_shards - общее количество нераспределенных шардов.
Выше приведена только основная информация из ответа. Более подробную информацию можно получить из документации.
1 | GET /_cluster/health/kibana_sample_data_ecommerce?level=shards |
Приведенный выше запрос должен вернуть пример вывода, аналогичный приведенному ниже:
Заключение
В этой статье мы рассмотрели, как использовать API здоровья Elasticsearch для получения информации о состоянии кластера. Вы можете использовать концепции, изложенные в этом руководстве, для создания автоматического сценария на языке python, который проверяет состояние кластера в течение нескольких часов и отправляет сообщение по электронной почте, если оно красное или желтое.