クラスタの状態を確認する際に以下のようにチェックを行う。
$ curl -X GET 'localhost:9200/_cluster/health'
その場合、以下のような結果が返ってくる。
{
"cluster_name": "elasticsearch",
"status": "yellow",
"timed_out": false,
"number_of_nodes": 1,
"number_of_data_nodes": 1,
"active_primary_shards": 5,
"active_shards": 5,
"relocating_shards": 0,
"initializing_shards": 0,
"unassigned_shards": 5,
"delayed_unassigned_shards": 0,
"number_of_pending_tasks": 0,
"number_of_in_flight_fetch": 0,
"task_max_waiting_in_queue_millis": 0,
"active_shards_percent_as_number": 50
}
それぞれの項目は以下のようになっている。
cluster_name
クラスタ名。
status
- green : 全てのシャードが正常に稼動している
- yellow : プライマリシャードは存在するがレプリカシャードが割り当てられていない。検索は可能。
- red : 少なくとも1つのプライマリシャードが正常ではない。検索結果は不正になる。
timed_out
ヘルスチェックがタイムアウトしたかどうか。
number_of_nodes
ノードの数。
number_of_data_nodes
データノードの数。
active_primary_shards
クラスタに含まれるプライマリシャードの数。
active_shards
クラスタに含まれるシャードの数。(レプリカシャードも含む)
relocating_shards
普段は 0 の場合が多い。ノード間でシャードの移動が発生している場合に値が増加する。(クラスタのバランスが悪かったり、ノードの追加や削除が行われた際など)
initializing_shards
普段は 0 の場合が多い。新しく作成されているシャードの数。
unassigned_shards
シャードとしては存在するが、クラスタ内で割り当てられていないシャードの数。レプリカシャードが割り当てられていない場合などに値が増加する。その場合は _cat/shards で確認が必要。
delayed_unassigned_shards
index.unassigned.node_left.delayed_timeout の設定によって即時復旧を待っているシャードの数。ノードに問題があった場合、マスターはレプリカシャードを昇格させて新たにレプリカシャードを作成しようとするが、ノードが短時間で復旧した場合は復旧したノードのシャードをレプリカにする。
number_of_pending_tasks
ノード間でシャードの移動が発生している場合やインデックスの作成時の設定変更などで処理待ちになっているクラスタ設定変更の数。
number_of_in_flight_fetch
クラスタの再起動などによるシャードの割り当てについて、非同期で実行されている、割り当て対象のシャードのコピーがあるか確認する処理の数。
task_max_waiting_in_queue_millis
タスクの最大待ち時間(ミリ秒)
active_shards_percent_as_number
active_shards の値を active_shards と unassigned_shards を足した値で割ったもの。
参考になった記事
Cluster Health
Cluster Health(The Definitive Guide)
Delaying allocation when a node leaves
Pending cluster tasks
Elasticsearch 1.6.0 をリリース