Pourquoi l'action de substitution d'index de ma politique ISM échoue-t-elle toujours dans OpenSearch Service ?

Lecture de 8 minute(s)
0

Je souhaite utiliser Index State Management (ISM) pour substituer mes index sur mon cluster Amazon OpenSearch Service. Toutefois, il est impossible de substituer mon index et je reçois un message d'erreur.

Brève description

Les raisons suivantes peuvent provoquer l'erreur « Impossible de substituer l’index » :

  • La cible de substitution n'existe pas.
  • L'alias de substitution est manquant.
  • Le nom de l'index ne correspond pas au modèle d'index.
  • L'alias de substitution pointe vers un alias copié dans un modèle d'index.
  • Vous utilisez au maximum les ressources de votre cluster.

Pour résoudre ce problème, utilisez l’API explain afin d’identifier la cause de l’erreur. Vérifiez ensuite votre politique ISM. Pour en savoir plus sur la configuration de l'action de substitution, voir Comment utiliser ISM pour gérer un espace de stockage restreint dans OpenSearch Service ?

Remarque : La résolution suivante s'applique uniquement à l'API OpenSearch. Pour l'ancienne API Open Distro, voir ISM API sur le site Web d'Open Distro.

Résolution

Utilisation de l'API explain pour identifier la cause de l’erreur

Pour identifier la cause première de l'erreur « Impossible de substituer l'index », utilisez l'API explain :

GET _plugins/_ism/explain/logs-000001?pretty

Exemple de résultat de l'API explain :

{
     "logs-000001": {
          "index.plugins.index_state_management.policy_id": "rollover-workflow",
          "index": "logs-000001",
          "index_uuid": "JUWl2CSES2mWYXqpJJ8qlA",
          "policy_id": "rollover-workflow",
          "policy_seq_no": 2,
          "policy_primary_term": 1,
          "rolled_over": false,
          "state": {
               "name": "open",
               "start_time": 1614738037066
          },
          "action": {
               "name": "rollover",
               "start_time": 1614739372091,
               "index": 0,
               "failed": true,
               "consumed_retries": 0,
               "last_retry_time": 0
          },
          "retry_info": {
               "failed": false,
               "consumed_retries": 0
          },
          "info": {
               "cause": "rollover target [rolling-indices] does not exist",
               "message": "Failed to rollover index [index=logs-000001]"
          }
     }
}

Cet exemple montre que les index n'ont pas pu être substitués car l'alias de substitution cible rolling-indices n'existe pas.

La cible de substitution n'existe pas

Si la cause de l’erreur est que « la cible de substitution\ [rolling-indices ] n'existe pas », vérifiez si l'index a été initialisé avec l'alias de substitution :

GET _cat/aliases

Le résultat répertorie tous les alias actuels du cluster et leurs index associés. Si ISM indique que votre cible de substitution n'existe pas, cela signifie qu'il manque un nom d'alias de substitution et que l’association d'index a échoué.

Pour résoudre l'échec de l'association d'index, associez l'alias de substitution à l'index :

POST /_aliases
{
     "actions": [{
          "add": {
               "index": "logs-000001",
               "alias": "my-data"
          }
     }]
}

Après avoir associé l'alias de substitution, réessayez de substituer l'index géré dans OpenSearch Service :

POST _plugins/_ism/retry/logs-000001

Pour en savoir plus, voir Retry failed index sur le site Web d'OpenSearch.

Lorsque vous retentez de substituer l'index, vous pouvez recevoir le message d'état « Nouvelle tentative ». Attendez que le cycle ISM suivant s'exécute. Les cycles ISM s'exécutent toutes les 30-48 minutes. Si l'action de substitution aboutit, le message suivant s'affichera : « Index substitué avec succès ».

L'alias de substitution est manquant

Si l'échec de votre substitution est dû à l'absence d'un alias de substitution, vérifiez les paramètres de l'index qui n’a pu être substitué :

GET <failed-index-name>/_settings

Si vous constatez que le paramètre index.plugins.index_state_management.rollover_alias est absent, ajoutez-le manuellement à votre index :

PUT /<failed-index-name>/_settings
{
     "index.plugins.index_state_management.rollover_alias" : "<rollover-alias>"
}

Utilisez l'API retry failed index pour retenter de substituer l'index. Après la substitution, mettez à jour votre modèle de politique :

PUT _index_template/<template-name>

Veillez à utiliser les mêmes paramètres que ceux de votre modèle de politique existant afin que votre alias de substitution soit appliqué aux index nouvellement créés.

Exemple :

PUT _index_template/<existing-template>
{
     "index_patterns": [
          "<index-pattern*>"
     ],
     "template": {
          "settings": {
               "plugins.index_state_management.rollover_alias": "<rollover-alias>"
          }
     }
}

Le nom de l'index ne correspond pas au modèle d'index

Si votre politique ISM indique que votre opération de substitution a échoué parce que le nom et le modèle d'index ne correspondent pas, vérifiez le nom de l'index dont la substitution a échoué. Pour des substitutions réussies, les noms d'index doivent correspondre au modèle d'expression régulière suivant :

`^.*-\d+$`

Ce modèle d'expression régulière indique que les noms d'index doivent inclure du texte suivi d'un tiret (-) et d'un ou plusieurs chiffres. Si le nom d'index ne suit pas ce modèle et que des données sont écrites sur votre premier index, ré-indexez les données. Lorsque vous ré-indexez les données, utilisez un nom correct pour votre nouvel index.

Exemple :

POST _reindex
{
     "source": {
          "index": "<failed-index>"
     },
     "dest": {
          "index": "my-new-index-000001"
     }
}

Lorsque l'API ré-indexe les données, dissociez l'alias de substitution de l'index dont la substitution a échoué. Ajoutez ensuite l'alias de substitution au nouvel index afin que la source de données puisse continuer d’écrire les données entrantes dans un nouvel index. Pour en savoir plus, consultez l'API reindex document sur le site Web d'OpenSearch.

Exemple :

POST /_aliases
{
     "actions": [{
          "remove": {
               "index": "<failed-index>",
               "alias": "<rollover-alias>"
          }
     },
     {
          "add": {
               "index": "my-new-index-000001",
               "alias": "<rollover-alias>"
          }
     }]
}

Utilisez l'appel d'API suivant pour associer manuellement la politique ISM au nouvel index :

POST _plugins/_ism/add/my-new-index-*
{
     "policy_id": "<policy_id>"
}

Mettez à jour le modèle existant pour qu'il reflète le nouveau nom du modèle d'index. Par exemple :

PUT _index_template/<existing-template>
{
     "index_patterns": ["<my-new-index-pattern*>"],
}

**Remarque :**Votre politique ISM et votre alias de substitution doivent refléter les index successifs créés avec le même modèle d'index.

L'alias de substitution pointe vers un alias copié dans un modèle d'index

Si la substitution de votre index a échoué parce qu'un alias de substitution pointe vers un alias copié, vérifiez les paramètres de votre modèle d'index :

GET _index_template/<template-name>

Vérifiez si votre modèle contient une autre sectionaliasesavec un autre alias pointant vers le même index :

{
     "index_patterns": ["my-index*"],
     "settings": {
          "index.plugins.index_state_management.rollover_alias": "<rollover-alias>"
     },
     "aliases": {
          "another_alias": {
               "is_write_index": true
          }
     }
}

La présence de plusieurs alias entraîne l'échec de la substitution. Pour résoudre ce problème, mettez à jour les paramètres du modèle sans spécifier d'alias :

PUT _index_template/<template-name>

Exécutez ensuite l'API retry sur l'index dont la substitution a échoué :

POST _plugins/_ism/retry/logs-000001

Important :Si un alias pointe vers plusieurs index, assurez-vous que l'accès en écriture est activé pour un seul index. L'APIrollover fournit automatiquement un accès en écriture pour l'index vers lequel pointe l'alias de substitution. Lorsque vous effectuez l'opération de substitution dans ISM, vous n'avez pas besoin de spécifier d'alias pour le paramètre is_write_index.

Vous utilisez au maximum les ressources de votre cluster

Une exception liée à un disjoncteur ou un manque d'espace de stockage peuvent entraîner une utilisation maximale des ressources de votre cluster.

Exception liée à un disjoncteur

Si la cause de l’erreur est une exception liée à un disjoncteur, votre cluster a probablement subi une forte sollicitation de la mémoire JVM lors de l’appel de l’API rollover. Pour résoudre les problèmes de forte sollicitation de la mémoire JVM, consultez la section Comment résoudre les problèmes de forte sollicitation de la mémoire JVM sur mon cluster Amazon OpenSearch Service ?
Lorsque la sollicitation de la mémoire JVM est inférieure à 75 %, vous pouvez retenter l’opération sur l'index dont la substitution a échoué avec l’appel API suivant :

POST _plugins/_ism/retry/<failed-index-name>

Remarque : Utilisez les modèles d'index (*) pour retenter l’opération sur plusieurs index défaillants.

Si vous rencontrez des pics peu fréquents de la mémoire JVM sur votre cluster, vous pouvez également mettre à jour la politique ISM en utilisant le bloc de nouvelles tentatives suivant pour l'action de substitution :

{
     "actions": {
          "retry": {
               "count": 3,
               "backoff": "exponential",
               "delay": "10m"
          }
     }
}

Dans votre politique ISM, chaque action fait l'objet d'une nouvelle tentative automatique basée sur le paramètre count. Si l’opération précédente échoue, vérifiez le paramètre delay afin de savoir combien de temps vous devez attendre pour qu’ISM retente l’action. Pour en savoir plus, voir Actions sur le site Web d'OpenSearch.

Manque d'espace de stockage

Si votre cluster manque d'espace de stockage, OpenSearch Service lancera un bloc d'écriture sur le cluster. Le bloc d'écriture fait en sorte que toutes les opérations d'écriture renvoient ClusterBlockException sur votre cluster. Votre métrique ClusterIndexWritesBlocked affiche la valeur « 1 », indiquant que le cluster bloque les demandes. Par conséquent, toute tentative de création d'un nouvel index échoue. L'appel d’API explain renvoie également 403 IndexCreateBlockException, indiquant que le cluster n'a plus d'espace de stockage. Pour résoudre l’exception de bloc du cluster, visitez Comment résoudre l’erreur 403 « index_create_block_exception » dans le Service OpenSearch ?

Une fois que la métrique ClusterIndexWritesBlocked est revenue à « 0 », retentez l'action ISM sur l'index défaillant. Si la sollicitation ion de la mémoire JVM dépasse 92 % pendant plus de 30 minutes, un bloc d'écriture pourrait être lancé. Si vous rencontrez un blocage d'écriture, résolvez plutôt le problème de sollicitation de la mémoire. Pour en savoir plus sur la réduction de la sollicitation de la mémoire JVM, consultez la section Comment résoudre les problèmes de forte sollicitation de la mémoire JVM sur mon cluster OpenSearch Service ?

AWS OFFICIEL
AWS OFFICIELA mis à jour il y a un an