Настройка политики жизненного цикла
Для управления индексом с помощью ILM необходимо указать корректную политику в настройке индекса index.lifecycle.name.
Для настройки политики жизненного цикла для ролизируемых индексов необходимо создать политику и добавить её в шаблон индекса.
Чтобы использовать политику для управления индексом, который не ролизируется, можно указать политику жизненного цикла при создании индекса или применить политику к существующему индексу.
Политики ILM хранятся в глобальном состоянии кластера и могут быть включены в снимки, установив include_global_state на значение true при создании снимка. При восстановлении снимка все политики из глобального состояния будут восстановлены, и любые локальные политики с теми же именами будут перезаписаны.
При включении управления жизненным циклом индексов для Beats или плагина Logstash Elasticsearch output, необходимые политики и изменения конфигурации применяются автоматически. Вы можете изменить политики по умолчанию, но не нужно явно настраивать политику или создавать начальный индекс.
Создание политики жизненного цикла
Для создания политики жизненного цикла из Kibana откройте меню и перейдите к Управление стеком > Политики жизненного цикла индексов. Нажмите Создать политику.
Вы указываете фазы жизненного цикла для политики и действия, которые должны быть выполнены на каждой фазе.
Для добавления политики в кластер Elasticsearch вызывается API создания или обновления политики.
Пример API
resp = client.ilm.put_lifecycle(
name="my_policy",
policy={
"phases": {
"hot": {
"actions": {
"rollover": {
"max_primary_shard_size": "25GB"
}
}
},
"delete": {
"min_age": "30d",
"actions": {
"delete": {}
}
}
}
},
)
print(resp) response = client.ilm.put_lifecycle(
policy: 'my_policy',
body: {
policy: {
phases: {
hot: {
actions: {
rollover: {
max_primary_shard_size: '25GB'
}
}
},
delete: {
min_age: '30d',
actions: {
delete: {}
}
}
}
}
}
)
puts response const response = await client.ilm.putLifecycle({
name: "my_policy",
policy: {
phases: {
hot: {
actions: {
rollover: {
max_primary_shard_size: "25GB",
},
},
},
delete: {
min_age: "30d",
actions: {
delete: {},
},
},
},
},
});
console.log(response); PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_primary_shard_size": "25GB"
}
}
},
"delete": {
"min_age": "30d",
"actions": {
"delete": {}
}
}
}
}
} | Ролизировать индекс, когда его размер достигнет 25 ГБ | |
| Удалить индекс через 30 дней после ролизации |
Действие ролизации подразумевает всегда ролизацию потока данных или алиаса, если один или несколько фрагментов содержат 200000000 или более документов. Обычно фрагмент достигнет 25 ГБ намного раньше, чем достигнет 200 млн. документов, но это не так для наборов данных с высокой плотностью. Производительность поиска, очень вероятно, пострадает, если фрагмент содержит более 200 млн. документов. Вот почему существует встроенное ограничение.
Применение политики жизненного цикла с шаблоном индекса
Для использования политики, которая запускает действие ролизации, необходимо настроить политику в шаблоне индекса, используемом для создания каждого нового индекса. Укажите имя политики и алиас, используемый для ссылки на ролизируемые индексы.
Настройка index.lifecycle.rollover_alias требуется только при использовании управления жизненным циклом индексов с алиасом. Она не нужна при использовании потоков данных.
Шаблон можно создать с помощью мастера создания шаблонов Kibana. Для доступа к мастеру откройте меню и перейдите к Управление стеком > Управление индексами. На вкладке Шаблоны индексов нажмите Создать шаблон.
Мастер вызовет API создания или обновления шаблона индекса для добавления шаблонов в кластер.
Пример API
resp = client.indices.put_index_template(
name="my_template",
index_patterns=[
"test-*"
],
template={
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "my_policy",
"index.lifecycle.rollover_alias": "test-alias"
}
},
)
print(resp) response = client.indices.put_index_template(
name: 'my_template',
body: {
index_patterns: [
'test-*'
],
template: {
settings: {
number_of_shards: 1,
number_of_replicas: 1,
'index.lifecycle.name' => 'my_policy',
'index.lifecycle.rollover_alias' => 'test-alias'
}
}
}
)
puts response const response = await client.indices.putIndexTemplate({
name: "my_template",
index_patterns: ["test-*"],
template: {
settings: {
number_of_shards: 1,
number_of_replicas: 1,
"index.lifecycle.name": "my_policy",
"index.lifecycle.rollover_alias": "test-alias",
},
},
});
console.log(response); PUT _index_template/my_template
{
"index_patterns": ["test-*"],
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "my_policy",
"index.lifecycle.rollover_alias": "test-alias"
}
}
} | Используйте этот шаблон для всех новых индексов, имена которых начинаются с | |
| Примените | |
| Определите алиас индекса для ссылки на индексы, управляемые |
Создание начального управляемого индекса
При настройке политик для собственных ролизируемых индексов, если вы не используете рекомендуемые потоки данных, вам необходимо вручную создать первый индекс, управляемый политикой, и назначить его в качестве индекса записи.
При включении управления жизненным циклом индексов для Beats или плагина Logstash Elasticsearch output, необходимые политики и изменения конфигурации применяются автоматически. Вы можете изменить политики по умолчанию, но не нужно явно настраивать политику или создавать начальный индекс.
Имя индекса должно соответствовать шаблону, определенному в шаблоне индекса, и заканчиваться числом. Это число увеличивается для генерации имени индексов, созданных действием ролизации.
Например, следующий запрос создает индекс test-00001. Поскольку он соответствует шаблону индекса, указанному в my_template, Elasticsearch автоматически применяет настройки из этого шаблона.
resp = client.indices.create(
index="test-000001",
aliases={
"test-alias": {
"is_write_index": True
}
},
)
print(resp) response = client.indices.create(
index: 'test-000001',
body: {
aliases: {
"test-alias": {
is_write_index: true
}
}
}
)
puts response const response = await client.indices.create({
index: "test-000001",
aliases: {
"test-alias": {
is_write_index: true,
},
},
});
console.log(response); PUT test-000001
{
"aliases": {
"test-alias":{
"is_write_index": true
}
}
} | Установите этот начальный индекс в качестве индекса записи для этого алиаса. |
Теперь вы можете начать индексирование данных в алиас ролизации, указанный в политике жизненного цикла. С примерной политикой my_policy действие ролизации запускается, когда начальный индекс превышает 25 ГБ. ILM затем создает новый индекс, который становится индексом записи для test-alias.
Применить политику жизненного цикла вручную
Вы можете указать политику при создании индекса или применить политику к существующему индексу через Kibana Management или API обновления настроек. При применении политики ILM немедленно начинает управлять индексом.
Не применяйте вручную политику, использующую действие ролизации. Политики, использующие ролизацию, должны применяться через шаблон индекса. В противном случае политика не будет перенесена при создании нового индекса действием ролизации.
Настройка index.lifecycle.name определяет политику индекса.
Пример API
resp = client.indices.create(
index="test-index",
settings={
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "my_policy"
},
)
print(resp) response = client.indices.create(
index: 'test-index',
body: {
settings: {
number_of_shards: 1,
number_of_replicas: 1,
'index.lifecycle.name' => 'my_policy'
}
}
)
puts response const response = await client.indices.create({
index: "test-index",
settings: {
number_of_shards: 1,
number_of_replicas: 1,
"index.lifecycle.name": "my_policy",
},
});
console.log(response); PUT test-index
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "my_policy"
}
} | Устанавливает политику жизненного цикла для индекса. |
Применение политики к нескольким индексам
Вы можете применить одну и ту же политику к нескольким индексам, используя подстановочные знаки в имени индекса при вызове API обновления настроек.
Будьте внимательны, чтобы случайно не изменить индексы, которые вы не хотите изменять.
resp = client.indices.put_settings(
index="mylogs-pre-ilm*",
settings={
"index": {
"lifecycle": {
"name": "mylogs_policy_existing"
}
}
},
)
print(resp) response = client.indices.put_settings(
index: 'mylogs-pre-ilm*',
body: {
index: {
lifecycle: {
name: 'mylogs_policy_existing'
}
}
}
)
puts response const response = await client.indices.putSettings({
index: "mylogs-pre-ilm*",
settings: {
index: {
lifecycle: {
name: "mylogs_policy_existing",
},
},
},
});
console.log(response); PUT mylogs-pre-ilm*/_settings
{
"index": {
"lifecycle": {
"name": "mylogs_policy_existing"
}
}
} | Обновляет все индексы с именами, которые начинаются с |
Переключение политик жизненного цикла
Для переключения политики жизненного цикла индекса выполните следующие действия:
-
Удалите существующую политику, используя API удаления политики. Укажите поток данных или псевдоним, чтобы удалить политики всех его индексов.
resp = client.ilm.remove_policy( index="logs-my_app-default", ) print(resp)response = client.ilm.remove_policy( index: 'logs-my_app-default' ) puts response
const response = await client.ilm.removePolicy({ index: "logs-my_app-default", }); console.log(response);POST logs-my_app-default/_ilm/remove
-
API удаления политики удаляет все метаданные ILM из индекса и не учитывает состояние жизненного цикла индекса. Это может привести к нежелательному состоянию индексов.
Например, действие
forcemergeвременно закрывает индекс перед его повторным открытием. Удаление политики ILM индекса во времяforcemergeможет привести к тому, что индекс останется закрытым неопределённо.После удаления политики используйте API получения индекса, чтобы проверить состояние индекса. Укажите поток данных или псевдоним, чтобы получить состояние всех его индексов.
resp = client.indices.get( index="logs-my_app-default", ) print(resp)response = client.indices.get( index: 'logs-my_app-default' ) puts response
const response = await client.indices.get({ index: "logs-my_app-default", }); console.log(response);GET logs-my_app-default
Затем вы можете изменить индекс по мере необходимости. Например, вы можете повторно открыть любые закрытые индексы, используя API открытия индекса.
resp = client.indices.open( index="logs-my_app-default", ) print(resp)response = client.indices.open( index: 'logs-my_app-default' ) puts response
const response = await client.indices.open({ index: "logs-my_app-default", }); console.log(response);POST logs-my_app-default/_open
-
Назначьте новую политику, используя API обновления настроек. Укажите поток данных или псевдоним, чтобы назначить политику всем его индексам.
Не назначайте новую политику, не удалив сначала существующую. Это может привести к незаметному отказу выполнения фазы.
resp = client.indices.put_settings( index="logs-my_app-default", settings={ "index": { "lifecycle": { "name": "new-lifecycle-policy" } } }, ) print(resp)response = client.indices.put_settings( index: 'logs-my_app-default', body: { index: { lifecycle: { name: 'new-lifecycle-policy' } } } ) puts responseconst response = await client.indices.putSettings({ index: "logs-my_app-default", settings: { index: { lifecycle: { name: "new-lifecycle-policy", }, }, }, }); console.log(response);PUT logs-my_app-default/_settings { "index": { "lifecycle": { "name": "new-lifecycle-policy" } } }
© 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/8.17/set-up-lifecycle-policy.html