Elasticsearch索引的基本操作(3)-索引的滚动操作

本文介绍Elasticsearch中滚动索引的使用方法,包括触发条件、自动生成新索引名称的规则及示例,帮助解决大量日志数据管理难题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、说明

笔者的工作场景中,每天需要使用Elasticsearch处理数亿的日志记录,这些数据之间不会有直接的关系,只是用于记录以及用作后续的分析处理以及报表输出。如果都将这些数据所有的数据都放到相同的索引中,那随着时间的堆积,这无疑将会是非常庞大的数据,并且随着索引数量的增加,后续数据的插入和查询,都将会变得越来越慢。

Elasticsearch中提供了对滚动索引(rollover index)的支持,可以给索引设置一定的条件,并指定一个对外使用的索引别名,当索引达到指定的条件时,就会按照一定的规则建立新的索引,对应的别名也会指向新的索引,后续的数据就会写到新建的索引中。由于外部应用使用的是索引的别名,对这种变化也是完全无感知的。

触发滚动索引的参数

参数名

说明

max_age

指定索引存在的最大周期,如1d,7d,1m,1y

max_docs

存放的最的索引文档数,这个不包括副本中的索引文档数

max_size

索引中主分片所占用的空间大小

这几个条件可以同时设置,只要有其中一项条件达到了,就会触发建立新的索引的动作。

 

通过滚动操作生成的新的索引的名称,可以通过手工指定索引名称的方式,如果源索引的名称符合自动生成新的索引名称的要求,滚动生成的索引则会根据源索引名称,自动生成新的索引名称,以下是滚动索引名称自动生成的两种情况

  • 索引名称以索引名称的前缀、中划线“-”和数字这三部份构成,如logs-1、logs-01、logs-123456、logs-1234567等;中划线“-”后面的数字的长度小于6位,则生成的滚动索引的名称会自动用数字0补齐为6位,如logs-1、logs-01两个生成的下一个滚动索引的名称是logs-000002,因而在设定滚动索引时,要避免这种情况,否则后生成的会报索引已经存在的异常;中划线“-”后面的数字的长度大于等于6位的,则生成滚动索引时,会在该数字的基础之上,往上加1,如logs-123456生成的下个滚动索引是logs-123457,logs-1234567生成的下个滚动索引是logs-1234568。
  • 索引名称中包括日期的算式,由索引名称前缀、中划线“-”、日期算式、中划线“-”和数字这五部份构成,如logs-{now/d}-1,生成的滚动索引会在最后的数字的基础之上加1,数字补齐的规则和上面的用0补齐规则是一样的。

 

2、不符合自动生成滚动索引的示例

1)创建了一个名为logs_index_cannot_rollover的索引,并为其指定了别名logs_index:

PUT /logs_index_cannot_rollover

{

  "aliases": {

    "logs_index": {}

  }

}

响应:

{

  "acknowledged" : true,

  "shards_acknowledged" : true,

  "index" : "logs_index_cannot_rollover"

}

表示操作成功。

2)往其中写入2条数据:

POST /logs_index/_doc

{ "name":"feng" }

POST /logs_index/_doc

{ "name":"feng1" }

3)给上面的生成的索引指定滚动生成新的索引的条件,这里为了演示上的方便,为其设置条件max_dos为1:

POST /logs_index/_rollover/logs_index_cannot_rollover-1

{

  "conditions": {

    "max_docs":  1

  }

}

由于这里的源索引不符合自动生成新的滚动索引名称的要求,因而这里必须指定目标索引,否则会报错,其中logs_index_cannot_rollover-1为后面用于生成的新的滚动索引的名称。

响应:

{

  "acknowledged" : false,

  "shards_acknowledged" : false,

  "old_index" : "logs_index_cannot_rollover",

  "new_index" : "logs_index_cannot_rollover-1",

  "rolled_over" : false,

  "dry_run" : false,

  "conditions" : {

    "[max_docs: 1]" : false

  }

}

表示滚动请求执行成功了,生成了新的索引logs_index_cannot_rollover,别名logs_index会从自动从原索引logs_index_cannot_rollover上自动删除,然后指向新生成的索引,后续新生成的文档也会自动插入到新的索引中。

3、符合自动生成滚动索引的示例

3.1 索引名称符合数字格式要求的示例

1)创建索引

PUT /logs_index-001

{

  "aliases": {

    "logs_index_auto": {}

  }

}

  1. 写入两条测试数据,请参考前面的数据写入示例。
  2. 执行滚动索引操作,不指定目标索引名称

POST /logs_index_auto/_rollover

{

  "conditions": {

    "max_docs":  1

  }

}

响应:

{

  "acknowledged" : false,

  "shards_acknowledged" : false,

  "old_index" : "logs_index-001",

  "new_index" : "logs_index-000002",

  "rolled_over" : false,

  "dry_run" : false,

  "conditions" : {

    "[max_docs: 1]" : false

  }

}

该响应中可以看到,生成了新的索引logs_index-000002。

3.2 索引名称符合日期算式格式要求的示例

1)创建索引,此时索引名称中包含了表达式和特殊字符,因而在执行请求前,需要将其进行URL编码操作,如下所示:

#/<logs_index_date_auto-{now/d}-001>

PUT /%3clogs_index_date_auto-%7bnow%2fd%7d-001%3e

{

  "aliases": {

    "logs_index_date_auto": {}

  }

}

响应:

{

  "acknowledged" : true,

  "shards_acknowledged" : true,

  "index" : "logs_index_date_auto-2019.05.03-001"

}

提示成功创建了索引,名称为logs_index_date_auto-2019.05.03-001。

2)写入两条测试数据,请参考前面的数据写入示例。

3)执行滚动索引操作,不指定目标索引名称:

POST /logs_index_date_auto/_rollover

{

  "conditions": {

    "max_docs":  1

  }

}

响应:

{

  "acknowledged" : true,

  "shards_acknowledged" : true,

  "old_index" : "logs_index_date_auto-2019.05.03-001",

  "new_index" : "logs_index_date_auto-2019.05.03-000002",

  "rolled_over" : true,

  "dry_run" : false,

  "conditions" : {

    "[max_docs: 1]" : true

  }

}

提示生成了新的索引,名称为logs_index_date_auto-2019.05.03-000002。

滚动索引创建新的索引的过程,与单独创建新的索引的过程是类似的,可以从符合符合的索引模板中自动读取配置、别名、mappings等信息,也单个在执行滚动(_rollover)这一动作时,同时指定新索引的配置、别名、mappings等信息,在些就不举例了。

滚动索引提供了一种新建索引不影响对外使用的方式,但其本身还不够智能,需要配合一些外部的自动化方法才可以做得更好,如定期执行滚动操作等,而不是由Elasticsearch本身去判断。

引用\[2\]:Elasticsearch中,可以使用滚动索引(rollover)来自动创建新的索引并将文档索引到该索引中。滚动索引的过程包括创建一个基于日期的索引,并使用别名将其与写索引关联起来。具体步骤如下: 1. 创建基于日期的索引,可以使用PUT请求来创建,其中索引名称可以包含日期占位符,如%3Cmy-index-%7Bnow%2Fd%7D-0000001%3E。同时,可以为该索引设置别名,并将is_write_index参数设置为true,表示该索引是写索引。 2. 使用GET请求来获取索引的设置,可以通过GET my-index-2022.12.25-0000001/_settings来获取。 3. 使用rollover操作滚动索引,即将写索引切换到新创建的索引上。 引用\[3\]:滚动索引Elasticsearch中的使用场景是每天生成一个索引来存储操作日志。为了避免每天修改存储索引名,可以将每天写入的索引都放在一个固定的索引别名下。可以通过添加模板来实现滚动生成索引的功能。具体步骤如下: 1. 使用PUT请求来添加模板,可以使用_template/test_template来添加一个名为test_template的模板。 2. 在模板中设置index_patterns,可以使用正则表达式来匹配以特定前缀开头的索引3. 在模板中设置索引的设置,包括分片数、副本数和字段映射等。 4. 可以添加别名来对索引进行管理,可以在aliases中添加大别名,并在其中添加其他参数。 所以,对于Elasticsearch 8.6版本,可以使用滚动索引来实现每天生成一个索引存储操作日志的需求。可以通过创建基于日期的索引,并使用别名将其与写索引关联起来,或者使用模板来自动创建索引并设置相关参数。 #### 引用[.reference_title] - *1* [ES滚动索引机制](https://blog.youkuaiyun.com/w1014074794/article/details/120647437)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [ES滚动索引设置](https://blog.youkuaiyun.com/Alecor/article/details/128437258)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Elasticsearch7.X Rollover 滚动生成动态时间索引](https://blog.youkuaiyun.com/EdgeCity_TF/article/details/127916522)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值