Elasticsearch 【索引別名 alias】

 https://www.elastic.co/guide/en/elasticsearch/reference/1.7/indices-aliases.html html

1、nginx

Elasticsearch的別名,就相似數據庫的視圖。web

建立別名:shell

咱們爲索引my_index建立一個別名my_index_alias,這樣咱們對my_index_alias的操做就像對my_index的操做同樣數據庫

POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "my_index",
        "alias": "my_index_alias"
      }
    }
  ]
}

別名不單單能夠關聯一個索引,它能聚合多個索引apache

咱們爲索引my_index_1 和 my_index_2 建立一個別名my_index_alias,這樣對my_index_alias的操做(僅限讀操做),會操做my_index_1和my_index_2,相似於聚合了my_index_1和my_index_2.咱們是不能對my_index_alias進行寫操做,當有多個索引時alias,不能區分到底操做哪個elasticsearch

POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "my_index_1",
        "alias": "my_index_alias"
      }
    },
    {
      "add": {
        "index": "my_index_2",
        "alias": "my_index_alias"
      }
    }
  ]
}

GET /my_index_alias/_search
{
}

建立filtered的別名:ide

例如對於同一個index,咱們給不一樣人看到不一樣的數據,
ui

如my_index有個字段是team,team字段記錄了該數據是那個team的。team之間的數據是不可見的。spa

POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "my_index",
        "alias": "my_index__teamA_alias",
        "filter":{
            "term":{
                "team":"teamA"
            }
        }
      }
    },
    {
      "add": {
        "index": "my_index",
        "alias": "my_index__teamB_alias",
        "filter":{
            "term":{
                "team":"teamB"
            }
        }
      }
    },
    {
      "add": {
        "index": "my_index",
        "alias": "my_index__team_alias"
      }
    }
  ]
}

GET /my_index__teamA_alias/_search 只能看到teamA的數據
GET /my_index__teamB_alias/_search 只能看到teamB的數據
GET /my_index__team_alias/_search 既能看到teamA的,也能看到teamB的數據


2、情景

情景1:用Logstash採集當前全部nginx的日誌,放入ES,索引名叫nginx-YYYY.MM.DD

後來又增長了apache的日誌,但願能放到同一個索引中,統一叫作web-YYYY.MM.DD

咱們只要把logstash的配置更改下,而後重啓,這樣數據就會寫入到新的索引下,可是同一天的索引就會被寫入2個索引中,Kibana中就很差配置了。


解決方案:

1.今天是2015-11-13.咱們爲nginx-2015.11.13建立一個alias叫作web-2015.07.28,以前全部的nginx日誌也這樣

2.kibana中把dashboard的配置索引名改成web-YYYY.MM.DD

3.將logstash裏面的elasticsearch的配置改成web-YYYY.MM.DD,重啓


情景2:用Logstash採集當前全部nginx的日誌,放入ES,索引名叫nginx-YYYY.MM.DD

某天2015-11-13但願按照月來創建索引,索引名改成nginx-YYYY.MM

注意:像情景1中,咱們創建一個nginx-2015.11的alias執行本月的其餘索引,是不行的。由於一個alias指向多個索引後,寫這個alias時,ES不可能知道寫入到那個真正的索引中。


解決方案1:

1.新建索引nginx-2015.11 以及它的nginx-2015.11.01,nginx-2015.11.02,...,nginx-2015.11.30等

2.等到了次日,將logstash的配置改成nginx-YYYY.MM,重啓

3.若是索引只保留10天,在10天候的某天,將kibana的配置改成nginx-YYYY.MM

缺點:第二步和第三步須要手工,能夠寫crontab定時任務


咱們不但願用戶(Kibaba的使用者)感受到任何變化,更不能讓使用者感受到數據的丟失。

相關文章
相關標籤/搜索