Amazon Elasticsearch Service
開発者ガイド (API バージョン 2015-01-01)

Amazon Elasticsearch Service トラブルシューティング

このセクションでは、一般的な Amazon Elasticsearch Service 問題の特定と解決方法について説明します。AWS サポートに問い合わせる前に、このセクションの情報を参照してください。

Kibana にアクセスできない

Kibana エンドポイントは、署名付きリクエストをサポートしていません。ドメインのアクセスコントロールポリシーで、特定の IAM ユーザーまたはロールにのみアクセスが許可されており、Kibana の Amazon Cognito 認証 を設定していない場合、Kibana にアクセスしようとしたときに、次のエラーが発生する場合があります。

"User: anonymous is not authorized to perform: es:ESHttpGet"

Amazon ES ドメインで VPC アクセスを使用している場合、このエラーは発生しない可能性があります。代わりに、リクエストがタイムアウトする可能性があります。この問題の修正、および利用できるさまざまな設定オプションの詳細については、「Kibana へのアクセスのコントロール」、「VPC ドメインのアクセスポリシーについて」、および「Amazon Elasticsearch Service アクセスコントロール」を参照してください。

VPC ドメインにアクセスできない

VPC ドメインのアクセスポリシーについて」および「VPC ドメインのテスト」を参照してください。

赤のクラスター状態

赤いクラスター状態は、少なくとも 1 つのプライマリシャードとそのレプリカがノードに割り当てられていないことを意味します。Amazon ES は、赤いクラスター状態が続く限り、正常なインデックスの場合でも自動スナップショットの取得を停止します。

赤のクラスター状態の最も一般的な原因は、クラスターノードの障害と、継続的な高負荷による Elasticsearch プロセスのクラッシュです。

注記

Amazon ES では、毎日の自動スナップショットが最大 14 個、30 日間保存されるため、赤のクラスター状態が 16 日超存続した場合、データが永続的に損失する可能性があります。Amazon ES ドメインで赤のクラスター状態になると、自分で問題に対処するか、サポートチームに支援を依頼するかを選ぶよう、AWS サポート から求められる場合があります。CloudWatch アラームを設定して、赤のクラスター状態が発生したときに通知を受けることもできます。

最終的に、赤のシャードにより赤のクラスターが発生し、赤のインデックスにより赤のシャードが発生します。赤のクラスター状態の原因となっているインデックスを識別するため、Elasticsearch にはいくつかの有用な API が用意されています。

  • GET /_cluster/allocation/explain は、見つかった最初の割り当てられていないシャードを選択し、そのシャードをノードに割り当てることができない理由について説明します。

    { "index": "test4", "shard": 0, "primary": true, "current_state": "unassigned", "can_allocate": "no", "allocate_explanation": "cannot allocate because allocation is not permitted to any of the nodes" }
  • GET /_cat/indices?v はヘルスステータス、ドキュメントの数、および各インデックスのディスク使用量を表示します。

    health status index uuid pri rep docs.count docs.deleted store.size pri.store.size green open test1 30h1EiMvS5uAFr2t5CEVoQ 5 0 820 0 14mb 14mb green open test2 sdIxs_WDT56afFGu5KPbFQ 1 0 0 0 233b 233b green open test3 GGRZp_TBRZuSaZpAGk2pmw 1 1 2 0 14.7kb 7.3kb red open test4 BJxfAErbTtu5HBjIXJV_7A 1 0 green open test5 _8C6MIXOSxCqVYicH3jsEA 1 0 7 0 24.3kb 24.3kb

赤のインデックスを削除することが、赤のクラスター状態を修正するための最速の方法です。赤のクラスター状態の理由によっては、Amazon ES ドメインをスケールし、より大きなインスタンスタイプ、より多くのインスタンス、またはより EBS ベースのストレージを使用して、問題のあるインデックスの再作成を試みることができます。

問題のあるインデックスを削除することが可能でない場合、スナップショットを復元する、インデックスからドキュメントを削除する、インデックスの設定を変更する、レプリカの数を減らす、または他のインデックスを削除してディスク領域を解放することができます。重要なステップは、Amazon ES ドメインを再設定する前に、赤のクラスター状態を解決することです。赤のクラスター状態のドメインを再設定すると、問題が複雑化し、状態を解決するまで、設定状態が [Processing (処理中)] のままドメインがスタックする可能性があります。

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

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

関連するメトリクス 説明 復旧
JVMMemoryPressure

クラスター内のすべてのデータノードで使用する Java ヒープのパーセンテージを指定します。このメトリクスの [Maximum (最大)] の統計を表示し、Java ガベージコレクターが十分なメモリの回収に失敗したことで生じる少量ずつのメモリプレッシャーを検出します。このパターンは通常、複雑なクエリまたは大きいデータフィールドが原因です。

75% のメモリ使用で、Elasticsearch はコンカレントマークスイープ (CMS) ガベージコレクターをトリガーし、他のプロセスと共に一時停止と中断を最小限に抑えます。CMS が必要なメモリの回収に失敗し、使用量が 75% を超えた場合、Elasticsearch は、メモリ不足エラーを防ぐ目的で、十分なメモリを解放するために他のプロセスの停止または速度を低下する別のガベージ収集アルゴリズムをトリガーします。

95% のメモリ使用量で Elasticsearch は、メモリを割り当てるためにプロセスを強制終了します。これによって重要なプロセスが強制終了され、クラスターの 1 つ以上のノードがダウンすることがあります。

_nodes/stats/jvm API は、JVM 統計の有用な要約、メモリプールの使用量、およびガベージコレクションの情報を提供します。

GET elasticsearch_domain/_nodes/stats/jvm?pretty

JVM のメモリ サーキットブレーカーを設定します。詳細については、「JVM OutOfMemoryError」を参照してください。

問題が解決しない場合は、不要なインデックスを削除する、ドメインへのリクエストの数または複雑性を減少する、インスタンスを追加する、あるいはより大きなインスタンスタイプを使用します。

CPUUtilization クラスター内のデータノードで使用する CPU リソースのパーセンテージを指定します。このメトリクスの [Maximum (最大)] の統計を表示し、使用量の多い継続的なパターンを探します。 データノードを追加するか、既存のデータノードのインスタンスタイプのサイズを大きくします。詳細については、「Amazon ES ドメインの設定」を参照してください。
ノード クラスターのノード数の指定。このメトリクスの [Minimum (最小)] の統計を表示します。サービスがクラスターの新しいインスタンス群をデプロイすると、この値が変動します。 データノードを追加します。詳細については、「Amazon ES ドメインの設定」を参照してください。

黄色のクラスター状態

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

ClusterBlockException

以下の理由により、ClusterBlockException エラーを受け取る場合があります。

使用可能なストレージ領域の不足

シャードの移動に必要なストレージ領域を持つノードがなければ、それ以降はドキュメントの追加やインデックスの作成などの基本的な書き込み操作が失敗する可能性があります。ストレージ要件の計算 は、Amazon ES によるディスク容量の使用の概要を提供します。

問題を回避するには、Amazon ES コンソールで FreeStorageSpace メトリクスをモニタリングし、FreeStorageSpace がしきい値を下回るとトリガーされる CloudWatch アラームを作成します。GET /_cat/allocation?v は、シャードの割り当てとディスク使用量の有用な概要も提供します。ストレージ容量の不足に関連する問題を解決するには、Amazon ES ドメインをスケールし、より大きなインスタンスタイプ、より多くのインスタンス、またはより EBS ベースのストレージを使用します。手順については、「Amazon ES ドメインの設定」を参照してください。

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

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

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

JVM OutOfMemoryError

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

サーキットブレーカー 説明 クラスター設定プロパティ
親ブレーカー すべてのサーキットブレーカーで JVM ヒープメモリのパーセンテージの合計に許可されます。デフォルト値は 70% です。 indices.breaker.total.limit
フィールド データ ブレーカー JVM ヒープメモリのパーセンテージは、メモリに単一のデータフィールドをロードすることを許可します。デフォルト値は 60% です。大きいフィールドを使用してデータをアップロードする場合は、この上限を引き上げることをお勧めします。 indices.breaker.fielddata.limit
リクエストブレーカー JVM ヒープメモリのパーセンテージは、サービスリクエストに応答するために使用されるデータ構造に許可されます。デフォルト値は 40% です。サービスリクエストが集計の計算を含む場合は、この上限を引き上げることをお勧めします。 indices.breaker.request.limit

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

Amazon EC2 インスタンスでは、予期しない終了と再起動が発生する場合があります。通常、Amazon ES はノードを再起動します。ただし、Elasticsearch クラスターの 1 つ以上のノードが失敗した状態のままであることがあります。

この状態を確認するには、Amazon ES コンソールでドメインダッシュボードを開きます。[Monitoring (モニタリング)] タブを選択し、[Nodes (ノード)] メトリクスを選択します。報告されるノード数がクラスターに設定した数より小さいかどうかを調べます。メトリクスが、1 つ以上のノードが 1 日以上ダウンしていることを示している場合は、AWS サポートまでお問い合わせください。

CloudWatch アラームを設定して、この問題が発生したときに通知を受けることもできます。

注記

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

クラスターを予期しないノードの終了と再起動から保護するには、Amazon ES ドメインで各インデックスに少なくとも 1 つのレプリカを作成します。

インデックスが閉じない

Amazon ES は _close API をサポートしていません。スナップショットからインデックスを復元する場合は、既存のインデックスを削除することができます (インデックス再生成の前または後)。もう 1 つのオプションは、rename_pattern および rename_replacement フィールドを使用して、復元時にインデックスの名前を変更することです。

POST /_snapshot/my-repository/my-snapshot/_restore { "indices": "my-index-1,myindex-2", "include_global_state": true, "rename_pattern": "my-index-(\\d)", "rename_replacement": "restored-my-index-$1" }

インデックスの再生成や縮小、またはインデックスを分割する予定がある場合、操作を実行する前に書き込みを停止します。

ノードに SSH 接続できない

Elasticsearch クラスターのノードへのアクセスに SSH 接続が使用できず、elasticsearch.yml を直接変更できません。代わりに、コンソール、AWS CLI、または SDK を使用してドメインを設定します。Elasticsearch REST API を使用して、いくつかのクラスターレベル設定を指定することもできます。詳細については、「Amazon Elasticsearch Service 設定 API リファレンス」と「サポートされている Elasticsearch オペレーション」を参照してください。

クラスターのパフォーマンスをより詳細に把握する必要がある場合は、CloudWatch にエラーログとスローログを公開できます。

「オブジェクトのストレージクラスで有効ではない」スナップショットエラー

Amazon ES スナップショットは、Glacier ストレージクラスをサポートしていません。このエラーは、オブジェクトを Glacier ストレージクラスに移行するライフサイクルが S3 バケットに含まれている場合に、スナップショットのリストを取得しようとすると発生する場合があります。

バケットからスナップショットを復元する必要がある場合は、Glacier からオブジェクトを復元し、オブジェクトを新しいバケットにコピーして、スナップショットリポジトリとして新しいバケットを登録します。

無効なホストヘッダー

Amazon ES では、クライアントがリクエストヘッダーで Host を指定する必要があります。有効な Host 値は、次のような、https:// のないドメインエンドポイントです。

Host: search-my-sample-domain-ih2lhn2ew2scurji.us-west-2.es.amazonaws.com

Invalid Host Header エラーを受け取った場合、クライアントが Host ヘッダーに Amazon ES ドメインエンドポイント (IP アドレスなどではなく) を含めているかどうかを確認してください。

Kibana 使用時のブラウザエラー

Kibana を使用して、Amazon ES ドメインのデータを表示する場合、ブラウザは HTTP レスポンスオブジェクトのサービスエラーメッセージをラップします。原因となるサービスエラーを表示し、デバッグを支援するため、Chrome の開発者モードなどのウェブブラウザで一般的に利用されている開発ツールを使用できます。

Chrome でサービスエラーを表示する

  1. メニューから、[View (表示)]、[Developer (開発者)]、[Developer Tools (開発者用ツール)] の順に選択します。

  2. [Network (ネットワーク)] タブを選択します。

  3. [Status (ステータス)] 列で、ステータスが 500 の任意の HTTP セッションを選択します。

Firefox でサービスエラーを表示する

  1. メニューで、[Tools (ツール)]、[Web Developer (ウェブ開発者)]、[Network (ネットワーク)] の順に選択します。

  2. ステータスが 500 の任意の HTTP セッションを選択します。

  3. [Response (レスポンス)] タブを選択して、サービス応答を表示します。

VPC アクセス選択後の許可されていない操作

Amazon ES コンソールを使用して新しいドメインを作成する場合、VPC またはパブリックアクセスを選択するオプションがあります。[VPC access (VPC アクセス)] を選択した場合、Amazon ES は VPC 情報をクエリし、適切なアクセス許可がない場合は失敗します。

You are not authorized to perform this operation. (Service: AmazonEC2; Status Code: 403; Error Code: UnauthorizedOperation

このクエリを有効にするには、ec2:DescribeVpcsec2:DescribeSubnets、および ec2:DescribeSecurityGroups オペレーションへのアクセス権を持っている必要があります。この要件は、コンソールのみを対象としています。AWS CLI を使用して VPC エンドポイントでドメインを作成して設定する場合、この操作へのアクセス権は必要ありません。

VPC ドメイン作成後、読み込みでスタックする

VPC アクセスを使用した新規のドメインを作成後、ドメインの [Configuration state (設定の状態)] が [Loading (読み込み中)] から先に進行しない場合があります。この問題が発生する場合、お使いのリージョンに対して AWS Security Token Service (AWS STS) が無効になっている可能性があります。

VPC に VPC エンドポイントを追加するには、Amazon ES が AWSServiceRoleForAmazonElasticsearchService ロールを引き受ける必要があります。したがって、指定するリージョンに VPC アクセスを使用する新規のドメインを作成するために AWS STS が有効化されている必要があります。AWS STS の有効化と無効化の詳細については、「IAM ユーザーガイド」を参照してください。

SDK を使用する場合の証明書のエラー

AWS SDK ではご使用のコンピュータ上の CA 証明書が使用されるため、AWS サーバー上の証明書が変更されると、SDK を使用しようとした際に接続エラーが発生することがあります。エラーメッセージはさまざまですが、通常は次のテキストが含まれています。

Failed to query Elasticsearch ... SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

このようなエラーは、コンピュータ上の CA 証明書とオペレーティングシステムを最新の状態にしておくことで回避できます。ユーザーが自分のコンピュータを管理していない企業環境でこの問題が発生した場合は、必要に応じて管理者から支援を得て更新プロセスを行う必要があります。

以下のリストは、オペレーティングシステムと Java の最小バージョンを示しています。

  • 2005 年 1 月以降の更新プログラムがインストールされた Microsoft Windows バージョンでは、必要な CA が信頼リストに 1 つ以上含まれています。

  • Mac OS X 10.4 with Java for Mac OS X 10.4 Release 5 (2007 年 2 月)、Mac OS X 10.5 (2007 年 10 月)、および以降のバージョンでは、必要な CA が信頼リストに 1 つ以上含まれています。

  • Red Hat Enterprise Linux 5 (2007 年 3 月)、6、7、および CentOS 5、6、および 7 では、必要な CA がデフォルトの CA 信頼リストに 1 つ以上含まれています。

  • Java 1.4.2_12 (2006 年 5 月)、5 Update 2 (2005 年 3 月)、および以降のすべてのバージョン (Java 6 (2006 年 12 月)、7、8 を含む) では、必要な CA がデフォルトの CA 信頼リストに 1 つ以上含まれています。

以下に示す 3 つの証明機関があります。

  • Amazon Root CA 1

  • Starfield Services Root Certificate Authority - G2

  • Starfield Class 2 Certification Authority

最初の 2 つの機関からのルート証明書は Amazon Trust Services から入手できますが、もっと簡単なソリューションは、コンピュータを最新の状態にしておくことです。ACM から提供される証明書の詳細については、AWS Certificate Manager に関するよくある質問を参照してください。

注記

現時点では、us-east-1 リージョン内の Amazon ES ドメインには別の機関からの証明書が使用されます。近い将来、これらの新しい証明機関が使用されるように、リージョンを更新する予定です。