Практическое руководство: Автоматизация переливания с помощью ILM
При непрерывной индексации временных документов в Elasticsearch, как правило, используется поток данных, чтобы можно было периодически переносить данные в новый индекс. Это позволяет реализовать архитектуру «горячие-тёплые-холодные» для обеспечения производительности для новых данных, контролировать затраты со временем, применять политики хранения и в полной мере использовать данные.
Потоки данных лучше всего подходят для случаев использования с добавлением только новых данных. Если вам нужно обновлять или удалять существующие временные ряды данных, вы можете выполнить операции обновления или удаления непосредственно в индексе, лежащем в основе потока данных. Если вы часто отправляете несколько документов с использованием одного и того же _id, ожидая, что последнее записанное значение будет преобладать, вы можете использовать псевдоним индекса с индексом записи вместо этого. Вы по-прежнему можете использовать ILM для управления и переноса индексов псевдонима. Перейти к разделу Управление данными временных рядов без потоков данных.
Управление данными временных рядов с потоками данных
Для автоматизации переносa и управления потоком данных с помощью ILM, необходимо:
- Создать политику жизненного цикла, которая определяет соответствующие фазы и действия.
- Создать шаблон индекса, чтобы создать поток данных и применить политику ILM, а также настройки индексов и конфигурации сопоставлений для подключаемых индексов.
- Проверить, что индексы перемещаются через фазы жизненного цикла как ожидается.
Когда вы включаете управление жизненным циклом индексов для Beats или плагина вывода Logstash Elasticsearch, политики жизненного цикла настраиваются автоматически. Вам не нужно предпринимать никаких дополнительных действий. Вы можете изменить политики по умолчанию через Управление Kibana или API ILM.
Создать политику жизненного цикла
Политика жизненного цикла определяет фазы в жизненном цикле индекса и действия, которые должны быть выполнены на каждой фазе. Жизненный цикл может содержать до пяти фаз: hot, warm, cold, frozen и delete.
Например, вы можете определить timeseries_policy, который имеет две фазы:
- Фаза
hot, которая определяет действие переноса, чтобы указать, что индекс должен быть перенесен, когда он достигнет либоmax_primary_shard_sizeв 50 гигабайт, либоmax_ageв 30 дней. - Фаза
delete, которая устанавливаетmin_ageдля удаления индекса через 90 дней после переноса.
Значение min_age относительнo ко времени переноса, а не ко времени создания индекса.
Вы можете создать политику через Kibana или с помощью API создания или обновления политики. Чтобы создать политику из Kibana, откройте меню и перейдите к Управление стеком > Политики жизненного цикла индексов. Нажмите Создать политику.
Пример API
PUT _ilm/policy/timeseries_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_primary_shard_size": "50GB",
"max_age": "30d"
}
}
},
"delete": {
"min_age": "90d",
"actions": {
"delete": {}
}
}
}
}
} | Значение | |
| Вызвать действие | |
| Переместить индекс в фазу | |
| Вызвать действие |
Создать шаблон индекса для создания потока данных и применения политики жизненного цикла
Для настройки потока данных сначала необходимо создать шаблон индекса для указания политики жизненного цикла. Поскольку шаблон предназначен для потока данных, он также должен включать определение data_stream.
Например, вы можете создать timeseries_template для использования в будущем потоке данных под названием timeseries.
Чтобы позволить ILM управлять потоком данных, шаблон настраивает одну настройку ILM:
-
index.lifecycle.nameуказывает имя политики жизненного цикла, которую необходимо применить к потоку данных.
Вы можете использовать мастер создания шаблонов Kibana для добавления шаблона. В Kibana откройте меню и перейдите к Управление стеком > Управление индексами. На вкладке Шаблоны индексов нажмите Создать шаблон.
Этот мастер вызывает API создания или обновления шаблона индекса для создания шаблона индекса с указанными вами параметрами.
Пример API
PUT _index_template/timeseries_template
{
"index_patterns": ["timeseries"],
"data_stream": { },
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "timeseries_policy"
}
}
} | Применить шаблон при индексировании документа в целевой | |
| Имя политики ILM, используемой для управления потоком данных. |
Создать поток данных
Для начала проиндексируйте документ в имя или шаблон подстановок, определённые в index_patterns шаблона индекса. Пока имя не используется существующим потоком данных, индексом или псевдонимом индекса, запрос индекса автоматически создаёт соответствующий поток данных с единственным подключаемым индексом. Elasticsearch автоматически индексирует документы запроса в этот подключаемый индекс, который также выступает в качестве индекса записи потока.
Например, следующий запрос создаёт поток данных timeseries и первый подключаемый индекс генерации под названием .ds-timeseries-2099.03.08-000001.
POST timeseries/_doc
{
"message": "logged the request",
"@timestamp": "1591890611"
} Когда выполняется условие переноса в политике жизненного цикла, действие rollover:
- Создаёт подключаемый индекс второй генерации под названием
.ds-timeseries-2099.03.08-000002. Поскольку это подключаемый индекс потока данныхtimeseries, конфигурация из шаблона индексаtimeseries_templateприменяется к новому индексу. - Поскольку это последний индекс генерации потока данных
timeseries, недавно созданный подключаемый индекс.ds-timeseries-2099.03.08-000002становится индексом записи потока данных.
Этот процесс повторяется каждый раз, когда выполняется условие переноса. Вы можете выполнить поиск по всем подключаемым индексам потока данных, управляемым timeseries_policy, с помощью имени потока данных timeseries. Операции записи должны отправляться в имя потока данных, что перенаправит их на текущий индекс записи. Операции чтения потока данных будут обрабатываться всеми его подключаемыми индексами.
Проверка хода выполнения жизненного цикла
Для получения информации о состоянии управляемых индексов используется API объяснения ILM. Это позволяет узнать такие вещи, как:
- В какой фазе находится индекс и когда он вошел в эту фазу.
- Текущее действие и выполняемый шаг.
- Произошли ли какие-либо ошибки или заблокирован ли прогресс.
Например, следующий запрос получает информацию о подключаемых индексах потока данных timeseries:
GET .ds-timeseries-*/_ilm/explain
Следующий ответ показывает, что первый подключаемый индекс потока данных находится в ожидании действия rollover фазы hot. Он остается в этом состоянии, и ILM продолжает вызывать check-rollover-ready, пока не выполнится условие переноса.
{
"indices": {
".ds-timeseries-2099.03.07-000001": {
"index": ".ds-timeseries-2099.03.07-000001",
"managed": true,
"policy": "timeseries_policy",
"lifecycle_date_millis": 1538475653281,
"age": "30s",
"phase": "hot",
"phase_time_millis": 1538475653317,
"action": "rollover",
"action_time_millis": 1538475653317,
"step": "check-rollover-ready",
"step_time_millis": 1538475653317,
"phase_execution": {
"policy": "timeseries_policy",
"phase_definition": {
"min_age": "0ms",
"actions": {
"rollover": {
"max_primary_shard_size": "50gb",
"max_age": "30d"
}
}
},
"version": 1,
"modified_date_in_millis": 1539609701576
}
}
}
} | Политика, используемая для управления индексом | |
| Возраст индекса | |
| Шаг, выполняемый ILM над индексом | |
| Определение текущей фазы (фаза |
Управление данными временных рядов без потоков данных
Несмотря на то, что потоки данных являются удобным способом масштабирования и управления временными рядами данных, они разработаны для добавления данных только в конец. Мы признаем, что могут быть случаи использования, когда данные необходимо обновлять или удалять на месте, и потоки данных не поддерживают запросы на удаление и обновление напрямую, поэтому необходимо напрямую использовать API индексов для индексов, лежащих в основе потоков данных.
В этих случаях вы можете использовать псевдоним индекса для управления индексами, содержащими временные ряды данных, и периодически переключаться на новый индекс.
Для автоматизации переключения и управления индексами временных рядов с помощью ILM с использованием псевдонима индекса, необходимо:
- Создайте политику жизненного цикла, которая определяет соответствующие фазы и действия. См. создание политики жизненного цикла выше.
- Создайте шаблон индекса для применения политики к каждому новому индексу.
- Запустите индекс в качестве начального индекса записи.
- Проверьте, что индексы проходят фазы жизненного цикла как ожидается.
Создайте шаблон индекса для применения политики жизненного цикла
Чтобы автоматически применить политику жизненного цикла к новому индексу записи при переключении, укажите политику в шаблоне индекса, используемом для создания новых индексов.
Например, вы можете создать timeseries_template, который применяется к новым индексам, имена которых соответствуют timeseries-* шаблону индекса.
Для включения автоматического переключения, шаблон настраивает два параметра ILM:
-
index.lifecycle.nameуказывает имя политики жизненного цикла, которую следует применять к новым индексам, соответствующим шаблону индекса. -
index.lifecycle.rollover_aliasуказывает псевдоним индекса, который должен быть переключен при срабатывании действия переключения для индекса.
Вы можете использовать мастер создания шаблонов Kibana для добавления шаблона. Для доступа к мастеру откройте меню и перейдите к Управление стеком > Управление индексами. На вкладке Шаблоны индексов нажмите Создать шаблон.
Запрос на создание шаблона для примерного шаблона выглядит следующим образом:
PUT _index_template/timeseries_template
{
"index_patterns": ["timeseries-*"],
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "timeseries_policy",
"index.lifecycle.rollover_alias": "timeseries"
}
}
} | Примените шаблон к новому индексу, если его имя начинается с | |
| Имя политики жизненного цикла, которую необходимо применять к каждому новому индексу. | |
| Имя псевдонима, используемого для ссылки на эти индексы. Требуется для политик, использующих действие переключения. |
Запуск начального индекса временного ряда с псевдонимом индекса записи
Для начала необходимо запустить начальный индекс и назначить его индексом записи для псевдонима переключения, указанного в шаблоне индекса. Имя этого индекса должно совпадать с шаблоном индекса и заканчиваться числом. При переключении это значение увеличивается для генерации имени нового индекса.
Например, следующий запрос создает индекс под названием timeseries-000001 и делает его индексом записи для псевдонима timeseries.
PUT timeseries-000001
{
"aliases": {
"timeseries": {
"is_write_index": true
}
}
} Когда выполняются условия переключения, действие rollover:
- Создает новый индекс под названием
timeseries-000002. Это соответствует шаблонуtimeseries-*, поэтому настройки изtimeseries_templateприменяются к новому индексу. - Назначает новый индекс индексом записи и делает индекс запуска только для чтения.
Этот процесс повторяется каждый раз, когда выполняются условия переключения. Вы можете искать во всех индексах, управляемых timeseries_policy с псевдонимом timeseries. Операции записи должны отправляться в псевдоним, который будет маршрутизировать их в текущий индекс записи.
Проверка хода жизненного цикла
Получение информации о состоянии управляемых индексов очень похоже на случай с потоками данных. См. раздел проверки хода потоков данных для получения дополнительной информации. Единственное отличие – это пространство имен индексов, поэтому получение хода будет включать следующий вызов API:
GET timeseries-*/_ilm/explain
© 2023-2025 Elasticsearch
As of September 2024, Elasticsearch is available under a choice of three licenses: the Server Side Public License (SSPL), the Elastic License, or the AGPLv3 (OSI approved).
Elasticsearch and the Elasticsearch logo are trademarks of Elasticsearch B.V., registered in the U.S. and in other countries.
https://www.elastic.co/guide/en/elasticsearch/reference/7.17/getting-started-index-lifecycle-management.html