ISM ポリシーのロールオーバーインデックスアクションが OpenSearch Service で何度も失敗するのはなぜですか?

所要時間3分
0

インデックスステート管理 (ISM) を使用して Amazon OpenSearch Service クラスターのインデックスをロールオーバーしたいと考えています。しかし、インデックスがロールオーバーされず、エラーが表示されます。

簡単な説明

以下の理由により、「ロールオーバー失敗」インデックスエラーが発生する可能性があります。

  • ロールオーバーターゲットが存在しません。
  • ロールオーバーエイリアスが見つかりません。
  • インデックス名がインデックスパターンと一致しません。
  • ロールオーバーエイリアスが、インデックステンプレート内の重複したエイリアスを参照しています。
  • クラスターのリソース使用率が最大です。

この問題を解決するには、** explain ** API を使用してエラーの原因を特定してください。次に、ISM ポリシーを確認してください。ロールオーバーアクションの設定の詳細については、ISM を使用して OpenSearch Service の低容量ストレージを管理するにはどうしたらいいですか?を参照してください。

**注:**以下の解決策は OpenSearch API にのみ適用されます。従来の Open Distro API については、Open Distro の Web サイトで ISM API を参照してください。

解決方法

explain API を使用して原因を特定してください

「インデックスのロールオーバーに失敗しました」というエラーの根本原因を特定するには、** explain ** APIを使用してください。

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

explainAPI の出力例:

{
     "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]"
          }
     }
}

この出力例は、ターゲットのロールオーバーエイリアス rolling-indices が存在しないためにインデックスのロールオーバーに失敗したことを示しています。

ロールオーバーターゲットが存在しません

原因が「ロールオーバーターゲット\ [rolling-indices] が存在しません」の場合は、インデックスがロールオーバーエイリアスでブートストラップされているかどうかを確認してください。

GET _cat/aliases

出力には、クラスター内の現在のすべてのエイリアスとそれに関連するインデックスが一覧表示されます。ISM がロールオーバーターゲットが存在しないことを示している場合、ロールオーバーエイリアス名と失敗したインデックスの関連付けが見つからないことを意味します。

インデックスの関連付けに失敗する問題を解決するには、ロールオーバーエイリアスをインデックスにアタッチしてください。

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

ロールオーバーエイリアスをアタッチしたら、OpenSearch Service の管理インデックスでロールオーバーアクションを再試行してください。

POST _plugins/_ism/retry/logs-000001

詳細については、OpenSearch の Web サイトで失敗したインデックスの再試行を参照してください。

失敗したインデックスを再試行すると、「再試行中」というステータスメッセージが表示されることがあります。次の ISM サイクルが実行されるまで待機してください。ISM サイクルは 30 ~ 48 分ごとに実行されます。ロールオーバーアクションが成功すると、次のメッセージが表示されます。 「インデックスのロールオーバーに成功しました。」

ロールオーバーエイリアスが見つかりません

ロールオーバーの失敗の原因がロールオーバーエイリアス不足である場合、失敗したインデックスの設定を確認してください。

GET <failed-index-name>/_settings

**index.plugins.index\ _state\ _management.rolover\ _alias ** 設定が見つからない場合は、その設定を手動でインデックスに追加してください。

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

**失敗したインデックスの再試行 ** API を使用して、失敗したインデックスのロールオーバー操作を再試行します。ロールオーバーアクションが再試行されたら、ポリシーテンプレートを更新します。

PUT _index_template/<template-name>

新しく作成されたインデックスにロールオーバーエイリアスが適用されるようにするため、必ず既存のポリシーテンプレートと同じ設定を使用してください。

例:

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

インデックス名がインデックスパターンと一致しません

インデックス名とインデックスパターンが一致しないためにロールオーバー操作が失敗したと ISM ポリシーで示されている場合は、失敗したインデックスの名前を確認してください。ロールオーバーを成功させるには、インデックス名が次の正規表現パターンと一致する必要があります。

`^.*-\d+$`

この正規表現パターンからわかるように、インデックス名は、文字列、文字列の後にハイフン (-) および 1 つ以上の数字を記述する必要があります。インデックス名がこのパターンに従わず、かつ最初のインデックスにデータが書き込まれている場合は、データをインデックスし直してください。データのインデックスをし直す際は、正しい名前を使用してください。

例:

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

データ API がインデックスを再作成するときは、失敗したインデックスからロールオーバーエイリアスをデタッチします。次に、ロールオーバーエイリアスを新しいインデックスに追加して、データソースが引き続き入力データを新しいインデックスに書き込めるようにします。詳細については、OpenSearch の Web サイトで reindex ドキュメントの APIを参照してください。

例:

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

次の API 呼び出しを使用して、ISM ポリシーを新しいインデックスに手動でアタッチします。

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

既存のテンプレートを更新し、新しいインデックスパターン名を反映します。例:

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

**注:**ISM ポリシーとロールオーバーエイリアスは、同じインデックスパターンで作成された一連のインデックスを反映している必要があります。

ロールオーバーエイリアスが、インデックステンプレート内の重複したエイリアスを参照しています

ロールオーバーエイリアスが重複したエイリアスを参照しているためにインデックスのロールオーバーが失敗した場合、インデックステンプレートの設定を確認してください。

GET _index_template/<template-name>

テンプレートに、同じインデックスを指す別のエイリアスを含むエイリアスセクションが存在するかどうかを確認してください。

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

エイリアスが複数あると、ロールオーバーは失敗します。この問題を解決するには、エイリアスを指定せずにテンプレート設定を更新してください。

PUT _index_template/<template-name>

次に、失敗したインデックスに対して再試行 API を実行します。

POST _plugins/_ism/retry/logs-000001

重要:エイリアスが複数のインデックスを指している場合は、書き込み権限が有効になっているインデックスが 1 つだけであることを確認してください。ロールオーバー APIは、ロールオーバーエイリアスが参照するインデックスへの書き込み権限を自動的に提供します。ISM でロールオーバー操作を実行する場合、 is\ _write\ _index 設定にエイリアスを指定する必要はありません。

クラスターのリソース使用率がいっぱいです

サーキットブレーカーの例外やストレージ容量の不足により、クラスターのリソース使用率がいっぱいになることがあります。

**サーキットブレーカーの例外 **

原因がサーキットブレーカーの例外である場合は、**ロールオーバー ** API が呼び出された時に、クラスターで JVM のメモリ負荷が高くなっている可能性があります。JVM のメモリ負荷が高い問題をトラブルシューティングするには、Amazon OpenSearch Service クラスターの JVM メモリ負荷が高い場合のトラブルシューティング方法はは?を参照してください。
JVM のメモリ負荷が 75% を下回ったら、次の API 呼び出しを使用して、失敗したインデックスのアクティビティを再試行できます。

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

**注:**インデックスパターン (\ *) を使用して、失敗した複数のインデックスでアクティビティを再試行します。

クラスターで JVM のスパイクが断続的に発生する場合は、ロールオーバーアクションの次の再試行ブロックを使用して ISM ポリシーを更新することもできます。

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

ISM ポリシーでは、各アクションはカウントパラメータに基づいて自動的に再試行されます。前の操作が失敗した場合は、遅延パラメータをチェックして、ISM がアクションを再試行できるまでの待機時間を確認してください。詳細については、OpenSearch の Web サイトのアクションを参照してください。

**ストレージ容量の不足 **

クラスターのストレージ容量が不足している場合、OpenSearch Service はクラスター上で書き込みブロックを開始します。書き込みブロックにより、すべての書き込み操作でクラスター上のClusterBlockExceptionが返されます。ClusterIndexWritesBlocked メトリックスには「1」という値が表示されています。これは、クラスターがリクエストをブロックしていることを示しています。そのため、新しいインデックスを作成しようとしても失敗します。explainAPI の呼び出しでは、クラスターのストレージ容量が不足していることを示す403 IndexCreateBlockExceptionも返されます。クラスターブロック例外のトラブルシューティングについては、OpenSearch Service の 403「index\ _create\ _block\ _exception」 エラーを解決するにはどうすればいいですか?をご覧ください。

**ClusterIndexWritesBlocked ** メトリックが「0」に戻ったら、失敗したインデックスで ISM アクションを再試行してください。JVM のメモリ負荷が 30 分以上にわたって 92% を超えると、書き込みブロックが開始される可能性があります。書き込みがブロックされた場合は、代わりに JVM のメモリ不足をトラブルシューティングしてください。JVM のメモリ負荷を軽減する方法については、OpenSearch Service クラスターの JVM メモリ負荷が高い場合のトラブルシューティング方法を参照してください。

AWS公式
AWS公式更新しました 1年前