Elasticsearch rollover index滚动索引

滚动索引一般可以与索引模板结合使用,实现按一定条件自动创建索引。

 

1.当现有索引被认为太大或太旧时,滚动索引API会将别名滚动到新的索引。

PUT /logs-000001 
{
  "aliases": {
    "logs_write": {}
  }
}

# Add > 1000 documents to logs-000001

POST /logs_write/_rollover 
{
  "conditions": {
    "max_age":   "7d",
    "max_docs":  1000,
    "max_size":  "5gb"
  }
}

创建索引 logs-0000001 别名为 logs_write.
如果 logs_write 指向的索引是在7天以前创建的,或者包含1000个以上的文档,则会创建 logs-000002索引,并更新logs_write别名以指向logs-000002.

返回值
{
  "acknowledged": true,
  "shards_acknowledged": true,
  "old_index": "logs-000001",
  "new_index": "logs-000002",
  "rolled_over": true,
  "dry_run": false,
  "conditions": {
    "[max_age: 7d]": false,
    "[max_docs: 1000]": true
  }
}

2.如果现有索引的名称以 - 和数字结尾。 logs-000001 - 然后新索引的名称将遵循相同的模式,增加数字(logs-000002)。 无论旧索引名称如何,编号为零填充长度为6。

如果旧名称与此模式不匹配,则必须按照如下所示,指定新索引的名称:

POST /my_alias/_rollover/my_new_index_name
{
  "conditions": {
    "max_age":   "7d",
    "max_docs":  1000,
    "max_size": "5gb"
  }
}

3.使用日期计算: 根据索引滚动的日期来命名滚动索引是有用的技术,例如  logstash-2016.02.03.。 滚动API支持日期,但要求索引名称以一个破折号后跟一个数字,例如 logstash-2016.02.03-1,每次索引滚动时都会增加。 例如

# PUT /<logs-{now/d}-1> with URI encoding:
PUT /%3Clogs-%7Bnow%2Fd%7D-1%3E 
{
  "aliases": {
    "logs_write": {}
  }
}

PUT logs_write/_doc/1
{
  "message": "a dummy log"
}

POST logs_write/_refresh

# Wait for a day to pass

POST /logs_write/_rollover 
{
  "conditions": {
    "max_docs":   "1"
  }
}

4.索引名称对日期计算的支持:

日期计算的格式

<static_name{date_math_expr{date_format|time_zone}}>

上述的说明 : 

位置
说明
static_name 是名称的 static text( 静态文本)部分
date_math_expr 是动态计算日期的动态 date math 表达式
date_format 是计算日期应呈现的可选格式。默认是 YYYY.MM.dd
time_zone 是可选的时区。默认为 utc 。

 必须将 date math 索引名称表达式包含在尖括号中,并且所有的特殊字符都应进行 URI 编码。例如 :

# GET /<logstash-{now/d}>/_search
GET /%3Clogstash-%7Bnow%2Fd%7D%3E/_search
{
  "query" : {
    "match": {
      "test": "data"
    }
  }
}

用于 date 舍入的特殊字符必须按照如下 URI 编码 :

<

%3C

>

%3E

/

%2F

{

%7B

}

%7D

|

%7C

+

%2B

:

%3A

,

%2C

以下示例显示了不同形式索引表达式和它们解析的 final index names(最终索引名称),给定的当前时间是 2024 年 月 22 日 utc

ExpressionResolves to

<logstash-{now/d}>

logstash-2024.03.22

<logstash-{now/M}>

logstash-2024.03.01

<logstash-{now/M{YYYY.MM}}>

logstash-2024.03

<logstash-{now/M-1M{YYYY.MM}}>

logstash-2024.02

<logstash-{now/d{YYYY.MM.dd|+12:00}}>

logstash-2024.03.23

如果索引中需要使用{}需要进行转义处理

<elastic\\{ON\\}-{now/M}> resolves to elastic{ON}-2024.03.01

5.滚动API支持dry_run模式,可以在不执行实际滚动的情况下检查请求条件:

PUT /logs-000001
{
  "aliases": {
    "logs_write": {}
  }
}

POST /logs_write/_rollover?dry_run
{
  "conditions" : {
    "max_age": "7d",
    "max_docs": 1000,
    "max_size": "5gb"
  }
}

 

posted @ 2019-04-09 17:33  粒子先生  阅读(10788)  评论(2编辑  收藏  举报