拒否されたリクエスト

Elasticsearchがリクエストを拒否すると、操作が停止し、429レスポンスコードでエラーが返されます。拒否されたリクエストは一般的に次の原因によって発生します:

拒否されたタスクの確認

各スレッドプールの拒否されたタスクの数を確認するには、cat thread pool APIを使用します。特にsearchおよびwriteスレッドプールにおけるrejectedcompletedタスクの高い比率は、Elasticsearchが定期的にリクエストを拒否していることを意味します。

Python

  1. resp = client.cat.thread_pool(
  2. v=True,
  3. h="id,name,queue,active,rejected,completed",
  4. )
  5. print(resp)

Js

  1. const response = await client.cat.threadPool({
  2. v: "true",
  3. h: "id,name,queue,active,rejected,completed",
  4. });
  5. console.log(response);

コンソール

  1. GET /_cat/thread_pool?v=true&h=id,name,queue,active,rejected,completed

writeスレッドプールの拒否は、エラーAPIおよび関連するログにEsRejectedExecutionExceptionとしてQueueResizingEsThreadPoolExecutorまたはqueue capacityと共に頻繁に表示されます。

これらのエラーは、しばしばバックログタスクに関連しています。

サーキットブレーカーの確認

トリップしたサーキットブレーカーの数を確認するには、node stats APIを使用します。

Python

  1. resp = client.nodes.stats(
  2. metric="breaker",
  3. )
  4. print(resp)

Js

  1. const response = await client.nodes.stats({
  2. metric: "breaker",
  3. });
  4. console.log(response);

コンソール

  1. GET /_nodes/stats/breaker

これらの統計はノードの起動からの累積です。詳細については、サーキットブレーカーエラーを参照してください。

インデクシングプレッシャーの確認

インデクシングプレッシャーの拒否数を確認するには、node stats APIを使用します。

Python

  1. resp = client.nodes.stats(
  2. human=True,
  3. filter_path="nodes.*.indexing_pressure",
  4. )
  5. print(resp)

Js

  1. const response = await client.nodes.stats({
  2. human: "true",
  3. filter_path: "nodes.*.indexing_pressure",
  4. });
  5. console.log(response);

コンソール

  1. GET _nodes/stats?human&filter_path=nodes.*.indexing_pressure

これらの統計はノードの起動からの累積です。

インデクシングプレッシャーの拒否はEsRejectedExecutionExceptionとして表示され、coordinating_and_primary_bytescoordinatingprimary、またはreplicaのために拒否されたことを示します。

これらのエラーは、しばしばバックログタスクバルクインデックスのサイズ、またはインジェストターゲットのrefresh_interval設定に関連しています。

拒否されたリクエストの防止

高いCPUおよびメモリ使用量の修正

Elasticsearchが定期的にリクエストや他のタスクを拒否する場合、クラスターは高いCPU使用量または高いJVMメモリプレッシャーを抱えている可能性があります。詳細については、高いCPU使用量および高いJVMメモリプレッシャーを参照してください。