加载中

将 ILM 托管的数据流迁移到数据流生命周期

本教程介绍了如何将数据流从索引生命周期管理 (ILM) 迁移到更新的数据流生命周期。它解释了迁移步骤、兼容性注意事项以及验证的最佳实践。

在迁移过程中,现有的由 ILM 管理的后端索引将继续由 ILM 管理,直到它们过期并被 ILM 删除。新创建的后端索引将由数据流生命周期管理。通过这种方式,数据流会逐渐从由 ILM 管理过渡到由数据流生命周期管理。ILM 和数据流生命周期可以共同管理同一个数据流,但一个索引在同一时间只能由一个系统管理。

为数据流配置数据保留策略

从 Elastic Stack 9.2 版本开始,数据流 (Streams) 页面在 Kibana 中为常见的数据管理任务提供了一个集中式界面,包括配置数据保留策略等任务。您可以选择永久保留数据、保留一段自定义时间,或者遵循现有的 ILM 策略。有关更多信息,请参阅 在 Streams 中管理数据保留

要使用 API 将数据流从 ILM 迁移到数据流生命周期,您需要执行两个步骤

  1. 更新支持数据流的索引模板,将 prefer_ilm 设置为 false,并配置数据流生命周期。
  2. 使用 生命周期 API现有数据流配置数据流生命周期。

有关更多详细信息,请参阅 迁移到数据流生命周期

首先,让我们创建一个由 ILM 管理的带有两个后端索引的数据流。我们先创建一个 ILM 策略

				PUT _ilm/policy/pre-dsl-ilm-policy
					{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_primary_shard_size": "50gb"
          }
        }
      },
      "delete": {
        "min_age": "7d",
        "actions": {
          "delete": {}
        }
      }
    }
  }
}
		

然后,让我们创建一个支持数据流并配置 ILM 的索引模板

				PUT _index_template/dsl-data-stream-template
					{
  "index_patterns": ["dsl-data-stream*"],
  "data_stream": { },
  "priority": 500,
  "template": {
    "settings": {
      "index.lifecycle.name": "pre-dsl-ilm-policy"
    }
  }
}
		

现在,我们将索引一个文档到 dsl-data-stream 以创建该数据流,并且我们还将手动对该数据流执行滚动更新 (rollover),以便创建另一个代次的索引

				POST dsl-data-stream/_doc?
					{
  "@timestamp": "2023-10-18T16:21:15.000Z",
  "message": "192.0.2.42 - - [06/May/2099:16:21:15 +0000] \"GET /images/bg.jpg HTTP/1.0\" 200 24736"
}
		
				POST dsl-data-stream/_rollover
		

我们将使用 GET _data_stream API 来检查数据流的状态

				GET _data_stream/dsl-data-stream
		

查看响应,我们将看到两个后端索引都由 ILM 管理,并且下一代索引也将由 ILM 管理

{
  "data_streams": [
    {
      "name": "dsl-data-stream",
      "timestamp_field": {
        "name": "@timestamp"
      },
      "indices": [
        {
          "index_name": ".ds-dsl-data-stream-2023.10.19-000001",
          "index_uuid": "xCEhwsp8Tey0-FLNFYVwSg",
          "prefer_ilm": true,
          "ilm_policy": "pre-dsl-ilm-policy",
          "managed_by": "Index Lifecycle Management"
        },
        {
          "index_name": ".ds-dsl-data-stream-2023.10.19-000002",
          "index_uuid": "PA_JquKGSiKcAKBA8DJ5gw",
          "prefer_ilm": true,
          "ilm_policy": "pre-dsl-ilm-policy",
          "managed_by": "Index Lifecycle Management"
        }
      ],
      "generation": 2,
      "status": "GREEN",
      "template": "dsl-data-stream-template",
      "next_generation_managed_by": "Index Lifecycle Management",
      "prefer_ilm": true,
      "ilm_policy": "pre-dsl-ilm-policy",
      "hidden": false,
      "system": false,
      "allow_custom_routing": false,
      "replicated": false,
      "rollover_on_write": false
    }
  ]
}
		
  1. 支持索引的名称。
  2. 对于每个后端索引,我们都会显示 prefer_ilm 配置的值,如果两个系统都为索引配置了,该值将指示 ILM 是否优先于数据流生命周期。
  3. 为此索引配置的 ILM 策略。
  4. 管理此索引的系统(可能的值为 "Index Lifecycle Management"、"Data stream lifecycle" 或 "Unmanaged")
  5. 管理下一代索引(数据流滚动更新后新的写入索引)的系统。可能的值为 "Index Lifecycle Management"、"Data stream lifecycle" 或 "Unmanaged"。
  6. 在支持数据流的索引模板中配置的 prefer_ilm 值。此值将为所有新的后端索引配置。如果未在索引模板中配置,后端索引将收到默认值 true(默认情况下 ILM 优先于数据流生命周期,因为它目前功能更丰富)。
  7. 在支持此数据流的索引模板中配置的 ILM 策略(只要它存在于索引模板中,就会在所有新的后端索引上进行配置)。

要将 dsl-data-stream 迁移到数据流生命周期,我们必须执行两个步骤

  1. 更新支持数据流的索引模板,将 prefer_ilm 设置为 false,并配置数据流生命周期。
  2. 使用 生命周期 API现有 dsl-data-stream 配置数据流生命周期。
重要提示

添加到索引模板中的数据流生命周期配置,作为数据流配置,仅适用于数据流。我们的数据流已经存在,因此即使我们在索引模板中添加了数据流生命周期配置,它也不会应用于 dsl-data-stream

让我们更新索引模板

				PUT _index_template/dsl-data-stream-template
					{
  "index_patterns": ["dsl-data-stream*"],
  "data_stream": { },
  "priority": 500,
  "template": {
    "settings": {
      "index.lifecycle.name": "pre-dsl-ilm-policy",
      "index.lifecycle.prefer_ilm": false
    },
    "lifecycle": {
      "data_retention": "7d"
    }
  }
}
		
  1. prefer_ilm 设置现在将在的后端索引(通过对数据流执行滚动更新创建)上进行配置,这样 ILM 就不会优先于数据流生命周期。
  2. 我们正在配置数据流生命周期,因此的数据流将由数据流生命周期管理。

我们现在已经确保新的数据流将由数据流生命周期管理。

让我们更新我们现有的 dsl-data-stream 并配置数据流生命周期

				PUT _data_stream/dsl-data-stream/_lifecycle
					{
    "data_retention": "7d"
}
		

我们可以检查数据流,以确认下一代确实将由数据流生命周期管理

				GET _data_stream/dsl-data-stream
		
{
  "data_streams": [
    {
      "name": "dsl-data-stream",
      "timestamp_field": {
        "name": "@timestamp"
      },
      "indices": [
        {
          "index_name": ".ds-dsl-data-stream-2023.10.19-000001",
          "index_uuid": "xCEhwsp8Tey0-FLNFYVwSg",
          "prefer_ilm": true,
          "ilm_policy": "pre-dsl-ilm-policy",
          "managed_by": "Index Lifecycle Management"
        },
        {
          "index_name": ".ds-dsl-data-stream-2023.10.19-000002",
          "index_uuid": "PA_JquKGSiKcAKBA8DJ5gw",
          "prefer_ilm": true,
          "ilm_policy": "pre-dsl-ilm-policy",
          "managed_by": "Index Lifecycle Management"
        }
      ],
      "generation": 2,
      "status": "GREEN",
      "template": "dsl-data-stream-template",
      "lifecycle": {
        "enabled": true,
        "data_retention": "7d",
        "effective_retention": "7d",
        "retention_determined_by": "data_stream_configuration"
      },
      "ilm_policy": "pre-dsl-ilm-policy",
      "next_generation_managed_by": "Data stream lifecycle",
      "prefer_ilm": false,
      "hidden": false,
      "system": false,
      "allow_custom_routing": false,
      "replicated": false,
      "rollover_on_write": false
    }
  ]
}
		
  1. 现有的后端索引将继续由 ILM 管理
  2. 现有的后端索引将继续由 ILM 管理
  3. 下一代索引将由数据流生命周期管理
  4. 我们在索引模板中配置的 prefer_ilm 设置值已反映出来,并将为新的后端索引进行相应的配置。

我们现在将对数据流执行滚动更新,以查看由数据流生命周期管理的新一代索引

				POST dsl-data-stream/_rollover
		
				GET _data_stream/dsl-data-stream
		
{
  "data_streams": [
    {
      "name": "dsl-data-stream",
      "timestamp_field": {
        "name": "@timestamp"
      },
      "indices": [
        {
          "index_name": ".ds-dsl-data-stream-2023.10.19-000001",
          "index_uuid": "xCEhwsp8Tey0-FLNFYVwSg",
          "prefer_ilm": true,
          "ilm_policy": "pre-dsl-ilm-policy",
          "managed_by": "Index Lifecycle Management"
        },
        {
          "index_name": ".ds-dsl-data-stream-2023.10.19-000002",
          "index_uuid": "PA_JquKGSiKcAKBA8DJ5gw",
          "prefer_ilm": true,
          "ilm_policy": "pre-dsl-ilm-policy",
          "managed_by": "Index Lifecycle Management"
        },
        {
          "index_name": ".ds-dsl-data-stream-2023.10.19-000003",
          "index_uuid": "PA_JquKGSiKcAKBA8abcd1",
          "prefer_ilm": false,
          "ilm_policy": "pre-dsl-ilm-policy",
          "managed_by": "Data stream lifecycle"
        }
      ],
      "generation": 3,
      "status": "GREEN",
      "template": "dsl-data-stream-template",
      "lifecycle": {
        "enabled": true,
        "data_retention": "7d",
        "effective_retention": "7d",
        "retention_determined_by": "data_stream_configuration"
      },
      "ilm_policy": "pre-dsl-ilm-policy",
      "next_generation_managed_by": "Data stream lifecycle",
      "prefer_ilm": false,
      "hidden": false,
      "system": false,
      "allow_custom_routing": false,
      "replicated": false,
      "rollover_on_write": false
    }
  ]
}
		
  1. 滚动更新前存在的后端索引将继续由 ILM 管理
  2. 滚动更新前存在的后端索引将继续由 ILM 管理
  3. 新的写入索引接收到了 prefer_ilm 设置的 false 值,正如我们在索引模板中配置的那样
  4. 新的写入索引由 Data stream lifecycle 管理

我们可以轻松地将此数据流更改为由 ILM 管理,因为我们在 更新索引模板 时没有删除 ILM 策略。

我们可以通过两种方式实现这一点

  1. 从数据流中删除生命周期
  2. 通过将 enabled 标志配置为 false 来禁用数据流生命周期。

让我们执行选项 2 并禁用数据流生命周期

				PUT _data_stream/dsl-data-stream/_lifecycle
					{
    "data_retention": "7d",
    "enabled": false
}
		
  1. enabled 标志可以省略,默认为 true,但是,这里我们明确将其配置为 false。让我们检查一下数据流的状态
				GET _data_stream/dsl-data-stream
		
{
  "data_streams": [
    {
      "name": "dsl-data-stream",
      "timestamp_field": {
        "name": "@timestamp"
      },
      "indices": [
        {
          "index_name": ".ds-dsl-data-stream-2023.10.19-000001",
          "index_uuid": "xCEhwsp8Tey0-FLNFYVwSg",
          "prefer_ilm": true,
          "ilm_policy": "pre-dsl-ilm-policy",
          "managed_by": "Index Lifecycle Management"
        },
        {
          "index_name": ".ds-dsl-data-stream-2023.10.19-000002",
          "index_uuid": "PA_JquKGSiKcAKBA8DJ5gw",
          "prefer_ilm": true,
          "ilm_policy": "pre-dsl-ilm-policy",
          "managed_by": "Index Lifecycle Management"
        },
        {
          "index_name": ".ds-dsl-data-stream-2023.10.19-000003",
          "index_uuid": "PA_JquKGSiKcAKBA8abcd1",
          "prefer_ilm": false,
          "ilm_policy": "pre-dsl-ilm-policy",
          "managed_by": "Index Lifecycle Management"
        }
      ],
      "generation": 3,
      "status": "GREEN",
      "template": "dsl-data-stream-template",
      "lifecycle": {
        "enabled": false,
        "data_retention": "7d"
      },
      "ilm_policy": "pre-dsl-ilm-policy",
      "next_generation_managed_by": "Index Lifecycle Management",
      "prefer_ilm": false,
      "hidden": false,
      "system": false,
      "allow_custom_routing": false,
      "replicated": false,
      "rollover_on_write": false
    }
  ]
}
		
  1. 写入索引现在由 ILM 管理
  2. 在数据流上配置的 lifecycle 现在被禁用。
  3. 下一个写入索引将由 ILM 管理

如果我们在 更新 索引模板时删除了 ILM 策略,那么数据流的写入索引现在将是 Unmanaged(未管理),因为该索引没有配置可回退的 ILM 策略。

© . 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.