为使用 ILM(Index Lifecycle Management)管理索引,必须在 index.lifecycle.name
索引设置中指定有效的策略。
为给滚动索引(rolling indices)配置生命周期策略,需要创建策略,并且将其添加到索引模版(index template)。
为使用策略管理不滚动的索引,当创建索引时,可以指定声明周期策略,或者将策略直接应用到已存在的索引。
ILM 策略被存储在全局集群状态中,如果将 include_global_state
设置为 true
,那么在创建快照时,它们将被包含在快照中。当恢复快照时,将恢复全局状态中的所有策略,同名的本地策略将被重写。
重要
为 Beats 或 Logstash Elasticsearch 输出插件启用索引生命周期管理时,将自动地应用必要的策略和配置变更。你可以修改默认策略,但不需要显式地配置策略或引导初始索引。
为从 Kibana 创建生命周期策略,打开菜单,进入 Stack Management > Index Lifecycle Policies,点击 Create policy。
为策略指定生命周期阶段,以及指定在每个阶段执行的操作。
向 Elasticsearch 集群添加策略将调用创建或更新策略(create or update policy)API。
API 示例:
curl -X PUT "localhost:9200/_ilm/policy/my_policy?pretty" -H 'Content-Type: application/json' -d'
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_primary_shard_size": "25GB"
}
}
},
"delete": {
"min_age": "30d",
"actions": {
"delete": {}
}
}
}
}
}
'
在上面的例子中:
为使用触发滚动操作的策略,需要在用于创建新索引的索引模版中配置策略。指定策略名称,以及用于引用滚动索引的别名。
可以使用 Kibana Create template wizard 创建模版。为访问 wizard,打开菜单,进入 Stack Management > Index Management。在 Index Templates 选项卡中,点击 Create template。
Wizard 调用创建或更新索引模版 API(create or update index template API)向集群添加模版。
API 示例:
curl -X PUT "localhost:9200/_index_template/my_template?pretty" -H 'Content-Type: application/json' -d'
{
"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
管理的索引的别名当为滚动索引设置策略时,需要手动地创建第一个受策略管理的索引,并且将其指定为写索引。
重要
为 Beats 或 Logstash Elasticsearch 输出插件启用索引生命周期管理时,将自动地应用必要的策略和配置变更。你可以修改默认策略,但不需要显式地配置策略或引导初始索引。
索引名称必须匹配索引模版中定义的模式,并且以数字结尾。将递增此数字,以生成由滚动操作创建的索引的名称。
比如,下面的请求创建 test-00001
索引。因为它匹配 my_template
中指定的索引模式,Elasticsearch 自动地应用来自该模版的配置。
curl -X PUT "localhost:9200/test-000001?pretty" -H 'Content-Type: application/json' -d'
{
"aliases": {
"test-alias":{
"is_write_index": true
}
}
}
'
在上面的例子中:
现在可以开始索引数据,滚动生命周期策略中指定的别名。使用样例 my_policy
策略,当初始索引达到 25GB 时,将触发滚动操作。然后,ILM 创建新索引,它将成为用于 test-alias
的写索引。
可以在创建索引时指定策略,或通过 Kibana Management 或更新索引设置 API(update settings API)将策略应用到已存在的索引。应用策略时,ILM 立即开始管理索引。
重要
不能手动地应用使用滚动操作的策略。必须通过索引模版(index template)应用使用滚动的策略。否则,当滚动操作创建新索引时,该策略不会继续执行。
index.lifecycle.name
指定索引的策略。
API 示例:
curl -X PUT "localhost:9200/test-index?pretty" -H 'Content-Type: application/json' -d'
{
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "my_policy"
}
}
'
在该示例中:
调用更新设置(update settings)API 时,可以通过在索引名称中使用通配符的方式,将相同的策略应用到多个索引。
警告
注意不要无意中匹配不想修改的索引。
curl -X PUT "localhost:9200/mylogs-pre-ilm*/_settings?pretty" -H 'Content-Type: application/json' -d'
{
"index": {
"lifecycle": {
"name": "mylogs_policy_existing"
}
}
}
'
在上面的示例中:
mylogs-pre-ilm
开始的索引为切换索引的生命周期策略,请遵循以下步骤:
使用移除策略 API(remove policy API)移除现有的策略。以数据流或别名为目标,移除其全部索引的策略。
xxxxxxxxxx
curl -X POST "localhost:9200/logs-my_app-default/_ilm/remove?pretty"
移除策略 API 从索引中移除全部 ILM 元数据,并且不考虑索引的生命周期状态。这可能使索引处于非预期状态。
比如,forcemerge
操作在重新打开索引前,临时地关闭索引。在 forcemerge
期间,移除索引的 ILM 策略可能使其无限期地处于关闭状态。
在策略移除后,使用获取索引 API(get index API)检查索引的状态。以数据流或别名为目标,获取其全部索引的状态。
xxxxxxxxxx
curl -X GET "localhost:9200/logs-my_app-default?pretty"
然后可以按需改变索引。比如,可以使用打开索引 API(open index API)重新打开任意已关闭的索引。
xxxxxxxxxx
curl -X POST "localhost:9200/logs-my_app-default/_open?pretty"
使用更新设置 API(update settings API)指定新策略。以数据流或别名为目标,为其全部索引指定策略。
警告
在移除现有策略前,不要指定新策略。这样做可能导致阶段执行(phase execution)静默失败。
xxxxxxxxxx
curl -X PUT "localhost:9200/logs-my_app-default/_settings?pretty" -H 'Content-Type: application/json' -d'
{
"index": {
"lifecycle": {
"name": "new-lifecycle-policy"
}
}
}
'