メニュー
Amazon Elasticsearch Service
開発者ガイド (API Version 2015-01-01)

AWS サービスエラー処理

このセクションでは、一般的な AWS サービスエラーへの対応方法について説明します。AWS サポートに問い合わせる前に、このセクションの情報を参照してください。

障害が発生したクラスターノード

EC2 インスタンスでは、予期しない終了と再起動が発生する場合があります。 通常、Amazon ES はノードを再起動します。 ただし、Elasticsearch クラスターの 1 つ以上のノードが失敗した状態のままであることがあります。この状態を確認するには、Amazon ES コンソールでドメインダッシュボードを開きます。[Monitoring] タブを選択し、[Nodes] メトリクスを選択します。報告されるノード数がクラスターに設定した数より小さいかどうかを調べます。メトリクスが、1 つ以上のノードが 1 日以上ダウンしていることを示している場合は、AWS サポートまでお問い合わせください。

注記

ノードメトリクスは、クラスター設定の変更中およびサービスの定期的なメンテナンス中は、正確ではありません。 これは想定される動作です。メトリクスは、すぐに正しい数のクラスターノードを報告します。課金対象となるのは、クラスター用にリクエストしたノード数のみです。詳細については、「設定変更について」を参照してください。

クラスターを予期しないノードの終了と再起動から保護するには、Amazon ES ドメインで各インデックスに少なくとも 1 つのレプリカを作成します。詳細については、Elasticsearch のドキュメントの「シャードとレプリカ」を参照してください。

赤のクラスター状態

Amazon CloudWatch を使用した、クラスターメトリクスと統計情報の監視」で説明されているように、赤のクラスター状態は、プライマリとレプリカのシャードが、クラスターのノードに割り当てられていないことを意味します。赤のクラスター状態が保持されている間は、正常なインデックスのものであっても、Amazon ES によって自動スナップショットは作成されません。

この状態は、一般的に次のような原因で発生します。

  • Elasticsearch クラスターのデータノードで空きストレージ容量が不足しています

  • データノードの処理の継続的な高負荷のために Elasticsearch プロセスがクラッシュしました

赤のクラスター状態の原因が、空きストレージ容量の不足や、処理の負荷が継続的に高いことである場合は、対応が必要です。

注記

Amazon ES ドメインに赤のクラスターエラーが発生すると、自分で問題に対処できるか、ドメインの最新の自動スナップショットの復元をサポートチームに依頼するかを選ぶよう、AWS サポート から求められる場合があります。7 日以内に返答しなかった場合は、AWS サポート によって最新の自動スナップショットが復元されます。

空きストレージ容量の不足からの復旧

Elasticsearch クラスターのデータノードで空きストレージ容量が不足しないようにするには、FreeStorageSpace クラスターメトリクスをモニタリングします。使用領域が Elasticsearch の "ウォーターマーク" を超えると、Amazon ES から ClusterBlockException がスローされることがあります。詳細については、「ウォーターマーク未満の FreeStorageSpace」を参照してください。この例外が発生した場合、影響を受けるクラスターは設定の変更を処理できず、サービスに対するソフトウェアアップグレードのメリットを得ることができません。

赤のインデックスによって発生した赤のクラスター状態を解決する

  1. クラスター内のノードに割り当てられていないインデックスを確認するには、Elasticsearch API の /_cat/indices を使用します。

    Copy
    curl -XGET 'http://<Elasticsearch_domain_endpoint>/_cat/indices'

    _cat/allocation?v という API を使用して、シャードの割り当てとディスク使用率を調べることもできます。

    Copy
    curl -XGET 'http://<Elasticsearch_domain_endpoint>/_cat/allocation?v'

    詳細については、Elasticsearch ドキュメントで「cat allocation」および「cat indices」を参照してください。

  2. EBS ベースのストレージを追加し、より大きなインスタンスタイプを使用するか、影響を受けるインデックスからデータを削除します。 詳細については、「EBS ストレージ設定」および「Amazon ES ドメイン設定」を参照してください。

クラスターが赤の状態になった場合に通知を受信できるように、Amazon CloudWatch アラームを作成できます。詳細については、『Amazon CloudWatch 開発者ガイド』の「Amazon CloudWatch アラームの作成」を参照してください。

処理の継続的な高負荷からの復旧

赤のクラスター状態がデータノードの処理の継続的な高負荷によるものであるかどうかを判断するには、次のクラスターメトリクスをモニタリングします。

関連するメトリクス 説明 復旧
JVMMemoryPressure クラスター内のすべてのデータノードで使用する Java ヒープのパーセンテージを指定します。このメトリクスの [Maximum] の統計を表示し、重いメモリプレッシャーのパターンを示す変動を探します。このパターンは通常、複雑なクエリまたは大きいデータフィールドが原因です。 JVM のメモリ サーキットブレーカーを設定します。 詳細については、「JVM OutOfMemoryError」を参照してください。
CPUUtilization クラスター内のデータノードで使用する CPU リソースのパーセンテージを指定します。このメトリクスの [Maximum] の統計を表示し、使用量の多い継続的なパターンを探します。 データノードを追加するか、既存のデータノードのインスタンスタイプのサイズを大きくします。詳細については、「Amazon ES ドメイン設定」を参照してください。
ノード クラスターのノード数の指定。このメトリクスの [Minimum] の統計を表示します。 サービスがクラスターの新しいインスタンス群をデプロイすると、この値が変動します。 データノードを追加します。詳細については、「Amazon ES ドメイン設定」を参照してください。

黄色のクラスター状態

黄色のクラスター状態は、すべてのインデックスのプライマリシャードがクラスター内のノードに割り当てられ、少なくとも 1 つのインデックスのレプリカシャードは割り当てられていないことを意味します。単一ノードクラスターでは、Amazon ES がレプリカを割り当てることができる他のノードがないため、常に黄色のクラスター状態で初期化されることに注意してください。緑のクラスター状態を確保するには、ノード数を増やします。詳細については、このガイドの「Amazon ES ドメインの設定」および Elasticsearch ドキュメントの「インデックス設定を更新する」を参照してください。

ClusterBlockException

以下の問題の ClusterBlockException エラーを受け取る場合があります。

FreeStorageSpace を使用しない Logstash

Logstash では、書き込み可能なストレージ容量の不足など、多くの理由で ClusterBlockException がスローされる場合があります。クラスターへバルクデータをロードするときに Logstash から ClusterBlockException エラーを受け取った場合は、クラスターでストレージ容量が不足していないかどうかを確認します。詳細については、「ウォーターマーク未満の FreeStorageSpace」、「Amazon ES ドメインの設定」、および「EBS ストレージの設定」を参照してください。

メモリ不足によるディスクのブロック

[JVMMemoryPressure] メトリクスが 30 分の間 92% を超えると、クラスターが赤の状態に到達しないように、Amazon ES は保護メカニズムをトリガーし、すべての書き込み操作をブロックします。保護が有効な状態では、書き込みオペレーションは ClusterBlockException エラーで失敗し、新しいインデックスは作成できず IndexCreateBlockException エラーがスローされます。

JVMMemoryPressure メトリクスが 88% 以下に戻った状態が 5 分間続くと、保護が無効になり、クラスターへの書き込み操作はブロックされません。

ウォーターマーク未満の FreeStorageSpace

Elasticsearch のデフォルトの "低ウォーターマーク" は 85% です。これは、ディスク使用率が 85% を超えると、そのノードには Elasticsearch によるシャードの割り当てが行われなくなることを示します。Elasticsearch のデフォルトの "高いウォーターマーク" は 90% であり、この値に達すると、シャード割り当ての対象が他のノードになります。シャードの移動に必要なストレージ領域を持つノードがなければ、それ以降はドキュメントの追加やインデックスの作成などの基本的な書き込み操作が失敗する可能性があります。詳細については、Elasticsearch ドキュメントでディスクベースのシャード割り当てに関する記述を参照してください。

このような問題を回避するには、Amazon ES コンソールで FreeStorageSpace メトリクスを監視し、FreeStorageSpace がしきい値を下回るとトリガーされる Amazon CloudWatch アラートを作成します。FreeStorageSpace の問題への対応については、「空きストレージ容量の不足からの復旧」を参照してください。

JVM OutOfMemoryError

JVM の OutOfMemoryError は、一般的に次のいずれかの JVM サーキットブレーカーに到達したことを意味します。

サーキットブレーカー 説明 クラスター設定プロパティ
親ブレーカー すべてのサーキットブレーカーで JVM ヒープメモリのパーセンテージの合計に許可されます。 デフォルト値は 70% です。 indices.breaker.total.limit

詳細については、Elasticsearch のドキュメントの「Cluster Update Settings」を参照してください。

フィールド データ ブレーカー JVM ヒープメモリのパーセンテージは、メモリに単一のデータフィールドをロードすることを許可します。 デフォルト値は 60% です。 大きいフィールドを使用してデータをアップロードする場合は、この上限を引き上げることをお勧めします。 indices.breaker.fielddata.limit

詳細については、Elasticsearch のドキュメントの「フィールドデータ」を参照してください。

リクエストブレーカー JVM ヒープメモリのパーセンテージは、サービスリクエストに応答するために使用されるデータ構造に許可されます。 デフォルト値は 40% です。 サービスリクエストが集計の計算を含む場合は、この上限を引き上げることをお勧めします。 indices.breaker.request.limit

詳細については、Elasticsearch のドキュメントの「フィールドデータ」を参照してください。