拒否されたリクエスト
Elasticsearchがリクエストを拒否すると、操作が停止し、429
レスポンスコードでエラーが返されます。拒否されたリクエストは一般的に次の原因によって発生します:
- スレッドプールの枯渇。枯渇した
search
またはwrite
スレッドプールは、TOO_MANY_REQUESTS
エラーメッセージを返します。 - サーキットブレーカーエラー。
indexing_pressure.memory.limit
を超える高いインデクシングプレッシャー。
拒否されたタスクの確認
各スレッドプールの拒否されたタスクの数を確認するには、cat thread pool APIを使用します。特にsearch
およびwrite
スレッドプールにおけるrejected
とcompleted
タスクの高い比率は、Elasticsearchが定期的にリクエストを拒否していることを意味します。
Python
resp = client.cat.thread_pool(
v=True,
h="id,name,queue,active,rejected,completed",
)
print(resp)
Js
const response = await client.cat.threadPool({
v: "true",
h: "id,name,queue,active,rejected,completed",
});
console.log(response);
コンソール
GET /_cat/thread_pool?v=true&h=id,name,queue,active,rejected,completed
write
スレッドプールの拒否は、エラーAPIおよび関連するログにEsRejectedExecutionException
としてQueueResizingEsThreadPoolExecutor
またはqueue capacity
と共に頻繁に表示されます。
これらのエラーは、しばしばバックログタスクに関連しています。
サーキットブレーカーの確認
トリップしたサーキットブレーカーの数を確認するには、node stats APIを使用します。
Python
resp = client.nodes.stats(
metric="breaker",
)
print(resp)
Js
const response = await client.nodes.stats({
metric: "breaker",
});
console.log(response);
コンソール
GET /_nodes/stats/breaker
これらの統計はノードの起動からの累積です。詳細については、サーキットブレーカーエラーを参照してください。
インデクシングプレッシャーの確認
インデクシングプレッシャーの拒否数を確認するには、node stats APIを使用します。
Python
resp = client.nodes.stats(
human=True,
filter_path="nodes.*.indexing_pressure",
)
print(resp)
Js
const response = await client.nodes.stats({
human: "true",
filter_path: "nodes.*.indexing_pressure",
});
console.log(response);
コンソール
GET _nodes/stats?human&filter_path=nodes.*.indexing_pressure
これらの統計はノードの起動からの累積です。
インデクシングプレッシャーの拒否はEsRejectedExecutionException
として表示され、coordinating_and_primary_bytes
、coordinating
、primary
、またはreplica
のために拒否されたことを示します。
これらのエラーは、しばしばバックログタスク、バルクインデックスのサイズ、またはインジェストターゲットのrefresh_interval
設定に関連しています。
拒否されたリクエストの防止
高いCPUおよびメモリ使用量の修正
Elasticsearchが定期的にリクエストや他のタスクを拒否する場合、クラスターは高いCPU使用量または高いJVMメモリプレッシャーを抱えている可能性があります。詳細については、高いCPU使用量および高いJVMメモリプレッシャーを参照してください。