【Elasticsearch】自定义内置的索引生命周期管理(ILM)策略。
以下是对 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 策略,并将其应用于实际的数据管理场景中。