教程:数据流保留
编辑教程:数据流保留
编辑在本教程中,我们将讨论数据流生命周期保留;我们将定义它,讨论如何配置以及如何应用。请记住,以下选项仅适用于由数据流生命周期管理的数据流。
您可以通过 获取数据流生命周期 API 来验证数据流是否由数据流生命周期管理。
resp = client.indices.get_data_lifecycle( name="my-data-stream", ) print(resp)
response = client.indices.get_data_lifecycle( name: 'my-data-stream' ) puts response
const response = await client.indices.getDataLifecycle({ name: "my-data-stream", }); console.log(response);
GET _data_stream/my-data-stream/_lifecycle
结果应如下所示
什么是数据流保留?
编辑我们将保留定义为数据流的数据将在 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
,这是在给定时刻应用于数据流的保留时间。有效保留时间无法设置,它是通过考虑上面列出的所有配置的保留时间而得出的,并且计算方法如此处所述。
全局默认和最大保留时间不适用于 Elastic 内部的数据流。内部数据流可以通过将 system
标志设置为 true
或其名称以点号 (.
) 开头来识别。
如何配置保留时间?
编辑-
通过在数据流级别设置
data_retention
。此保留时间可以通过两种方式配置— 对于新的数据流,可以在数据流创建期间应用的索引模板中定义。您可以使用 创建索引模板 API,例如
resp = client.indices.put_index_template( name="template", index_patterns=[ "my-data-stream*" ], data_stream={}, priority=500, template={ "lifecycle": { "data_retention": "7d" } }, meta={ "description": "Template with data stream lifecycle" }, ) print(resp)
const response = await client.indices.putIndexTemplate({ name: "template", index_patterns: ["my-data-stream*"], data_stream: {}, priority: 500, template: { lifecycle: { data_retention: "7d", }, }, _meta: { description: "Template with data stream lifecycle", }, }); console.log(response);
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 来设置。
resp = client.indices.put_data_lifecycle( name="my-data-stream", data_retention="30d", ) print(resp)
response = client.indices.put_data_lifecycle( name: 'my-data-stream', body: { data_retention: '30d' } ) puts response
const response = await client.indices.putDataLifecycle({ name: "my-data-stream", data_retention: "30d", }); console.log(response);
-
通过设置集群级别的
data_streams.lifecycle.retention.default
和/或data_streams.lifecycle.retention.max
来设置全局保留时间。您可以通过 更新集群设置 API 来设置。例如resp = client.cluster.put_settings( persistent={ "data_streams.lifecycle.retention.default": "7d", "data_streams.lifecycle.retention.max": "90d" }, ) print(resp)
const response = await client.cluster.putSettings({ persistent: { "data_streams.lifecycle.retention.default": "7d", "data_streams.lifecycle.retention.max": "90d", }, }); console.log(response);
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 天 |
|
不相关 |
未设置 |
30 天 |
30 天 |
|
30 天 |
12 个月 |
未设置 |
30 天 |
|
30 天 |
30 天 |
未设置 |
30 天 |
|
不相关 |
30 天 |
12 个月 |
30 天 |
|
未设置 |
30 天 |
未设置 |
30 天 |
|
考虑到我们的示例,如果我们检索 my-data-stream
的生命周期
resp = client.indices.get_data_lifecycle( name="my-data-stream", ) print(resp)
response = client.indices.get_data_lifecycle( name: 'my-data-stream' ) puts response
const response = await client.indices.getDataLifecycle({ name: "my-data-stream", }); console.log(response);
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" } } ] }
集群中配置的最大保留时间。 |
|
集群中配置的默认保留时间。 |
|
此数据流请求的保留时间。 |
|
数据流生命周期在此数据流上应用的保留时间。 |
|
确定有效保留时间的配置。在本例中,它是 |
如何应用有效保留时间?
编辑保留时间作为数据流生命周期运行的最后一步应用于数据流的剩余后备索引。数据流生命周期将检索其 generation_time
长于有效保留时间段的后备索引,并将其删除。generation_time
仅适用于已滚动更新的后备索引,并且它是自后备索引滚动更新以来的时间,或者是可选地在 index.lifecycle.origination_date
设置中配置的时间。
我们使用 generation_time
而不是创建时间,因为这确保后备索引中的所有数据都已超过保留时间段。因此,保留时间不是数据被删除的确切时间,而是数据将被存储的最短时间。