内容简介:笔者的工作场景中,每天需要使用Elasticsearch处理数亿的日志记录,这些数据之间不会有直接的关系,只是用于记录以及用作后续的分析处理以及报表输出。如果都将这些数据所有的数据都放到相同的索引中,那随着时间的堆积,这无疑将会是非常庞大的数据,并且随着索引数量的增加,后续数据的插入和查询,都将会变得越来越慢。Elasticsearch中提供了对滚动索引(rollover index)的支持,可以给索引设置一定的条件,并指定一个对外使用的索引别名,当索引达到指定的条件时,就会按照一定的规则建立新的索引,对应
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": {}
}
}
- 写入两条测试数据,请参考前面的数据写入示例。
- 执行滚动索引操作,不指定目标索引名称
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编码操作,如下所示:
#/
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本身去判断。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- Elasticsearch索引的基本操作(6)-索引设置
- Elasticsearch索引的基本操作(7)-索引模板
- Elasticsearch索引的基本操作(8)-索引缓存、refresh、flush等操作
- Elasticsearch 入门到高手的成长阶梯-索引的基本操作(2)-索引的收缩和拆分
- Elasticsearch索引的基本操作(5)-别名设置
- Elasticsearch索引的基本操作(4)-Mapping设置
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
SHA 加密
SHA 加密工具
Markdown 在线编辑器
Markdown 在线编辑器