使用数据流管理时序数据
若要使用 ILM 自动滚动和管理数据流,您需要:
当您为 Beats 或 Logstash Elasticsearch 输出插件启用索引生命周期管理时,会自动设置生命周期策略。您无需执行任何其他操作。您可以通过 Kibana 管理 或 ILM API 修改默认策略。
生命周期策略指定了索引生命周期中的各个阶段以及在每个阶段执行的操作。生命周期最多可以包含五个阶段:hot(热)、warm(温)、cold(冷)、frozen(冻结)和 delete(删除)。
例如,您可以定义一个名为 timeseries_policy 的策略,其中包含以下两个阶段:
- 一个
hot(热)阶段,定义了一个滚动操作,指定当索引达到 50 GB 的max_primary_shard_size(最大主分片大小)或 30 天的max_age(最大存活时间)时进行滚动。 - 一个
delete(删除)阶段,设置min_age(最小存活时间)在滚动 90 天后删除索引。
min_age 值是相对于滚动时间而言的,而不是索引创建时间。了解更多。
您可以在 Kibana 中或使用 创建或更新策略 API 来创建策略。
要从 Kibana 创建策略:
- 使用导航菜单或全局搜索字段转到 Index Lifecycle Policies 管理页面。
- 点击 Create policy。
默认情况下,仅启用热索引生命周期阶段。启用您想要的每个额外生命周期阶段。
使用 创建或更新策略 API 将 ILM 策略添加到 Elasticsearch 集群中
PUT _ilm/policy/timeseries_policy
{
"policy": {
"phases": {
"hot": {
"actions": {
"rollover": {
"max_primary_shard_size": "50GB",
"max_age": "30d"
}
}
},
"delete": {
"min_age": "90d",
"actions": {
"delete": {}
}
}
}
}
}
min_age默认为0ms,因此新索引会立即进入hot阶段。- 当满足任一条件时,触发
rollover(滚动)操作。 - 在滚动 90 天后,将索引移入
delete(删除)阶段。 - 当索引进入删除阶段时,触发
delete(删除)操作。
请注意,对于热阶段之后的每个阶段,您可以选择在经过一段时间后将数据移入下一个阶段。此持续时间是从索引滚动时间开始计算的,而不是从索引创建时间开始计算的。
有关默认 ILM 策略设置的更多详细信息,请参阅 创建生命周期策略。
要设置数据流,首先要创建一个索引模板以指定生命周期策略。由于该模板用于数据流,因此它还必须包含 data_stream 定义。
例如,您可以创建一个名为 timeseries_template 的模板,并将其用于名为 timeseries 的未来数据流。要配置 ILM 以管理数据流,您可以使用 index.lifecycle.name 设置指定要应用于数据流的生命周期策略的名称。
使用 Kibana 创建模板 向导添加模板,或使用 创建或更新索引模板 API 添加模板,并将生命周期策略应用于匹配该模板的索引。
使用向导将索引模板添加到集群:
- 使用导航菜单或全局搜索字段转到 Index Management 页面。
- 在 索引模板 选项卡中,点击 创建模板 并按照说明进行操作。

您可以在 索引设置 页面上指定要应用于数据流的生命周期策略名称。

要了解可以指定哪些索引模板选项,请参阅 创建索引模板以应用生命周期策略。
使用 API 将索引模板添加到您的集群:
PUT _index_template/timeseries_template
{
"index_patterns": ["timeseries"],
"data_stream": { },
"template": {
"settings": {
"number_of_shards": 1,
"number_of_replicas": 1,
"index.lifecycle.name": "timeseries_policy"
}
}
}
- 当文档被索引到
timeseries目标时,应用该模板。 - 用于管理数据流的 ILM 策略名称。
要开始使用,请将文档索引到 索引模板 的 index_patterns 中定义的名称或通配符模式中。只要现有的数据流、索引或索引别名尚未使用该名称,索引请求就会自动创建一个带有单个后备索引的对应数据流。Elasticsearch 会自动将请求的文档索引到此后备索引中,该索引也充当数据流的 写入索引。
例如,以下请求会创建 timeseries 数据流和名为 .ds-timeseries-2099.03.08-000001 的第一代后备索引。
POST timeseries/_doc
{
"message": "logged the request",
"@timestamp": "1591890611"
}
当满足生命周期策略中的滚动条件时,rollover(滚动)操作:
- 创建第二代后备索引,命名为
.ds-timeseries-2099.03.08-000002。由于它是timeseries数据流的后备索引,因此timeseries_template索引模板中的配置将应用于新索引。 - 由于它是
timeseries数据流的最新一代索引,因此新创建的后备索引.ds-timeseries-2099.03.08-000002将成为该数据流的写入索引。
每当满足滚动条件时,此过程就会重复。您可以使用 timeseries 数据流名称搜索由 timeseries_policy 管理的所有数据流后备索引。写入操作应发送到数据流名称,该名称会将它们路由到其当前的写入索引。对数据流的读取操作将由其所有后备索引处理。
使用 Kibana 查看您托管索引的当前状态 以及有关 ILM 策略的详细信息,或者使用 ILM explain API。查找以下信息:
- 索引处于哪个阶段以及进入该阶段的时间。
- 当前的操作以及正在执行的步骤。
- 是否发生了任何错误或进度是否受阻。
例如,以下请求获取有关 timeseries 数据流后备索引的信息:
GET .ds-timeseries-*/_ilm/explain
以下响应显示数据流的第一代后备索引正在等待 hot 阶段的 rollover 操作。它保持此状态,并且 ILM 会持续调用 check-rollover-ready,直到满足滚动条件。
{
"indices": {
".ds-timeseries-2099.03.07-000001": {
"index": ".ds-timeseries-2099.03.07-000001",
"index_creation_date_millis": 1538475653281,
"time_since_index_creation": "30s",
"managed": true,
"policy": "timeseries_policy",
"lifecycle_date_millis": 1538475653281,
"age": "30s",
"phase": "hot",
"phase_time_millis": 1538475653317,
"action": "rollover",
"action_time_millis": 1538475653317,
"step": "check-rollover-ready",
"step_time_millis": 1538475653317,
"phase_execution": {
"policy": "timeseries_policy",
"phase_definition": {
"min_age": "0ms",
"actions": {
"rollover": {
"max_primary_shard_size": "50gb",
"max_age": "30d"
}
}
},
"version": 1,
"modified_date_in_millis": 1539609701576
}
}
}
}
- 用于计算何时使用
max_age滚动索引的索引存活时间 - 用于管理该索引的策略
- 用于转换为下一阶段的索引存活时间(在本例中,它与索引的存活时间相同)。
- ILM 正在该索引上执行的步骤
- 当前阶段的定义(
hot阶段)