加载中

为 Elasticsearch 数据流设置保留期

本教程介绍了如何为 Elasticsearch 中的数据流配置保留设置,从而帮助您控制存储成本和合规性。了解如何调整生命周期策略,以便自动删除或迁移旧数据。

以下选项仅适用于由数据流生命周期管理的数据流。

  1. 什么是数据流保留期?
  2. 如何配置保留期?
  3. 如何计算有效保留期?
  4. 如何应用有效保留期?

您可以使用 获取数据流生命周期 API 来验证数据流是否由数据流生命周期进行管理

				GET _data_stream/my-data-stream/_lifecycle
		

结果应如下所示

{
  "data_streams": [
    {
      "name": "my-data-stream",
      "lifecycle": {
        "enabled": true
      }
    }
  ]
}
		
  1. 您的数据流名称。
  2. 确保已启用生命周期,这意味着该值应为 true
提示

您还可以通过在 Kibana 的 Streams(流) 页面找到数据流来查看其管理方式。流直接对应于数据流。选择一个流以查看其详细信息,并转到 Retention(保留期) 选项卡。

我们将保留期定义为数据流中的数据在 Elasticsearch 中保留的最短时间。此时间段过后,Elasticsearch 可以删除这些数据以释放空间或管理成本。

注意

保留期定义的不是删除数据的时间段,而是数据被保留的最短时间段。

我们定义了 4 种不同类型的保留期

  • 数据流保留期,即 data_retention,是在数据流级别配置的保留期。它可以为未来的数据流使用 索引模板 设置,也可以为现有的数据流使用 PUT 数据流生命周期 API 设置。当未设置数据流保留期时,意味着数据需要永久保留。
  • 全局默认保留期,我们称之为 default_retention,是通过集群设置 data_streams.lifecycle.retention.default 配置的保留期,将应用于所有由数据流生命周期管理且未配置 data_retention 的数据流。实际上,它确保不会有数据流永久保留其数据。可以通过 更新集群设置 API 进行设置。
  • 全局最大保留期,我们称之为 max_retention,是通过集群设置 data_streams.lifecycle.retention.max 配置的保留期,将应用于所有由数据流生命周期管理的数据流。实际上,它确保不会有数据流的保留期超过此时间段。可以通过 更新集群设置 API 进行设置。
  • 有效保留期,即 effective_retention,是在特定时刻应用于数据流的保留期。有效保留期无法直接设置,它是通过考虑上述所有已配置的保留期推导出来的,其计算方式如此处所述。
注意

全局默认保留期和最大保留期不适用于 Elasticsearch 内部的数据流。内部数据流的识别方式是:其 system 标志设置为 true,或者其名称以点 (.) 为前缀。

  • 使用 data_retention 设置在数据流级别配置数据保留期。您可以通过两种方式执行此操作

    • 对于新的数据流,data_retention 设置可以包含在创建数据流时应用的索引模板中。例如,您可以使用 创建索引模板 API
    				PUT _index_template/template
    					{
      "index_patterns": ["my-data-stream*"],
      "data_stream": { },
      "priority": 500,
      "template": {
        "lifecycle": {
          "data_retention": "7d"
        }
      },
      "_meta": {
        "description": "Template with data stream lifecycle"
      }
    }
    		
    				PUT _data_stream/my-data-stream/_lifecycle
    					{
      "data_retention": "30d"
    }
    		
    1. 此数据流的保留期设置为 30 天。
    提示

    要在 Kibana 中调整数据流的保留期,请在“Streams(流)”页面上找到数据流。流直接映射到数据流。接下来,选择一个流以查看其详细信息,并检查 Retention(保留期) 选项卡以了解其管理方式,然后再进行调整。

  • 通过设置应用于集群级别的 data_streams.lifecycle.retention.defaultdata_streams.lifecycle.retention.max 来设置全局保留期。您可以使用 更新集群设置 API 来设置这些参数。例如

    				PUT /_cluster/settings
    					{
      "persistent" : {
        "data_streams.lifecycle.retention.default" : "7d",
        "data_streams.lifecycle.retention.max" : "90d"
      }
    }
    		

有效保留期的计算方式如下

  • 当定义了 default_retention 且数据流没有 data_retention 时,effective_retentiondefault_retention
  • 当定义了 data_retention,且如果定义了 max_retention 且其值小于 max_retention 时,effective_retentiondata_retention
  • 当定义了 max_retention,且数据流没有 data_retention 或者其 data_retention 大于 max_retention 时,effective_retentionmax_retention

以上内容在下方的示例中进行了演示

default_retention max_retention data_retention effective_retention 保留期确定依据
未设置 未设置 未设置 无限 不适用
不相关 12 个月 30 天 30 天 data_retention
不相关 未设置 30 天 30 天 data_retention
30 天 12 个月 未设置 30 天 default_retention
30 天 30 天 未设置 30 天 default_retention
不相关 30 天 12 个月 30 天 max_retention
未设置 30 天 未设置 30 天 max_retention

考虑我们的示例,如果我们获取 my-data-stream 的生命周期

				GET _data_stream/my-data-stream/_lifecycle
		

我们看到它将保持与用户配置的一致

{
  "global_retention" : {
    "max_retention" : "90d",
    "default_retention" : "7d"
  },
  "data_streams": [
    {
      "name": "my-data-stream",
      "lifecycle": {
        "enabled": true,
        "data_retention": "30d",
        "effective_retention": "30d",
        "retention_determined_by": "data_stream_configuration"
      }
    }
  ]
}
		
  1. 集群中配置的最大保留期。
  2. 集群中配置的默认保留期。
  3. 为此数据流请求的保留期。
  4. 数据流生命周期应用于此数据流的保留期。
  5. 决定有效保留期的配置。在本例中,它是 data_configuration,因为其小于 max_retention

作为数据流生命周期运行的最后一步,保留期应用于数据流的剩余支持索引。数据流生命周期将检索其 generation_time 长于有效保留期支持索引并将其删除。generation_time 仅适用于已滚动的支持索引,它是自支持索引滚动以来的时间,或者是使用 index.lifecycle.origination_date 设置可选配置的时间。

重要提示

我们使用 generation_time 而不是创建时间,因为这可以确保支持索引中的所有数据都已超过保留期。因此,保留期并非数据被删除的确切时间,而是数据被存储的最短时间。

© . This website operates independently and is not affiliated with or endorsed by Elasticsearch B.V. All brand names, logos, and trademarks are the property of their respective owners.