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

「翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。」

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

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

Kibana にアクセスできない

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

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

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

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

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

読み取り専用状態のクラスター

以前のバージョンと比較して、 Elasticsearch 7.x ではクラスターの調整に異なるシステムが使用されます。この新しいシステムでは、クラスターがクォーラムを失うと、アクションを実行するまでクラスターは使用できなくなります。クォーラム損失には 2 つの形式があります。

  • クラスターが専用マスターノードを使用している場合は、半分以上が利用できないときにクォーラム損失が発生します。

  • クラスターで専用マスターノードを使用していない場合は、データノードの半分以上が利用できないときにクォーラム損失が発生します。

クォーラム損失が発生し、クラスターに複数のノードがある場合、Amazon ES はクォーラムを復元し、クラスターを読み取り専用状態にします。これには2つのオプションがあります。

  • 読み取り専用状態を削除し、クラスターをそのまま使用します。

  • スナップショットからクラスターまたは個々のインデックスを復元します。

クラスターをそのまま使用する場合は、次のリクエストを使用してクラスターの状態が緑色であることを確認します。

GET _cat/health?v

クラスターの状態が赤の場合、スナップショットからクラスターを復元することをお勧めします。トラブルシューティングのステップについては、赤のクラスター状態 もあわせてお読みください。クラスターの状態が緑色の場合は、次のリクエストを使用して、予想されるすべてのインデックスが存在することを確認します。

GET _cat/indices?v

次に、いくつかの検索を実行して、予想されるデータが存在することを確認します。存在する場合は、次のリクエストを使用して読み取り専用状態を削除できます。

PUT _cluster/settings { "persistent": { "cluster.blocks.read_only": false } }

クォーラム損失が発生し、クラスターにノードが 1 つしかない場合、 はノードAmazon ESを置き換え、クラスターを読み取り専用状態にしません。それ以外の場合、オプションは同じです。つまり、クラスターをそのまま使用するか、スナップショットから復元します。

どちらの場合も、 Amazon ES は、Personal Health Dashboard. に 2 つのイベントを送信します。最初のステップでは、クォーラムの損失が通知されます。2 番目のステップは、 Amazon ES でクォーラムが正常に復元された場合に発生します。Personal Health Dashboard の使用方法の詳細については、「AWS Health ユーザーガイド.」を参照してください。

赤のクラスター状態

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

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

注記

Amazon ES は自動スナップショットを 14 日間 保存するため、赤のクラスター状態が 2 週間以上続くと、クラスターのデータが完全に失われることになります。Amazon ES ドメインで赤のクラスター状態になると、自分で問題に対処するか、サポートチームに支援を依頼するかを選ぶよう、AWS サポート から求められる場合があります。アラームを設定してCloudWatch、赤のクラスター状態が発生したときに通知を受け取ることができます。

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

  • 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% がいっぱいになると、Concurrent Mark Sweep (CMS) ガベージコレクターがトリガーされます。このコレクターは、他のスレッドとともに実行され、一時停止を最小限に抑えます。通常のコレクション中に CMS が十分なメモリを再利用できない場合、Elasticsearch は、すべてのスレッドを停止する別のガベージコレクションアルゴリズムをトリガーします。すべてが停止されるコレクションではノードは応答しなくなり、クラスターの安定性に影響を与える可能性があります。

メモリ使用が継続的に増加する場合、Elasticsearch はメモリ不足エラーにより最終的にクラッシュします。使用率を 80% 以下にすることをお勧めします。

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

GET elasticsearch_domain/_nodes/stats/jvm?pretty

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

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

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

黄色のクラスター状態

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

マルチノードクラスターでは、新しいインデックスを作成した後、またはノードに障害が発生した後に、一時的に黄色のクラスター状態になる場合があります。このステータスは、 がクラスター間でデータをElasticsearchレプリケートするときに自己解決されます。ディスク容量が不足していると、黄色のクラスター状態が生じることもあります。クラスターは、ノードに対応するディスク容量がある場合にのみレプリカシャードを分散できます。

ClusterBlockException

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

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

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

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

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

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

JVMMemoryPressure メトリクスが 88% 以下に戻ると、保護が無効になり、クラスターへの書き込みオペレーションはブロック解除されます。

JVM OutOfMemoryError

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

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

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

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

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

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

注記

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

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

最大シャード制限

7.x バージョンの Elasticsearch のデフォルト設定は、ノードあたり 1,000 シャード以下です。新しいインデックスの作成などのリクエストによってこの制限を超えた場合、 はエラーをElasticsearchスローします。このエラーが発生した場合は、いくつかのオプションがあります。

  • さらにデータノードをクラスターに追加します。

  • _cluster/settings/cluster.max_shards_per_node 設定を増加します。

  • _shrink API を使用して、ノードのシャード数を減らします。

監査ログを有効にできない

Amazon ES コンソールを使用して監査ログの発行を有効にしようとすると、次のエラーが発生する場合があります。

The Resource Access Policy specified for the CloudWatch Logs log group does not grant sufficient permissions for Amazon Elasticsearch Service to create a log stream. Please check the Resource Access Policy.

このエラーが発生した場合は、ポリシーの resource 要素に正しいロググループ ARN が含まれていることを確認します。その場合は、次の手順を実行します。

  1. 数分待ちます。

  2. ウェブブラウザでページを更新します。

  3. [Use existing log group (既存のロググループの使用)] を選択します。

  4. [既存のロググループ] で、エラーメッセージを受信する前に作成したロググループを選択します。

  5. [Select an existing policy (既存のポリシーの選択)] を選択します。

  6. [既存のポリシー] で、エラーメッセージを受信する前に作成したポリシーを選択します。

  7. Enable.] を選択します。

ステップ –17 を数回繰り返してもエラーが解決しない場合は、 AWS サポートにお問い合わせください。

インデックスが閉じない

Amazon ES は、 _close バージョン 7.4 以降でのみ Elasticsearch 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" }

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

クライアントライセンスチェック

Logstash と Beats のデフォルトディストリビューションには、独自のライセンスチェックが含まれており、オープンソースバージョンの に接続できませんElasticsearch。これらのクライアントの Apache 2.0 (OSS) ディストリビューションは、 で必ず使用してくださいAmazon ES。

リクエストのスロットリング

永続的な 403 Request throttled due to too many requests または 429 Too Many Requests エラーを受け取った場合は、垂直スケーリングを検討してください。 は、ペイロードによりメモリ使用量が Java ヒープの最大サイズを超える場合、リクエストをAmazon Elasticsearch Serviceスロットリングします。

ノードに SSH 接続できない

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

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

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

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

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

無効なホストヘッダー

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

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

リクエストを行うときにInvalid Host Headerエラーが表示された場合は、クライアントまたはプロキシの Amazon ES ヘッダーにHostドメインエンドポイント (IP アドレスなどではなく) が含まれていることを確認します。

無効な M3 インスタンスタイプ

Amazon ES では、Elasticsearch バージョン 6.7 以降を実行している既存のドメインへの M3 インスタンスの追加または変更がサポートされていません。Elasticsearch 6.5 以前では、M3 インスタンスを引き続き使用できます。

新しいインスタンスタイプの選択をお勧めします。Elasticsearch 6.7 以降を実行するドメインには、次の制限が適用されます。

  • 既存のドメインで M3 インスタンスを使用していない場合、今後これらに変更することはできません。

  • 既存のドメインを M3 インスタンスタイプから別のインスタンスタイプに変更した場合、元に戻すことはできません。

アップグレード後はダウングレードできない

インプレースアップグレードは元に戻すことができませんが、AWSサポートに連絡すれば、新しいドメインで自動的なアップグレード前のスナップショットを復元する支援が得られます。たとえば、Elasticsearch 5.6 から 6.4 にアップグレードする場合、AWS サポートは新しい Elasticsearch 5.6 ドメインでアップグレード前のスナップショットの復元を支援できます。元のドメインの手動スナップショットを作成した場合は、このステップを自分で実行.することができます。

すべてのリージョンのドメインの概要が必要

次のスクリプトではAmazon EC2、describe-regions AWS CLI コマンドを使用して、 が使用可能なAmazon ESすべてのリージョンのリストを作成します。次に、リージョンごとに list-domain-names を呼び出します。

for region in `aws ec2 describe-regions --output text | cut -f4` do echo "\nListing domains in region '$region':" aws es list-domain-names --region $region --query 'DomainNames' done

リージョンごとに次の出力が表示されます。

Listing domains in region:'us-west-2'... [ { "DomainName": "sample-domain" } ]

リージョンで Amazon ES が利用できない場合は、「エンドポイント URL に接続できませんでした」というメッセージが返されます。

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 アクセス] を選択した場合、 は VPC 情報をAmazon ESクエリし、適切なアクセス許可がない場合は失敗します。

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 ユーザーガイド.」を参照してください。

Alpine Linux から接続できない

Alpine Linux では、DNS レスポンスのサイズが 512 バイトに制限されています。Alpine Linux から Amazon ES ドメインに接続しようとした場合、ドメインが VPC 内にあり、ノードが 20 を超えていると、DNS 解決が失敗することがあります。ドメインが VPC 内にある場合は、他の Linux ディストリビューション (CentOSDebian、Ubuntu、、Red Hat Enterprise Linux、Amazon Linux 2 など) を使用して接続することをお勧めします。

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

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

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

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

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

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

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

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

  • Java 1.4.2_12 (2006 年 5 月)、5 Update 2 ( 2005 年 3 月)、および Java 6 (2006 年 12 月)、7、8 を含むすべての新しいバージョンにはCAs、デフォルトの信頼された 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 ManagerFAQs、「」を参照してください。

注記

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