【Elasticsearch】自定义内置的索引生命周期管理(ILM)策略。

时间:2025-03-04 13:03:48

以下是对 Elasticsearch 官方教程《Customize built-in ILM policies》的详细解读,结合原文内容,帮助您更好地理解如何自定义内置的索引生命周期管理(ILM)策略。

---

Elasticsearch 教程:自定义内置 ILM 策略

1.背景与目标

Elasticsearch 提供了内置的索引生命周期管理(ILM)策略,例如`logs@lifecycle`、`metrics@lifecycle`和`synthetics@lifecycle`。这些策略主要用于管理 Elastic Agent 收集的数据流(data streams)的后端索引。然而,这些默认策略可能无法完全满足您的性能、弹性和数据保留需求。因此,Elasticsearch 允许用户根据自己的需求自定义这些策略。

本教程的目标是帮助您根据以下需求自定义 ILM 策略:

• 当写入索引的主分片大小达到 50GB 或索引满 30 天时,滚动到新索引。

• 滚动后,将索引保留在热数据层 30 天。

• 滚动 30 天后,将索引移动到温数据层,设置副本分片数为 1,并强制合并索引段以释放已删除文档占用的空间。

• 滚动 90 天后删除索引。

2.前提条件

在开始自定义 ILM 策略之前,您需要准备以下环境:

2.1 Elasticsearch 集群

• 热数据层(Hot Tier):用于存储最近的数据,提供高性能的读写操作。

• 温数据层(Warm Tier):用于存储较旧的数据,适合读取操作,但写入性能较低。

如果使用Elasticsearch 服务:

• 默认情况下,Elastic Stack 部署包含热层。

• 要添加温层,可以通过编辑部署并点击“添加温数据层的容量”来完成。

如果使用自管集群:

• 需要为节点分配`data_hot`和`data_warm`角色。

• 例如,在温层的每个节点的`elasticsearch.yml`文件中添加以下配置:

```yaml

  node.roles: [data_warm]

  ```

2.2 Elastic Agent

• 需要一个安装并配置好的 Elastic Agent,用于将日志数据发送到 Elasticsearch 集群。

• Elastic Agent 使用数据流(data streams)存储日志监控数据,索引模式为`logs-*-*`。

3.自定义 ILM 策略

3.1 查看默认的 ILM 策略

默认的`logs@lifecycle`策略会自动管理`logs-*-*`数据流的后端索引。该策略的默认行为如下:

• 当写入索引的主分片大小达到 50GB 或索引满 30 天时,滚动到新索引。

• 该策略旨在防止创建许多微小的每日索引。

3.2 创建新的 ILM 策略

由于直接编辑管理的策略可能会被回滚或覆盖,因此建议将默认策略另存为新策略,并对其进行自定义。

1. 打开 Kibana:

• 转到堆栈管理(Stack Management)>索引生命周期策略(Index Lifecycle Policies)。

• 切换“包含管理的系统策略(Include managed system policies)”以显示默认的`logs@lifecycle`策略。

2. 另存为新策略:

• 选择`logs@lifecycle`策略。

• 在“编辑策略日志(Edit policy logs)”页面上,切换“另存为新策略(Save as new policy)”,并为新策略命名,例如`logs-custom`。

3.3 自定义策略的阶段和设置

ILM 策略包含多个阶段(Phase),每个阶段都有特定的行为和设置。我们将根据需求自定义以下阶段:

3.3.1 热阶段(Hot Phase)

• 滚动设置(Rollover Settings):

• 默认情况下,`logs@lifecycle`策略会在索引的主分片大小达到 50GB 或索引满 30 天时滚动到新索引。

• 如果需要修改滚动条件,可以点击“高级设置(Advanced settings)”,并禁用“使用推荐默认值(Use recommended defaults)”。

• 例如,可以将滚动条件设置为“索引大小达到 40GB 或索引满 20 天”。

3.3.2 温阶段(Warm Phase)

• 激活温阶段:

• 默认情况下,`logs@lifecycle`策略可能没有启用温阶段。您需要手动启用并配置它。

• 点击“高级设置(Advanced settings)”。

• 设置“将数据移入阶段的时间(Move data into phase when)”为“30 天旧”,表示在滚动 30 天后将索引移至温层。

• 启用“设置副本(Set replicas)”,并将“副本数量(Number of replicas)”设置为 1。

• 启用“强制合并数据(Force merge data)”,并将“段数(Number of segments)”设置为 1。这有助于释放已删除文档占用的空间。

3.3.3 删除阶段(Delete Phase)

• 启用删除阶段:

• 在温阶段,点击垃圾桶图标以启用删除阶段。

• 在删除阶段,设置“将数据移入阶段的时间(Move data into phase when)”为“90 天旧”,表示在滚动 90 天后删除索引。

3. 保存新策略:

• 完成所有配置后,点击“保存为新策略(Save as new policy)”。

4.应用新的 ILM 策略

创建并配置好新的 ILM 策略后,需要将其应用于`logs`索引模板,以便 Elastic Agent 使用该策略管理日志数据。

1. 创建组件模板(Component Template):

• 转到 Kibana 的组件模板(Component Templates)页面。

• 点击“创建组件模板(Create component template)”。

• 命名组件模板为`logs@custom`。

• 在“索引设置(Index settings)”中,指定新创建的 ILM 策略名称:

```json

     {

       "index": {

         "lifecycle": {

           "name": "logs-custom"

         }

       }

     }

     ```

• 审核并保存组件模板。

2. 更新索引模板(Index Template):

• 转到索引模板(Index Templates)页面。

• 选择`logs`索引模板。

• 查看“组件模板(Component templates)”列表,确认`logs@custom`组件模板已被添加。

5.总结

通过以上步骤,您可以根据自己的需求自定义 Elasticsearch 的内置 ILM 策略。自定义策略允许您灵活地管理索引的生命周期,包括滚动、数据层迁移、副本设置以及索引的最终删除。这有助于优化集群的性能、资源利用率和数据保留策略。

 

 

6.注意事项

• 不要直接编辑管理的策略:直接修改默认的管理策略可能会导致策略被回滚或覆盖。建议始终通过“另存为新策略”的方式来创建自定义策略。

• 测试新策略:在生产环境中应用新策略之前,建议在测试环境中验证其行为,确保它符合您的预期。

• 监控与调整:ILM 策略的设置可能需要根据实际使用情况进行调整。建议定期监控集群的性能和资源使用情况,并根据需要优化策略。

通过本教程,您应该能够根据自己的需求自定义 Elasticsearch 的 ILM 策略,并将其应用于实际的数据管理场景中。