Amazon Elasticsearch Service ドメインで Kibana の状態が赤なのはなぜですか?

最終更新日: 2020 年 8 月 11 日

Amazon Elasticsearch Service (Amazon ES) ドメインで Kibana の状態が赤のままです。その理由と、この問題をトラブルシューティングする方法を教えてください。

簡単な説明

Elasticsearch クラスターのすべてのノードですべてのヘルスチェックに合格すると、Kibana の状態は緑になります。ヘルスチェックが不合格だと、Kibana の状態は赤になります。Amazon ES のクラスター状態が赤の場合でも、Kibana の状態は赤になります。Kibana の状態は、以下の理由で赤になることがあります。

  • Amazon Elastic Compute Cloud (Amazon EC2) インスタンスまたは Amazon Elastic Block Store (Amazon EBS) ボリュームの問題が原因のノード障害。ノードのクラッシュの詳細については、「Amazon Elasticsearch Service ノードがクラッシュしたのはなぜですか?」をご参照ください。
  • ノードのメモリが不足しています。
  • Elasticsearch を新しいバージョンにアップグレードする。
  • Kibana のバージョンと Amazon ES のバージョンに互換性がない。
  • 単一ノードクラスターは負荷が高い状態で、専用リーダーノードなしで実行しています。専用リーダーノードに到達できない可能性もあります。Amazon ES がクラスターの安定性を高める方法の詳細については、「専用マスターノード」をご参照ください。

解決方法

Amazon ES ドメインで Kibana の状態が赤くなる問題を解決するには、次の方法を 1 つ以上使用します。

注: Elasticsearch クラスターにサーキットブレーカーの例外が表示される場合は、まずサーキットブレーカーの制限を引き上げます。サーキットブレーカーの例外がない場合は、サーキットブレーカーの制限を引き上げる前に他の方法をお試しください。

クエリを調整する

重い集約などの複雑なクエリを実行している場合は、クエリを調整してパフォーマンスを最大化します。集計クエリに使用するフィールドデータまたはデータ構造によって、ヒープメモリ消費の急上昇が発生する可能性があります。

次の API コールを確認してスパイクの原因を特定し、es-endpoint を、ご使用の Amazon ES ドメインエンドポイントに置き換えます。

$curl es-endpoint/_nodes/stats/breaker?pretty
$curl "es-endpoint/_nodes/stats/indices/fielddata?level=indices&fields=*"

メモリ使用量の管理の詳細については、Elasticsearch ウェブサイトの「Tune for search speed」や「Limiting Memory Usage」をご参照ください。

専用リーダーノードを使用する

ベストプラクティスは、Amazon ES ドメインごとに 3 つの専用リーダーノードを割り当てることです。クラスターの安定性向上の詳細については、Get Started with Amazon Elasticsearch Service: Use Dedicated Master Instances to Improve Cluster Stability をご参照ください。

スケールアップする

Amazon ES ドメインをスケールアップするには、ノード数を増やすか、より多くのメモリを保持する Amazon EC2 インスタンスタイプを選択します。スケーリングの詳細については、「Amazon Elasticsearch Service ドメインをスケールアップするにはどうすればよいですか?」をご参照ください。

シャードディストリビューションを確認する

シャードが取り込んでいるインデックスを確認し、すべてのデータノードに均等に分散されていることを確認します。シャードが不均等に分散されている場合、1 つ以上のデータノードのストレージ容量が不足している可能性があります。

次の式を用いて、シャードが均等に分散されていることを確認します。

Total number of shards = shards per node * number of data nodes

例えば、インデックスに 24 個のシャードがあり、データノードが 8 個ある場合、ノードあたり 3 つのシャードが存在することになります。必要なシャード数の詳細については、Get Started with Amazon Elasticsearch Service: How Many Shards Do I Need? をご参照ください。

バージョンを確認する

重要: Kibana のバージョンと Amazon ES のバージョンは、互換性がある必要があります。

次の API コールを実行して、バージョンに互換性があることを確認し、es-endpoint を、ご使用の Amazon ES ドメインエンドポイントに置き換えます。

$curl es-endpoint/.kibana/config/_search?pretty

注: コマンドが失敗した場合、Kibana とサポートされている Elasticsearch のバージョン間に互換性の問題がある可能性があります。互換性のある Kibana と Elasticsearch のバージョンの詳細については、Elasticsearch ウェブサイトの「Set up Kibana」をご覧ください。

リソースをモニタリングする

特定のしきい値を超えてリソースが使われたときに通知する Amazon CloudWatch アラームをセットアップします。例えば、JVM メモリプレッシャーに対してアラームを設定する場合、プレッシャーが 100% に達する前に措置を講じます。CloudWatch アラームの詳細については、「推奨 CloudWatch アラーム」および Improve the Operational Efficiency of Amazon Elasticsearch Service Domains with Automated Alarms Using Amazon CloudWatch をご参照ください。

サーキットブレーカーの制限を引き上げる

クラスターのメモリ不足を防ぐには、親ブレーカーまたはフィールドデータサーキットブレーカーの制限を引き上げてみてください。フィールドデータサーキットブレーカーの制限の詳細については、Elasticsearch ウェブサイトの「Circuit breaker settings」をご覧ください。