自定义 Elasticsearch 中的内置 ILM 策略
Elasticsearch 包含多种内置的索引生命周期管理 (ILM) 策略,旨在帮助您高效地管理日志和指标。本教程将向您展示如何安全地复制和自定义这些策略,以优化滚动更新及其他操作,控制跨热数据层和温数据层的资源使用情况,并强制执行索引的保留规则。
请按照以下步骤创建内置 ILM 策略的自定义副本。切勿直接编辑受管策略,因为 Elasticsearch 或 Elastic 集成的更新可能会覆盖这些更改。相反,您可以复制内置策略,修改副本,并将其分配给您的索引或组件模板。
虽然本教程以 Elastic Agent 及其内置的 logs@lifecycle 策略为例,但同样的过程适用于任何内置策略。常见示例包括
logs@lifecyclemetrics@lifecyclesynthetics@lifecycletraces@lifecycle
当您有特定的数据保留或滚动更新要求时,自定义 ILM 策略非常有用。例如,大型日志或指标数据流可能需要与内置默认值不同的保留期限。
在 Elastic Stack 9.3 及更高版本中,已弃用的 logs、metrics 和 synthetics ILM 策略已被功能等效的 {type}@lifecycle 策略所取代,以符合其他受管资产的命名惯例。
如果已弃用的 ILM 策略及其 {type}@lifecycle 替代项均未被修改,Fleet 会自动迁移仍引用已弃用 ILM 策略的组件模板。
如果任一受管 ILM 策略已被修改,您需要手动迁移自定义设置。请按照本教程创建一个包含自定义设置的自管 ILM 策略,并在相关的 {type}@custom 组件模板中引用它。
本教程涵盖了如何自定义已摄入日志数据的管理方式。与其使用内置 logs@lifecycle ILM 策略中的默认生命周期设置,不如使用 Kibana 中的索引生命周期策略功能,根据应用程序的特定性能、弹性和保留要求来定制新策略。您可以针对管理数据流的任何策略采用相同的步骤。
该过程包括三个主要步骤
应用后,您的自定义策略将管理更改后创建的任何新索引。现有索引将继续使用其当前的生命周期策略,直到它们进行滚动更新。如果您希望策略立即生效,可以手动滚动更新数据流。
如果您正在使用 Elastic 集成,并且尚不熟悉哪些数据流与它们相关联,请参阅管理集成数据生命周期策略。
如果您在寻找更高级的用例,例如为一个或多个集成或命名空间中的特定数据流集自定义 ILM 策略,请查看 Fleet 和 Elastic Agent 参考文档中教程:自定义数据保留策略中的一系列教程。
这些教程深入探讨了如何创建和使用
@custom组件模板。例如,教程将 ILM 策略应用于跨所有命名空间的 Fleet 集成生成的所有数据流展示了如何创建和使用logs@custom和metrics@custom组件模板来自定义与集成中数据流关联的 ILM 策略。
您希望将日志文件发送到 Elasticsearch 集群,以便能够可视化和分析数据。此数据具有以下保留要求
当写入索引的主分片大小达到 50GB 或索引已存在 30 天时,滚动更新到新索引。
滚动更新后,将索引保留在热数据层中 30 天。
滚动更新 30 天后
- 将索引移动到温数据层。
- 将副本分片设置为 1。
- 强制合并多个索引段以释放已删除文档所占用的空间。
滚动更新 90 天后删除索引。
要完成本教程,您需要
一个具有热数据层和温数据层的 Elasticsearch 集群。
Elastic Cloud Hosted:Elastic Cloud 上的 Elastic Stack 部署默认包含热数据层。要添加温数据层,请编辑您的部署并点击温数据层的添加容量。
自管集群:按照数据层中的说明,为节点分配
data_hot和data_warm角色。例如,在温数据层中每个节点的
elasticsearch.yml文件中包含data_warm节点角色node.roles: [ data_warm ]
一台安装并配置了 Elastic Agent 以将日志发送到您的 Elasticsearch 集群的主机。
Elastic Agent 使用索引模式为 logs-*-* 的数据流来存储日志监控数据。受管的 logs@lifecycle ILM 策略会自动管理这些数据流的后端索引。
如果您不想使用策略默认值,那么可以自定义受管策略,然后将其保存为新策略。之后,您可以在相关的组件模板和索引模板中使用该新策略。
切勿直接编辑受管策略。对受管策略的更改可能会被回滚或覆盖。
要在 Kibana 中将 logs@lifecycle 策略另存为新策略
- 使用导航菜单或全局搜索字段转到 Index Lifecycle Policies 管理页面。
- 切换包含受管系统策略。
- 选择
logs@lifecycle策略。 - 在编辑策略 logs 页面上,切换另存为新策略,然后为该策略提供一个新名称,例如
logs-custom。
logs@lifecycle 策略使用推荐的滚动更新默认值:当当前写入索引的主分片大小达到 50GB 或索引已存在 30 天时,开始写入新索引。
要查看或更改滚动更新设置,请点击热阶段的高级设置。然后禁用使用推荐的默认值以显示滚动更新设置。
默认的 logs@lifecycle 策略旨在防止创建许多微小的每日索引。您可以修改策略副本以满足您的性能要求并管理资源使用情况。
激活温阶段并点击高级设置。
- 将将数据移入阶段的时间设置为30 天。这会将滚动更新 30 天后的索引移动到温数据层。
- 启用设置副本并将副本数更改为1。
- 启用强制合并数据并将段数设置为1。
在温阶段,点击垃圾桶图标以启用删除阶段。
在删除阶段,将将数据移入阶段的时间设置为90 天。这会在滚动更新 90 天后删除索引。
点击另存为新策略。
受管 ILM 策略的副本也被标记为受管。您可以使用创建或更新生命周期策略 API 将 _meta.managed 参数更新为 false。
要将您的新 ILM 策略应用于 logs 索引模板,请创建或编辑 logs@custom 组件模板。
@custom 组件模板允许您自定义受管索引模板的映射和设置,而无需覆盖它们或其主要组件模板。
许多 Elasticsearch 受管索引模板包含一个或多个 @custom 组件模板。必须先创建 @custom 组件模板,然后才能使用它,并且其名称必须与受管索引模板中指定的名称完全匹配,以便在创建索引时自动应用。
例如,如果您正在摄入 OpenTelemetry (OTel) 日志,则任何 OTel 日志数据流及其后端索引均由 logs-otel@template 受管索引模板配置。该索引模板在存在时会自动应用 logs@custom 和 logs-otel@custom 模板中定义的设置。
转到索引管理 > 索引模板并选择任何受管索引,以查看与该索引关联的 @custom 组件模板。
如果您希望 ILM 更改仅应用于特定索引,则可以直接创建自定义索引模板,而不是修改自定义组件模板。使用 Kibana 中的索引管理页面或索引模板 API 来创建新模板。
点击组件模板选项卡,然后点击创建组件模板。
在物流下,将组件模板命名为
logs@custom。在索引设置下,设置上一步中创建的 ILM 策略名称
{ "index": { "lifecycle": { "name": "logs-custom" } } }继续进行审核,然后点击保存组件模板。
点击索引模板选项卡,然后选择
logs索引模板。在摘要中,查看组件模板列表。
logs@custom应该会列出。