ログってなんぼ

日々のメモです

elasticsearchのヘルスチェックをとりあえず簡単に行う

とりあえず簡単にできるものをメモ

ヘルスチェック

statusを見て、チェックスクリプトなどでゴニョゴニョするなりなんなり。

$ curl -s -XGET http://localhost:9200/_cluster/health?pretty
{
  "cluster_name" : "hoge",
  "status" : "yellow",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 11,
  "active_shards" : 11,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 11,
  "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.0
}

上記例は立ち上げてからまだサービスインしていないelasticsearchのヘルスチェック結果。

特に負荷があるわけじゃないのにyellow (・・? と思うかもしれないが大丈夫

statusがyellowになっているのは

$ curl -s -XGET localhost:9200/_settings?pretty
{
  ".kibana" : {
    "settings" : {
      "index" : {
        "creation_date" : "1466063...",
        "number_of_shards" : "1",
        "number_of_replicas" : "1",
        "uuid" : "BFQlPE8qShiEb...",
        "version" : {
          "created" : "2030399"
        }
      }
    }
  },

"number_of_replicas" : "1"のため。

GUIが入ってる環境なら画面でも確認できます

f:id:Okisanjp:20160630121641p:plain

レプリカ1のはずなのに無いよ〜と注意されます

いずれレプリカを投入するため今はこのままにしてあるので私の環境では、今はyellowでもOK。

レプリカを作らず運用するなら

レプリカを用いる予定もなく、statusがyellowなのも気分が悪いということであれば

elasticsearch.yml

index.number_of_replicas: 0

と書くか

curl -XPUT 'localhost:9200/_settings' -d '
{
  "index" : {
    "number_of_replicas" : 0
  }
}'

を投げておけば

$ curl -s -XGET http://localhost:9200/_cluster/health?pretty
{
  "cluster_name" : "hoge",
  "status" : "green",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 11,
  "active_shards" : 11,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 0,
  "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" : 100.0
}

"status" : "green",となる

GUIもgreenになりました

f:id:Okisanjp:20160630121705p:plain

おまけ:jqがあるなら

zabbix-agent経由でチェックしたり、時間とstatusをログに出力したりしたい場合もあります

grepとawkなどを駆使してもいいですが

jq

jqがあればstatusの値だけ簡単に得ることができるので便利です

$ curl -s -XGET http://localhost:9200/_cluster/health | jq '.status'
"green"