基本的なElasticsearchのコマンドは、たくさんまとまった記事があると思うので特に困らないと思いますが、プラスαとしてElasticsearchクラスタを運用していく上で知っていると便利かもと感じたコマンドや使い方を備忘録としてまとめてみました。
定期的に追加していくかもしれないです。
表示するカラムを絞り込む
例えば、クラスタに所属するノードの情報を表示させたい場合、cat nodes API
を利用しますが、デフォルトだとレスポンスは以下のようになります。
$ curl -X GET "localhost:9200/_cat/nodes?v"
ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name
xxx.xx.x.xxx 65 97 19 0.08 0.12 0.09 mdi - node-1
xxx.xx.x.xxx 72 97 17 0.24 0.19 0.16 mdi * node-2
レスポンスに含めるのは必要な情報だけで良い場合、以下のようにクエリパラメータにh
を使うことでカラムを絞り込むことができます。
# ip, cpu, heapPercentだけ表示
$ curl "localhost:9200/_cat/nodes?h=ip,cpu,heapPercent&v=true"
ip heap.percent cpu
xxx.xx.x.xxx 80 8
xxx.xx.x.xxx 85 4
また、デフォルトでは表示されないカラムを指定し、レスポンスに含めることも可能です。表示できるカラムは公式ドキュメントを確認してください。
# heap.max, pidも含めて表示(選出は適当)
$ curl -X GET "localhost:9200/_cat/nodes?h=ip,heap.percent,heap.max,cpu,pid&v=true"
ip heap.percent heap.max cpu pid
xxx.xx.x.xxx 69 495.3mb 2 4257
xxx.xx.x.xxx 65 495.3mb 11 3686
www.elastic.co
特定カラムの昇順、降順でソートする
ノードのリソース使用状況を確認する上で、使用率が高いもの順に表示させたいというユースケースもあると思います。その場合、クエリパラメータs
を使うことで降順または昇順にソートさせることができます。
# heapPercent降順で表示
$ curl -X GET "localhost:9200/_cat/nodes?h=ip,heap.percent,cpu&s=heap.percent:desc&v=true"
ip heap.percent cpu
xxx.xx.x.xxx 84 10
xxx.xx.x.xxx 61 5
シャードがUNASSIGNEDになった原因を調べる
Elasticsearchクラスタを運用する上で、基本的に可用性担保のためアロケーションを有効化している場合が多いかと思います。
ノードに障害が発生しても自動的に正常なノードにシャードがアロケーションされるようになっているので、アロケーションによってシャードが配置されないことは稀にしか発生しないと思いますが、何かしらの作業によってシャードがUNASSIGNED
になってしまい困った・・・という場合に使えるコマンドが、cluster allocation explain API
です。
このコマンドは、UNASSIGNED
になってしまった原因について確認することができます。
UNASSIGNED
が発生する原因は、ノード数に対してインデックスのレプリカ数が多かったり、アロケーションが無効化されていることによってシャードが配置できない等いくつか挙げられます。
# レスポンスは公式ドキュメントの例
$ curl localhost:9200/_cluster/allocation/explain?pretty
{
"index" : "my-index-000001",
"shard" : 0,
"primary" : true,
"current_state" : "unassigned",
"unassigned_info" : {
"reason" : "INDEX_CREATED",
"at" : "2017-01-04T18:08:16.600Z",
"last_allocation_status" : "no"
},
"can_allocate" : "no",
"allocate_explanation" : "cannot allocate because allocation is not permitted to any of the nodes",
"node_allocation_decisions" : [
{
"node_id" : "xxxxxx",
"node_name" : "node-0",
"transport_address" : "127.0.0.1:9401",
"node_attributes" : {},
"node_decision" : "no",
"weight_ranking" : 1,
"deciders" : [
{
"decider" : "filter",
"decision" : "NO",
"explanation" : "node does not match index setting [index.routing.allocation.include] filters [_name:\"nonexistent_node\"]"
}
]
}
]
}
www.elastic.co
例えば、ノードの入れ替え作業で一時的にアロケーションを無効化したい場合などに使えます。
現在のアロケーション設定の確認および変更は、cluster API
を使います。
cluster.routing.allocation.enable
に設定できるのは、all
、primaries
、new_primaries
、none
の4つです。all
は全てのシャードがアロケーション対象になります。
www.elastic.co
# アロケーション確認(有効な場合、cluster.routing.allocation.enable = allなどnone以外)
$ curl localhost:9200/_cluster/settings?pretty
{
"persistent" : {
"cluster" : {
"routing" : {
"allocation" : {
"enable" : "all"
}
}
}
},
"transient" : {
"cluster" : {
"routing" : {
"allocation" : {
"exclude" : {
"_name" : ""
}
}
}
}
}
}
# アロケーション無効にする(cluster.routing.allocation.enable = node)
$ curl -XPUT localhost:9200/_cluster/settings -d '{
"persistent": {"cluster.routing.allocation.enable": "none"}
}'
# 確認
$ curl localhost:9200/_cluster/settings?pretty
{
"persistent" : {
"cluster" : {
"routing" : {
"allocation" : {
"enable" : "none"
}
}
}
},
"transient" : { }
}
特定ノードにアロケーションされないようにする
ノードの入れ替え作業で特定ノードにアロケーションされないようにするときに使うコマンドです。
cluster.routing.allocation.exclude._name
にdataノード名を指定することでそのノードにアロケーションされないようになります。
curl -XPUT localhost:9200/_cluster/settings -d '{
"transient": {
"cluster.routing.allocation.exclude._name": "dataノード名"
}
}'
ノード名(_name
)だけでなく_ip
や_host
などで指定することも可能です。
www.elastic.co
参考
Elasticsearch関連の本はこちらがおすすめです。