在 Elasticsearch 中创建索引生命周期管理策略
索引生命周期管理 (ILM) 策略定义了索引如何随时间在不同阶段之间转换。本指南介绍了如何创建一个具有可配置的滚动、保留和删除规则的新 ILM 策略,然后使用索引模板应用该策略。
您可以使用 ILM 管理索引和数据流。设置 ILM 与数据流配合使用所需的配置步骤更少。相比之下,将 ILM 与索引配合使用时,除了定义策略和创建模板来应用它之外,还需要创建初始托管索引和别名。本页面介绍了这两种场景下配置 ILM 生命周期策略的步骤。
创建 ILM 策略时请考虑以下方面
要使用 ILM 管理索引或数据流,您需要在
index.lifecycle.name索引设置中指定有效的策略。要为滚动索引或数据流配置生命周期策略,您可以创建策略并将其添加到索引模板中。通常建议使用数据流而非滚动索引,因为所需的手动配置较少。当您将 ILM 与滚动索引配合使用时,还必须创建一个初始托管索引(确保命名合适)并为其分配一个别名。此附加过程在本页面的第 3 步中介绍。
要使用策略管理单个索引,您可以在创建索引时指定生命周期策略,或者直接将策略应用于现有索引。
ILM 策略存储在全局集群状态中,并且可以通过在创建快照时将
include_global_state设置为true来包含在快照中。恢复快照时,全局状态中的所有策略都会被恢复,并且任何同名的本地策略都会被覆盖。
要设置 ILM 以管理一个或多个索引,基本流程如下
如果您正在为滚动索引配置 ILM 且未使用数据流,则还需要
您可以在 Kibana 或使用 Elasticsearch API 执行这些操作。
生命周期策略定义了一组索引生命周期阶段以及要在每个阶段对托管索引执行的操作。
要将 ILM 策略添加到 Elasticsearch 集群
使用导航菜单或全局搜索字段转到 Index Lifecycle Policies 管理页面。
选择 Create policy(创建策略)。

为生命周期策略指定一个名称。稍后,当您创建索引模板以定义如何创建索引时,您将使用此名称将生命周期策略分配给每个索引。
在 Hot phase(热阶段)中,默认情况下,当满足以下任一条件时,会执行滚动索引生命周期操作
- 索引达到 30 天。
- 一个或多个主分片达到 50 GB 大小。
禁用 Use recommended defaults(使用推荐的默认值)以调整这些值,或者根据主分片的大小、主分片中的文档数量或索引中的文档总数进行滚动。
重要提示如果一个或多个分片包含 200,000,000 个或更多文档,滚动操作会隐式滚动数据流或别名。通常,分片在达到 2 亿个文档之前会先达到 50GB,但是,对于空间效率高的数据集并非如此。此内置限制的存在是为了避免分片包含超过 2 亿个文档时出现搜索性能损失。有关推荐限制的更多信息,请参阅调整分片大小。
默认情况下,仅启用热生命周期阶段。启用您想要的每个附加生命周期阶段,并为每个阶段选择要在索引进入该阶段时执行的任何索引生命周期操作。
例如,您可以选择下采样索引的操作,它将时间序列数据聚合为统计摘要,从而减少数据存储大小。
注意对于热阶段之后的每个阶段,您可以选择在经过一定时间后将数据移动到下一阶段。此持续时间是从索引滚动时间开始计算的,而不是从索引创建时间开始计算的。
对于启用的最后阶段,您可以选择将数据永久保留在该阶段中,或者在指定时间后删除数据。
使用 创建或更新策略 API 将 ILM 策略添加到 Elasticsearch 集群中
PUT _ilm/policy/my_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_primary_shard_size": "25GB"
}
}
},
"delete": {
"min_age": "30d",
"actions": {
"delete": {}
}
}
}
}
}
- 当一个或多个主分片达到 25GB 时滚动索引。
- 在滚动后 30 天删除索引
如果一个或多个分片包含 200,000,000 个或更多文档,滚动操作会隐式滚动数据流或别名。通常,分片在达到 2 亿个文档之前会先达到 50GB,但是,对于空间效率高的数据集并非如此。此内置限制的存在是为了避免分片包含超过 2 亿个文档时出现搜索性能损失。
要使用触发滚动操作的生命周期策略,您需要在用于创建每个新索引的索引模板中配置该策略。您需要指定策略的名称以及用于引用滚动索引的别名。
如果您已有想要添加 ILM 策略的索引模板,可以通过 Index Lifecycle Policies(索引生命周期策略)管理页面进行操作。搜索并选择您想要的策略,然后从 Actions(操作)菜单中选择 Add to index template(添加到索引模板)。
要向集群添加索引模板并将生命周期策略应用于匹配该模板的索引
使用导航菜单或全局搜索字段转到 Index Management 页面。
在 索引模板 (Index Templates) 选项卡中,选择 创建模板 (Create template)。

在 Logistics 页面上
为模板指定名称。
指定与您要使用生命周期策略管理的索引相匹配的模式。例如,
my-index-*。如果您存储的是持续生成的仅追加数据,您可以选择创建数据流而不是索引,以实现更高效的存储。
注意当您启用数据流选项时,设置 Data retention(数据保留)的选项也会变得可用。由于您正在创建索引生命周期策略来管理索引,因此 Data retention(数据保留)选项必须保持禁用状态。数据保留仅在使用数据流生命周期(ILM 的替代方案)时适用。请参阅数据流生命周期以了解更多信息。
配置您想要的任何其他选项,包括
- 创建的索引要使用的索引模式。
- 模板优先级、版本和任何元数据。
- 是否覆盖
action.auto_create_index集群设置。
有关这些选项的详细信息,请参阅创建或更新索引模板 API 文档。
在 Component templates(组件模板)页面上,使用搜索和过滤工具选择要包含在索引模板中的任何组件模板。索引模板将继承组件模板中定义的设置、映射和别名,并在创建索引时将其应用于索引。
在 Index settings(索引设置)页面上
可选:在 Mappings(映射)页面上,自定义将文档索引到 Elasticsearch 中时使用的字段和数据类型。有关详细信息,请参阅映射。
可选:在 Aliases(别名)页面上,为每个创建的索引指定一个别名。配置 ILM 时不需要这样做,ILM 改为使用
index.lifecycle.rollover_alias设置来访问滚动索引。在 Review(审查)页面上,确认您的选择。您可以检查所选选项,以及将要创建的索引模板的格式和关联的 API 请求。
新创建的索引模板将用于所有名称匹配指定模式的新索引,并且对于其中的每一个索引,都将应用指定的 ILM 策略。
使用创建或更新索引模板 API 将索引模板添加到集群,并将生命周期策略应用于匹配模板的索引
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"
}
}
}
将此模板用于所有以
test-开头名称的新索引。将
my_policy应用于使用此模板创建的新索引。定义一个索引别名,用于引用由
my_policy管理的索引。提示index.lifecycle.rollover_alias设置仅在使用带有别名的索引生命周期管理时才是必需的。在使用数据流时则不需要它。
当您为自己的滚动索引设置策略且未使用推荐的数据流时,必须手动创建由策略管理的首个索引并将其指定为写入索引。
索引名称必须匹配索引模板中定义的模式并以数字结尾。此数字会递增,以生成由滚动操作创建的索引名称。
此步骤仅在您计划将 ILM 与滚动索引配合使用时才需要。在使用数据流时不需要此步骤,因为初始托管索引是自动创建的。
当您为 Beats、Elastic Agent 或 Elastic Agent 或 Logstash Elasticsearch 输出插件启用索引生命周期管理时,必要的策略和配置更改会自动应用。如果您想为任何数据流创建专门的 ILM 策略,请参阅我们的教程自定义 Elasticsearch 中的内置 ILM 策略。
要创建初始托管索引
- 使用导航菜单或全局搜索字段转到 Index Management 页面。
- 在 Indices(索引)选项卡中,选择 Create index(创建索引)。
- 指定一个与索引模板模式匹配且以数字结尾的索引名称。例如,
test-000001。 - 将 Index mode(索引模式)保留为默认的 Standard(标准)。
为索引创建别名
- 打开 Dev tools(开发工具)。
- 发送以下请求
POST /_aliases
{
"actions" : [
{ "add" : { "index" : "my-index", "alias" : "my-alias" } }
]
}
- 将
my-index替换为您之前创建的初始托管索引的名称,并将my-alias设置为索引模板中index.lifecycle.rollover_alias指定的滚动别名。
现在,您可以开始将数据索引到生命周期策略中指定的滚动别名。使用示例 my_policy 策略,一旦初始索引超过 50GB,就会触发滚动操作。然后,ILM 会创建一个新索引,该索引将成为 test-alias 的写入索引。
使用创建索引 API 创建初始托管索引。
以下请求创建了 test-000001 索引,并带有别名 test-alias。因为索引名称匹配 my_template 中指定的索引模式,Elasticsearch 会自动应用该模板中的设置。
PUT test-000001
{
"aliases": {
"test-alias":{
"is_write_index": true
}
}
}
- 将此初始索引设置为该别名的写入索引。
现在,您可以开始将数据索引到生命周期策略中指定的滚动别名。使用示例 my_policy 策略,一旦初始索引超过 25GB,就会触发滚动操作。然后,ILM 会创建一个新索引,该索引将成为 test-alias 的写入索引。