【Elasticsearch】使用ILM自动化滚动操作

如何在Elasticsearch中使用索引生命周期管理(ILM)自动化滚动操作(rollover)的教程。


Elasticsearch教程:使用ILM自动化滚动操作

在Elasticsearch中,索引生命周期管理(ILM)是一种强大的工具,用于自动化管理时间序列数据的索引滚动操作。通过ILM,你可以根据预定义的策略自动滚动索引,优化存储成本,提高查询性能,并实施数据保留策略。本教程将详细介绍如何使用ILM自动化滚动操作,包括使用数据流(data streams)和索引别名(index aliases)两种方式。

1.使用数据流(Data Streams)管理时间序列数据

数据流是Elasticsearch中用于处理时间序列数据的一种高级抽象,适用于追加写入的场景。数据流可以自动滚动到新的后端索引,并通过生命周期策略管理这些索引。

1.1 创建生命周期策略

生命周期策略定义了索引在不同阶段的行为和操作。一个完整的生命周期可以包含以下阶段:

• 热(Hot):索引处于活跃状态,用于写入和查询。

• 温(Warm):索引不再写入,但仍然可以查询。

• 冷(Cold):索引被移动到低成本存储,查询性能较低。

• 冻结(Frozen):索引被冻结,查询性能最低。

• 删除(Delete):索引被删除。

例如,以下策略定义了`hot`和`delete`两个阶段:

```json

PUT _ilm/policy/timeseries_policy

{

"policy": {

"phases": {

"hot": {

"actions": {

"rollover": {

"max_primary_shard_size": "50GB", // 当主分片大小达到50GB时滚动

"max_age": "30d" // 或索引年龄达到30天时滚动

}

}

},

"delete": {

"min_age": "90d", // 在滚动后90天删除索引

"actions": {

"delete": {}

}

}

}

}

}

```

1.2 创建索引模板

索引模板用于定义数据流的初始设置和生命周期策略。创建索引模板时,需要指定`index.lifecycle.name`,以便将生命周期策略应用于数据流。

```json

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"

}

}

}

```

1.3 创建数据流

创建数据流的最简单方式是通过索引文档。Elasticsearch会自动根据索引模板创建数据流及其第一个后端索引。

```json

POST timeseries/_doc

{

"message": "logged the request",

"@timestamp": "1591890611"

}

```

当滚动条件满足时,ILM会自动创建新的后端索引,并将写入操作切换到新索引。

1.4 检查生命周期进度

使用ILM的`explain`API可以查看索引的生命周期状态,包括当前阶段、操作和进度。

```json

GET .ds-timeseries-*/_ilm/explain

```

2.不使用数据流管理时间序列数据

数据流虽然强大,但它是追加写入的,不支持直接更新或删除数据。如果你需要频繁更新或删除数据,可以使用索引别名来管理时间序列数据。

2.1 创建生命周期策略

生命周期策略的创建方式与数据流相同。例如:

```json

PUT _ilm/policy/timeseries_policy

{

"policy": {

"phases": {

"hot": {

"actions": {

"rollover": {

"max_primary_shard_size": "50GB",

"max_age": "30d"

}

}

},

"delete": {

"min_age": "90d",

"actions": {

"delete": {}

}

}

}

}

}

```

2.2 创建索引模板

索引模板需要指定`index.lifecycle.rollover_alias`,以便在滚动时更新别名。

```json

PUT _index_template/timeseries_template

{

"index_patterns": ["timeseries-*"],

"template": {

"settings": {

"number_of_shards": 1,

"number_of_replicas": 1,

"index.lifecycle.name": "timeseries_policy",

"index.lifecycle.rollover_alias": "timeseries"

}

}

}

```

2.3 启动初始索引

创建初始索引,并将其指定为别名的写入索引。

```json

PUT timeseries-000001

{

"aliases": {

"timeseries": {

"is_write_index": true

}

}

}

```

2.4 检查生命周期进度

与数据流类似,使用`explain`API查看索引的生命周期状态。

```json

GET timeseries-*/_ilm/explain

```


总结

通过ILM,Elasticsearch提供了强大的工具来自动化时间序列数据的索引滚动操作。无论是通过数据流还是索引别名,你都可以根据需求选择合适的方式:

• 数据流:适用于追加写入的场景,提供自动滚动和生命周期管理。

• 索引别名:适用于需要更新或删除数据的场景,提供了更大的灵活性。

在Elasticsearch中,索引别名(Index Aliases)适用于需要更新或删除数据的场景,主要原因如下:

  1. 数据流的追加写入限制

数据流(Data Streams)是为追加写入设计的,主要用于处理时间序列数据,如日志、事件或度量数据。它们不支持直接更新或删除已存在的数据。如果需要频繁更新或删除数据,使用数据流可能会导致复杂性增加,因为这些操作需要通过额外的API(如`update_by_query`或`delete_by_query`)来实现。

  1. 索引别名的灵活性

索引别名提供了一种更灵活的方式来管理索引。你可以将别名指向一个或多个索引,并在需要时动态更新别名的指向。例如,你可以创建一个写入索引(write index),并将别名指向该索引。当需要滚动到新索引时,只需更新别名的指向即可。这种方式特别适合需要频繁更新或删除数据的场景,因为它允许直接对底层索引进行操作,而不会受到数据流的追加写入限制。

  1. 零停机时间的索引切换

索引别名支持原子性操作,这意味着在切换索引时不会出现停机时间。例如,当需要滚动到新索引时,可以先创建一个新索引,然后将别名从旧索引切换到新索引。这种无缝切换确保了应用的连续可用性。

  1. 支持更新和删除操作

索引别名允许直接对底层索引进行更新或删除操作。这使得在处理需要频繁修改数据的场景时更加高效。例如,如果你需要根据某些条件删除旧数据或更新现有数据,可以直接在别名指向的索引上执行这些操作。

总结

索引别名适用于需要更新或删除数据的场景,因为它提供了更高的灵活性和直接操作底层索引的能力。相比之下,数据流更适合追加写入的场景,因为它们不支持直接更新或删除数据。如果你的应用场景需要频繁更新或删除数据,建议使用索引别名而不是数据流。

通过创建生命周期策略和索引模板,你可以轻松地管理索引的生命周期,优化存储成本和查询性能,同时满足数据保留策略的要求。

如果你有任何疑问或需要进一步的帮助,请随时联系。

相关推荐
kngines2 小时前
【实战 ES】实战 Elasticsearch:快速上手与深度实践-2.1.2字段类型选择:keyword vs text、nested对象
大数据·elasticsearch·搜索引擎
m0_748256143 小时前
springboot之集成Elasticsearch
spring boot·后端·elasticsearch
risc1234566 小时前
【Elasticsearch】索引生命周期管理操作之Allocate(分配)
elasticsearch
ADFVBM6 小时前
重学SpringBoot3-整合 Elasticsearch 8.x (二)使用Repository
大数据·elasticsearch·jenkins
Elastic 中国社区官方博客6 小时前
使用 Elasticsearch 进行集成测试初始化数据时的注意事项
大数据·数据库·elasticsearch·搜索引擎·集成测试·可用性测试
risc1234566 小时前
【Elasticsearch】自定义内置的索引生命周期管理(ILM)策略。
elasticsearch
道法自然,人法天6 小时前
探索Elasticsearch:文档的CRUD
大数据·elasticsearch·搜索引擎
risc1234566 小时前
【Elasticsearch】Set up a data stream 创建data stream
elasticsearch
木木与代码(接项目)7 小时前
Git常用命令
chrome·git·elasticsearch