为 Elasticsearch 数据流设置保留期
本教程介绍了如何为 Elasticsearch 中的数据流配置保留设置,从而帮助您控制存储成本和合规性。了解如何调整生命周期策略,以便自动删除或迁移旧数据。
以下选项仅适用于由数据流生命周期管理的数据流。
您可以使用 获取数据流生命周期 API 来验证数据流是否由数据流生命周期进行管理
GET _data_stream/my-data-stream/_lifecycle
结果应如下所示
{
"data_streams": [
{
"name": "my-data-stream",
"lifecycle": {
"enabled": true
}
}
]
}
- 您的数据流名称。
- 确保已启用生命周期,这意味着该值应为
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 生命周期 API 来配置
data_retention设置。
PUT _data_stream/my-data-stream/_lifecycle{ "data_retention": "30d" }- 此数据流的保留期设置为 30 天。
提示要在 Kibana 中调整数据流的保留期,请在“Streams(流)”页面上找到数据流。流直接映射到数据流。接下来,选择一个流以查看其详细信息,并检查 Retention(保留期) 选项卡以了解其管理方式,然后再进行调整。
- 对于新的数据流,
通过设置应用于集群级别的
data_streams.lifecycle.retention.default和data_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_retention为default_retention。 - 当定义了
data_retention,且如果定义了max_retention且其值小于max_retention时,effective_retention为data_retention。 - 当定义了
max_retention,且数据流没有data_retention或者其data_retention大于max_retention时,effective_retention为max_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"
}
}
]
}
- 集群中配置的最大保留期。
- 集群中配置的默认保留期。
- 为此数据流请求的保留期。
- 数据流生命周期应用于此数据流的保留期。
- 决定有效保留期的配置。在本例中,它是
data_configuration,因为其小于max_retention。
作为数据流生命周期运行的最后一步,保留期应用于数据流的剩余支持索引。数据流生命周期将检索其 generation_time 长于有效保留期支持索引并将其删除。generation_time 仅适用于已滚动的支持索引,它是自支持索引滚动以来的时间,或者是使用 index.lifecycle.origination_date 设置可选配置的时间。
我们使用 generation_time 而不是创建时间,因为这可以确保支持索引中的所有数据都已超过保留期。因此,保留期并非数据被删除的确切时间,而是数据被存储的最短时间。