Elasticsearch 之索引别名 alias

转载自:http://www.javashuo.com/article/p-mtysxlhy-cg.htmlnginx

1、web

Elasticsearch的别名,就相似数据库的视图。shell

建立别名:数据库

咱们为索引my_index建立一个别名my_index_alias,这样咱们对my_index_alias的操做就像对my_index的操做同样apache

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

 

别名不单单能够关联一个索引,它能聚合多个索引bash

咱们为索引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的别名:spa

例如对于同一个index,咱们给不一样人看到不一样的数据,.net

如my_index有个字段是team,team字段记录了该数据是那个team的。team之间的数据是不可见的。日志

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的使用者)感受到任何变化,更不能让使用者感受到数据的丢失。

相关文章
相关标签/搜索