Home > Back-end >  Elasticsearch alias not pointing to new indexes created by the rollover strategy
Elasticsearch alias not pointing to new indexes created by the rollover strategy

Time:12-02

Elasticsearch: 7.15.2

We have an alias created in this way:

POST _aliases
{
  "actions": [
   {
     "add": {
       "index": "my-index-*",
       "alias": "my-alias",
       "is_write_index": false
     }
   }
 ]
}

And if I get the alias info I can see

GET _alias/my-alias
{
 "my-index-2021.11.30-000001" : {
    "aliases" : {
       "my-alias" : { }
    }
 }
}

However there is another index which has been created automatically by the rollover policy: my-index-2021.11.30-000002 but this index is not pointed by the alias created before my-alias

If I create a new alias from scratch with the same index pattern I can see both:

POST _aliases
{
  "actions": [
   {
     "add": {
       "index": "my-index-*",
       "alias": "my-alias-2",
       "is_write_index": false
     }
   }
 ]
}

GET _alias/my-alias-2
{
  "my-index-2021.11.30-000001" : {
    "aliases" : {
      "my-alias-2" : { }
    }
  },
  "my-index-2021.11.30-000002" : {
   "aliases" : {
     "my-alias-2" : { }
   }
 }
}

Is there something that I am missing? I was expecting to see also the *-000002 index pointed by the alias my-alias without any manual operation.

The rollover policy is just creating a new index if the index size is grater then X GBs

or maybe do I have to modify the index template in order to add the "read" alias automatically? I have already the alias specified in the template but that is the write alias for the rollover policy (which I cannot use for search because our custom elasticsearch configuration)

{
  "index": {
    "lifecycle": {
      "rollover_alias": "my-write-alias"
    }
  }
}

CodePudding user response:

When you create an alias using POST _aliases it will just create the alias on the matching indexes that currently exist, but if a new index is created later and matches the criteria, the alias will not be added to that index.

What you need to do is to:

  1. create an index template containing your alias definition
  2. assign your rollover policy to your template index setting (i.e. the index.lifecycle.name and index.lifecycle.rollover_alias settings)

Basically, like this:

PUT _index_template/my_index_template
{
  "index_patterns": ["my-index-*"],                 
  "template": {
    "alias": {
      "my-alias": {}
    },
    "mappings": {
       ...
    },
    "settings": {
      "index.lifecycle.name": "my_policy",      
      "index.lifecycle.rollover_alias": "my_write_alias"    
    }
  }
}

After this is set up, every time the lifecycle policy creates a new index my-index-2021.MM.dd-000xyz, that new index will be pointed to by my-alias. Also worth noting that my_write_alias will always point to the latest index of the sequence, i.e. the write index.

  • Related