《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.13.Rollover API(2) https://developer.aliyun.com/article/1230208
基于数据流滚动
数据流必须要提前设定一个索引模板,否则无法创建数据流。
PUT _index_template/template { "index_patterns": ["my-data-stream*"], "data_stream": { } }
创建数据流
PUT /_data_stream/my-data-stream # 备注1
创建一个名为my-data-stream的数据流,并且初始化一个名字为my-data-stream-000001的backing索引。
查看GET /_data_stream/my-data-stream。返回值如下:
{ "data_streams" : [ { "name" : "my-data-stream", "timestamp_field" : { "name" : "@timestamp" }, "indices" : [ { "index_name" : ".ds-my-data-stream-000001", "index_uuid" : "Vir6yRm4S42k8n22mZ5YBw" } ], "generation" : 1, "status" : "GREEN", "template" : "my-index-template", "ilm_policy" : "my-lifecycle-policy" } ] }
插入数据,然后执行滚动:
# Add > 2 documents to my-data-stream #为了能够实时的看到效果插入数据时,加上 refresh 参数 PUT my-data-stream/_bulk?refresh { "create":{ } } { "@timestamp": "2099-05-06T16:21:15.000Z", "message": "192.0.2.42 - - [06/May/2099:16:21:15 +0000] \"GET /images/bg.jpg HTTP/1.0\" 200 24736" } { "create":{ } } { "@timestamp": "2099-05-06T16:25:42.000Z", "message": "192.0.2.255 - - [06/May/2099:16:25:42 +0000] \"GET /favicon.ico HTTP/1.0\" 200 3638" } { "create":{ } } { "@timestamp": "2099-05-06T16:27:42.000Z", "message": "192.0.2.255 - - [06/May/2099:16:25:42 +0000] \"GET /favicon.ico HTTP/1.0\" 200 3638" } POST /my-data-stream/_rollover #备注1 { "conditions" : { "max_age": "7d", "max_docs": 2, "max_size": "5gb" } }
如果当前的写数据索引满足条件集中的任何一个条件;则滚动目标将创建一个新的backing索引my-data-stream-000002,且新的backing索引将作为写入数据的索引。
上面代码块的 Rollover API 返回值如下:
{ "acknowledged" : false, "shards_acknowledged" : false, "old_index" : ".ds-my-data-stream-000001",#数据流之前对应的写数据索引 "new_index" : ".ds-my-data-stream-000002",,#数据流新对应的写数据索引 "rolled_over" : true,#索引是否执行滚动 "dry_run" : false, # 是否为 dry_run 模式 "conditions" : { # 滚动条件集,集触发情况 "[max_size: 5gb]" : false, "[max_docs: 2]" : true, "[max_age: 7d]" : false } }
再次查看数据流:
{ "data_streams" : [ { "name" : "my-data-stream", # 数据流名称 "timestamp_field" : { "name" : "@timestamp" }, "indices" : [ { # backing索引 "index_name" : ".ds-my-data-stream-000001", "index_uuid" : "Vir6yRm4S42k8n22mZ5YBw" }, { "index_name" : ".ds-my-data-stream-000002", "index_uuid" : "WcctdbIqSMqk3MmefRdfDQ" } ], "generation" : 2, #当前是那一个版本的后备索引作为写索引 "status" : "GREEN", "template" : "my-index-template", # 适配的索引模板 "ilm_policy" : "my-lifecycle-policy" } ] }
也可以通过 Kibana 进行查看:
目标索引设定 setting
新索引的setting、mapping和aliases可以取自索引名匹配的任何索引模板。如果 为索引别名,你可以在 rollover API的请求体中指定settings, mappings和aliases,与创建索引的API(create index API)类似。如果请求体指定的值优先于匹配的索引模板。
如下示例重写了 index.number_of_shards 设置:
PUT /logs-000001 { "aliases": { "logs_write": {} } } POST /logs_write/_rollover { "conditions" : { "max_age": "7d", "max_docs": 2, "max_size": "5gb" }, "settings": { "index.number_of_shards": 2 } }
《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用——3.4.2.13.Rollover API(4) https://developer.aliyun.com/article/1230206