配置生命周期策略

edit

配置生命周期策略

edit

为了使ILM管理索引,必须在index.lifecycle.name索引设置中指定有效的策略。

要为滚动索引配置生命周期策略,您需要创建策略并将其添加到索引模板中。

要使用策略管理不滚动更新的索引,您可以在创建索引时指定生命周期策略,或将策略直接应用于现有索引。

ILM策略存储在全局集群状态中,并且可以通过在创建快照时将include_global_state设置为true来包含在快照中。当快照恢复时,全局状态中的所有策略都会被恢复,并且任何具有相同名称的本地策略都会被覆盖。

当您为 Beats 或 Logstash Elasticsearch 输出插件启用索引生命周期管理时,必要的策略和配置更改会自动应用。您可以修改默认策略,但不需要显式配置策略或引导初始索引。

创建生命周期策略

edit

要在 Kibana 中创建生命周期策略,请打开菜单并转到 堆栈管理 > 索引生命周期策略。点击 创建策略

创建策略页面

您指定策略的生命周期阶段以及在每个阶段要执行的操作。

调用 创建或更新策略 API 将策略添加到 Elasticsearch 集群中。

API示例
PUT _ilm/policy/my_policy
{
  "policy": {
    "phases": {
      "hot": {
        "actions": {
          "rollover": {
            "max_primary_shard_size": "25GB" 
          }
        }
      },
      "delete": {
        "min_age": "30d",
        "actions": {
          "delete": {} 
        }
      }
    }
  }
}

当索引大小达到25GB时滚动

在滚动后30天删除索引

如果一个或多个分片包含200000000或更多文档,滚动操作将隐式地滚动数据流或别名。通常情况下,一个分片在达到200M文档之前会先达到25GB,但对于空间高效的数据集来说,情况并非如此。如果一个分片包含超过200M的文档,搜索性能很可能会受到影响。这就是内置限制的原因。

应用带有索引模板的生命周期策略

edit

要使用触发滚动操作的策略,您需要在用于创建每个新索引的索引模板中配置该策略。您需要指定策略的名称和用于引用滚动索引的别名。

仅在使用别名进行索引生命周期管理时,才需要 index.lifecycle.rollover_alias 设置。在使用 数据流 时,这是不必要的。

您可以使用 Kibana 创建模板向导来创建模板。要访问向导,请打开菜单并转到 堆栈管理 > 索引管理。在 索引模板 选项卡中,点击 创建模板

创建模板页面

向导调用创建或更新索引模板 API 来向集群添加模板。

API示例
PUT _index_template/my_template
{
  "index_patterns": ["test-*"], 
  "template": {
    "settings": {
      "number_of_shards": 1,
      "number_of_replicas": 1,
      "index.lifecycle.name": "my_policy", 
      "index.lifecycle.rollover_alias": "test-alias" 
    }
  }
}

使用此模板用于所有名称以test-开头的新索引

my_policy 应用于使用此模板创建的新索引

为引用由 my_policy 管理的索引定义一个索引别名

创建初始托管索引

edit

当您为自己滚动索引设置策略时,如果您没有使用推荐的 数据流,您需要手动创建由策略管理的第一个索引,并将其指定为写入索引。

当您为 Beats 或 Logstash Elasticsearch 输出插件启用索引生命周期管理时,必要的策略和配置更改会自动应用。您可以修改默认策略,但不需要显式配置策略或引导初始索引。

索引的名称必须与索引模板中定义的模式匹配,并以数字结尾。 这个数字会递增以生成由滚动操作创建的索引的名称。

例如,以下请求创建了 test-00001 索引。 因为它匹配了 my_template 中指定的索引模式, Elasticsearch 会自动应用该模板中的设置。

PUT test-000001
{
  "aliases": {
    "test-alias":{
      "is_write_index": true 
    }
  }
}

将此初始索引设置为此别名的写索引。

现在您可以开始将数据索引到生命周期策略中指定的滚动别名。 使用示例my_policy策略,当初始索引超过25GB时,滚动操作将被触发。 然后,ILM创建一个新索引,该索引成为test-alias的写索引。

手动应用生命周期策略

edit

您可以在创建索引时指定策略,或者通过Kibana管理或更新设置API将策略应用于现有索引。当您应用策略时,ILM会立即开始管理索引。

不要手动应用使用滚动操作的策略。 使用滚动的策略必须通过索引模板来应用。 否则,当滚动操作创建新索引时,策略不会被继承。

The index.lifecycle.name 设置指定索引的策略。

API示例
PUT test-index
{
  "settings": {
    "number_of_shards": 1,
    "number_of_replicas": 1,
    "index.lifecycle.name": "my_policy" 
  }
}

设置索引的生命周期策略。

将策略应用于多个索引

edit

在调用更新索引设置 API 时,您可以通过在索引名称中使用通配符将相同的策略应用于多个索引。

请注意,不要无意中匹配到你不希望修改的索引。

PUT mylogs-pre-ilm*/_settings 
{
  "index": {
    "lifecycle": {
      "name": "mylogs_policy_existing"
    }
  }
}

更新所有名称以 mylogs-pre-ilm 开头的索引

切换生命周期策略

edit

要切换索引的生命周期策略,请按照以下步骤操作:

  1. 使用移除策略API移除现有策略。 针对数据流或别名,以移除其所有索引的策略。

    POST logs-my_app-default/_ilm/remove
  2. 删除策略 API 会从索引中移除所有 ILM 元数据,并且不考虑索引的生命周期状态。这可能导致索引处于不期望的状态。

    例如,forcemerge 操作会在重新打开索引之前暂时关闭索引。如果在执行 forcemerge 操作期间移除索引的 ILM 策略,可能会导致索引无限期关闭。

    政策移除后,使用获取索引 API来检查索引的状态。针对数据流或别名,以获取其所有索引的状态。

    GET logs-my_app-default

    然后,您可以根据需要更改索引。例如,您可以使用打开索引API重新打开任何已关闭的索引。

    POST logs-my_app-default/_open
  3. 使用更新索引设置 API分配一个新策略。 针对数据流或别名,以将其策略分配给所有索引。

    在移除现有策略之前,不要分配新策略。 这可能导致阶段执行静默失败。

    PUT logs-my_app-default/_settings
    {
      "index": {
        "lifecycle": {
          "name": "new-lifecycle-policy"
        }
      }
    }