ISM ポリシーのロールオーバーインデックスアクションが Amazon OpenSearch Service で失敗し続けるのはなぜですか?
最終更新日: 2022 年 5 月 31 日
インデックス状態管理 (ISM) を使用して、Amazon OpenSearch Service クラスターでインデックスをロールオーバーしたいと考えています。しかし、インデックスがロールオーバーに失敗し、エラーが表示されます。このような問題が発生しているのはなぜですか? これを解決するにはどうすればよいですか?
簡単な説明
「ロールオーバーインデックスに失敗しました」というエラーが表示された場合は、次のいずれかの理由でロールオーバーアクションが失敗した可能性があります。
- ロールオーバーターゲットが存在しない。
- ロールオーバーエイリアスがない。
- インデックス名がインデックスパターンと一致しない。
- ロールオーバーエイリアスが、インデックステンプレート内の重複したエイリアスを指している。
- クラスターでリソース使用率が最大になっている。
この問題を解決するには、explain API を使用してエラーの原因を特定します。その後、ISM ポリシーを確認します。ISM ポリシーでのロールオーバーアクションの設定の詳細については、「 Amazon OpenSearch Service の低ストレージ容量を管理するために、 Index State Management (ISM) を使用する方法」を参照してください。
解決方法
説明 API を使用する
「Failed to rollover index (ロールオーバーインデックスに失敗しました)」エラーの根本原因を特定するには、説明 API を使用します。
GET _opendistro/_ism/explain/logs-000001?pretty
説明 API の出力例を次に示します。
{
"logs-000001" : {
"index.opendistro.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) が存在しなかったため、インデックスがロールオーバーに失敗したことを示しています。
ロールオーバーターゲットが存在しない
説明 API が「ロールオーバーターゲット [rolling-indices] が存在しません」という原因を返す場合は、インデックスがロールオーバーエイリアスを使用してブートストラップされたかどうかを確認します。
GET _cat/aliases
出力には、クラスター内のすべての現在のエイリアスとそれに関連付けられたインデックスが一覧表示されます。ISM がロールオーバーターゲットが存在しないことを示している場合、ロールオーバーエイリアス名と失敗したインデックスの関連付けは失われます。
失敗したインデックスの関連付けを解決するには、ロールオーバーエイリアスをインデックスにアタッチします。
POST /_aliases
{
"actions" : [
{ "add" : { "index" : "logs-000001", "alias" : "my-data" } }
]
}
ロールオーバーエイリアスをアタッチしたら、OpenSearch Service のマネージドインデックスに対してロールオーバーアクションを再試行します。
POST _opendistro/_ism/retry/logs-000001
詳細については、Open Distro for Elasticsearch のウェブサイトの Retry failed index を参照してください。
失敗したインデックスを再試行すると、「Attempting to retry」(再試行中) ステータスメッセージが表示されることがあります。OpenSearch Service が再試行を試みている場合は、次の ISM サイクルが実行されるまで待ちます。ISM サイクルは 30~48 分ごとに実行されます。ロールオーバーアクションが成功すると、「インデックスは正常にロールオーバーされました」というメッセージが表示されます。
ロールオーバーエイリアスがない
説明 API 出力で、ロールオーバー失敗の原因がロールオーバーエイリアスがないことであると特定された場合は、失敗したインデックスの設定を確認します。
GET <failed-index-name>/_settings
index.opendistro.index_state_management.rollover_alias 設定が見つからない場合は、手動でインデックスに設定を追加します。
PUT /<failed-index-name>/_settings
{
"index.opendistro.index_state_management.rollover_alias":"<rollover-alias>"
}
失敗したインデックスの再試行 API を使用して、失敗したインデックスのロールオーバーオペレーションを再試行します。ロールオーバーアクションの再試行中に、ポリシーテンプレートを更新します。
PUT _template/<template-name>
ロールオーバーエイリアスが新しく作成されたインデックスに適用されるように、既存のポリシーテンプレートから同じ設定を使用してください。以下はその例です。
PUT _template/<existing-template>
{
"index_patterns": ["<index-pattern*>"],
"settings": {
"index.opendistro.index_state_management.policy_id": "<policy_id>",
"index.opendistro.index_state_management.rollover_alias":"<rollover-alias>"
}
}
インデックス名がインデックスパターンと一致しない
ISM ポリシーで、インデックス名とインデックスパターンが一致しないためにロールオーバーオペレーションが失敗したことが示されている場合は、失敗したインデックスの名前をチェックします。ロールオーバーを成功させるには、インデックス名が次の正規表現パターンと一致する必要があります。
`^.*-\d+$`
この正規表現パターンは、インデックス名には、テキストの後にハイフン (-) と 1 つ以上の数字を含める必要があることを示しています。インデックス名がこのパターンに従っていない場合、最初のインデックスにデータが書き込まれている場合は、データを再インデックスすることを検討してください。データを再インデックスするときは、新しいインデックスに正しい名前を使用します。以下はその例です。
POST _reindex
{
"source": {
"index": "<failed-index>"
},
"dest": {
"index": "my-new-index-000001"
}
}
データの再インデックス API の実行中に、失敗したインデックスからロールオーバーエイリアスをデタッチします。次に、新しいインデックスにロールオーバーエイリアスを追加して、データソースが新しいインデックスへの着信データの書き込みを続行できるようにします。
以下はその例です。
POST /_aliases
{
"actions" : [
{ "remove" : { "index" : "<failed-index>", "alias" : "<rollover-alias>" } },
{ "add" : { "index" : "my-new-index-000001", "alias" : "<rollover-alias>" } }
]
}
次の API 呼び出しを使用して、新しいインデックスに ISM ポリシーを手動でアタッチします。
POST _opendistro/_ism/add/my-new-index-* { "policy_id": "<policy_id>" }
既存のテンプレートを更新して、新しいインデックスパターン名を反映させます。
PUT _template/<existing temaplate>
注: ISM ポリシーとロールオーバーエイリアスは、同じインデックスパターンで作成された連続するインデックスを反映する必要があります。
ロールオーバーエイリアスが、インデックステンプレート内の重複したエイリアスを指している
説明 API で、ロールオーバーエイリアスが重複したエイリアスを指しているためにインデックスのロールオーバーが失敗したことが示された場合は、インデックステンプレートの設定をチェックします。
GET _template/<template-name>
テンプレートに追加のエイリアスセクション (同じインデックスを指す別のエイリアス) が含まれているかどうかを確認します。
"index_patterns": ["my-index*"],
"settings": {
"index.opendistro.index_state_management.policy_id": "rollover-policy",
"index.opendistro.index_state_management.rollover_alias": "rollover-alias"
},
"aliases": {
"another_alias": {
"is_write_index": true
}
}
複数のエイリアスが原因でロールオーバーが失敗しているため、追加のエイリアスが存在することで、ロールオーバー操作が失敗した理由を確認できます。この失敗を解決するには、エイリアスを指定せずにテンプレート設定を更新します。
PUT _template/<template-name>
次に、失敗したインデックスで再試行 API を実行します。
POST _opendistro/_ism/retry/my-index-000001
重要: エイリアスが複数のインデックスを指している場合は、1 つのインデックスだけ書き込みアクセスが有効であることを確認してください。ロールオーバー API は、ロールオーバーエイリアスがポイントするインデックスの書き込みアクセスを自動的に有効にします。これは、ISM でロールオーバーオペレーションを実行するときに、「is_write_index」設定のエイリアスを指定する必要がないことを意味します。
クラスターでリソース使用率が最大になっている
クラスターリソース使用率が最大になっている原因は、サーキットブレーカーの例外またはストレージ領域の不足である可能性があります。
サーキットブレーカーの例外
説明 API がサーキットブレーカーの例外を返す場合、ロールオーバー API が呼び出されたときに、クラスターで高い JVM メモリ負荷が発生している可能性があります。JVM メモリ負荷に関する問題をトラブルシューティングするには、「Amazon OpenSearch Service クラスターでの高い JVM メモリ負荷をトラブルシューティングする方法」を参照してください。
JVM のメモリ負荷が 75% を下回ったら、次の API コールを使用して、失敗したインデックスに対してアクティビティを再試行できます。
POST _opendistro/_ism/retry/<failed-index-name>
注: インデックスパターン (*) を使用して、失敗した複数のインデックスに対してアクティビティを再試行できます。
クラスターにおける JVM スパイクが低頻度である場合は、ロールオーバーアクションのために次の再試行ブロックを使用して ISM ポリシーを更新することもできます。
"actions": {
"retry": {
"count": 3,
"backoff": "exponential",
"delay": "10m"
}
}
ISM ポリシーでは、各アクションは count パラメータに基づく自動再試行を備えています。前のオペレーションが失敗した場合は、「delay」パラメータをチェックして、ISM がアクションを再試行するために待機する必要がある時間を確認します。
ストレージスペースの不足
クラスターのストレージ領域が不足している場合、OpenSearch Service はクラスターで書き込みブロックをトリガーし、すべての書き込みオペレーションは ClusterBlockException を返します。ClusterIndexWritesBlocked メトリクスの値には、クラスターがリクエストをブロックしていることを示す「1」という値が表示されます。したがって、新しいインデックスを作成しようとすると失敗します。また、説明 API コールは 403 IndexCreateBlockException を返します。これは、クラスターがストレージ領域不足であることを示します。クラスターブロックの例外をトラブルシューティングするには、「Amazon OpenSearch Service の 403「index_create_block_exception」エラーを解決する方法」を参照してください。
ClusterIndexWritesBlocked メトリクスが「0」に戻ったら、失敗したインデックスに対して ISM アクションを再試行します。JVM のメモリ負荷が 92% を超えた状態が 30 分を超えて続く場合、書き込みブロックがトリガーされる可能性があります。書き込みブロックが発生した場合は、代わりに JVM メモリ負荷をトラブルシューティングする必要があります。JVM メモリ負荷のトラブルシューティング方法の詳細については、「Amazon OpenSearch Service クラスターで JVM メモリ負荷が高くなった場合のトラブルシューティング方法」を参照してください。
Amazon OpenSearch Service は、Amazon Elasticsearch Service の後継サービスです。