rollover使您能夠根據索引大小,文檔數或使用期限自動過渡到新索引。 當rollover觸發後,將建立新索引,寫別名(write alias)將更新爲指向新索引,全部後續更新都將寫入新索引。php
對於基於時間的rollover來講,基於大小,文檔數或使用期限過渡至新索引是比較適合的。 在任意時間rollover一般會致使許多小的索引,這可能會對性能和資源使用產生負面影響。elasticsearch
Rollover歷史數據ide
在大多數狀況下,無限期保留歷史數據是不可行的性能
Elasticsearch 6.3引入了一項新的rollover功能,該功能網站
就像上面的圖片看到的那樣,咱們定義了一個叫作logs-alias的alias,對於寫操做來講,它老是會自動指向最新的能夠用於寫入index的一個索引。針對咱們上面的狀況,它指向logs-000002。若是新的rollover發生後,新的logs-000003將被生成,並對於寫操做來講,它自動指向最新生產的logs-000003索引。而對於讀寫操做來講,它將同時指向最早的logs-1,logs-000002及logs-000003。在這裏咱們須要注意的是:在咱們最先設定index名字時,最後的一個字符必須是數字,好比咱們上面顯示的logs-1。不然,自動生產index將會失敗。編碼
rollover例子咱們仍是先拿一個rollover的例子來講明,這樣比較清楚。首先咱們定義一個log-alias的alias:url
PUT /%3Clogs-%7Bnow%2Fd%7D-1%3E { "aliases": { "log_alias": { "is_write_index": true } } }
若是你們對於上面的字符串「%3Clogs-%7Bnow%2Fd%7D-1%3E」比較陌生的話,能夠參考網站https://www.urlencoder.io/。實際上它就是字符串「<logs-{now/d}-1>」的url編碼形式。請注意上面的is_write_index必須設置爲true。運行上面的結果是:code
{ "acknowledged" : true, "shards_acknowledged" : true, "index" : "logs-2019.10.21-1" }
顯然,它幫咱們生產了一個叫作logs-2019.10.21-1的index。接下來,咱們先使用咱們的Kibana來準備一下咱們的index數據。咱們運行起來咱們的Kibana:blog
咱們分別點擊上面的1和2處:索引
點擊上面的「Add data」。這樣咱們就能夠把咱們的kibana_sample_data_logs索引加載到Elasticsearch中。咱們能夠經過以下的命令進行查看:
GET _cat/indices/kibana_sample_data_logs
命令顯示結果爲:
它顯示kibana_sample_data_logs具備11.1M的數據,而且它有14074個文檔:
咱們接下來運行以下的命令:
POST _reindex { "source": { "index": "kibana_sample_data_logs" }, "dest": { "index": "log_alias" } }
這個命令的做用是把kibana_sample_data_logs裏的數據reindex到log_alias所指向的index。也就是把kibana_sample_data_logs的文檔複製一份到咱們上面顯示的logs-2019.10.21-1索引裏。咱們作以下的操做查看一下結果:
GET logs-2019.10.21-1/_count
顯示的結果是:
{ "count" : 14074, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 } }
顯然,咱們已經複製到全部的數據。那麼接下來,咱們來運行以下的一個指令:
POST /log_alias/_rollover?dry_run { "conditions": { "max_age": "7d", "max_docs": 14000, "max_size": "5gb" } }
在這裏,咱們定義了三個條件:
在上面咱們使用了dry_run參數,代表就是運行時看看,但不是真正地實施。顯示的結果是:
{ "acknowledged" : false, "shards_acknowledged" : false, "old_index" : "logs-2019.10.21-1", "new_index" : "logs-2019.10.21-000002", "rolled_over" : false, "dry_run" : true, "conditions" : { "[max_docs: 1400]" : true, "[max_size: 5gb]" : false, "[max_age: 7d]" : false } }
根據目前咱們的條件,咱們的logs-2019.10.21-1文檔數已經超過14000個了,因此會生產新的索引logs-2019.10.21-000002。由於我使用了dry_run,也就是演習,因此顯示的rolled_over是false。
爲了能真正地rollover,咱們運行以下的命令:
POST /log_alias/_rollover { "conditions": { "max_age": "7d", "max_docs": 1400, "max_size": "5gb" } }
顯示的結果是:
{ "acknowledged" : true, "shards_acknowledged" : true, "old_index" : "logs-2019.10.21-1", "new_index" : "logs-2019.10.21-000002", "rolled_over" : true, "dry_run" : false, "conditions" : { "[max_docs: 1400]" : true, "[max_size: 5gb]" : false, "[max_age: 7d]" : false } }
說明它已經rolled_ovder了。咱們能夠經過以下寫的命令來檢查:
GET _cat/indices/logs-2019*
顯示的結果爲:
咱們如今能夠看到有兩個以logs-2019.10.21爲頭的index,而且第二文檔logs-2019.10.21-000002文檔數爲0。若是咱們這個時候直接再想log_alias寫入文檔的話:
POST log_alias/_doc { "agent": "Mozilla/5.0 (X11; Linux x86_64; rv:6.0a1) Gecko/20110421 Firefox/6.0a1", "bytes": 6219, "clientip": "223.87.60.27", "extension": "deb", "geo": { "srcdest": "IN:US", "src": "IN", "dest": "US", "coordinates": { "lat": 39.41042861, "lon": -88.8454325 } }, "host": "artifacts.elastic.co", "index": "kibana_sample_data_logs", "ip": "223.87.60.27", "machine": { "ram": 8589934592, "os": "win 8" }, "memory": null, "message": """ 223.87.60.27 - - [2018-07-22T00:39:02.912Z] "GET /elasticsearch/elasticsearch-6.3.2.deb_1 HTTP/1.1" 200 6219 "-" "Mozilla/5.0 (X11; Linux x86_64; rv:6.0a1) Gecko/20110421 Firefox/6.0a1" """, "phpmemory": null, "referer": "http://twitter.com/success/wendy-lawrence", "request": "/elasticsearch/elasticsearch-6.3.2.deb", "response": 200, "tags": [ "success", "info" ], "timestamp": "2019-10-13T00:39:02.912Z", "url": "https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.3.2.deb_1", "utc_time": "2019-10-13T00:39:02.912Z" }
顯示的結果:
{ "_index" : "logs-2019.10.21-000002", "_type" : "_doc", "_id" : "xPyQ7m0BsjOKp1OsjsP8", "_version" : 1, "result" : "created", "_shards" : { "total" : 1, "successful" : 1, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1 }
顯然它寫入的是logs-2019.10.21-000002索引。咱們再次查詢log_alias的總共文檔數:
GET log_alias/_count
顯示的結果是:
{ "count" : 14075, "_shards" : { "total" : 2, "successful" : 2, "skipped" : 0, "failed" : 0 } }
顯然它和以前的14074個文檔多增長了一個文檔,也就是說log_alias是同時指向logs-2019.10.21-1及logs-2019.10.21-000002。
總結:在今天的文檔裏,咱們講述瞭如何使用rollover API來自動管理咱們的index。利用rollover API,它能夠很方便地幫咱們自動根據咱們設定的條件幫咱們把咱們的Index過分到新的index。在將來的文章裏,咱們將講述如何使用Index life cycle policy來幫咱們管理咱們的index。