Elasticsearch 1.7.5 から 2.3.3 へのアップデート後に Kibana でエラーが発生する

先日 Elasticsearch を 1.7.5 から 2.3.3 に、Kibana を 4.1.2 から 4.5.1 にアップデートしました。

現在のところ、Kibana にアクセスすると
plugin:elasticsearch: Elasticsearch is still initializing the kibana index.
とのエラーが発生しており、馴染みの画面に進めません。

どんな原因が考えられるでしょうか?

状態としては以下になります。

$ curl 'http://localhost:9200/_cluster/health?pretty'
{
  "cluster_name" : "masutaka_net",
  "status" : "red",
  "timed_out" : false,
  "number_of_nodes" : 1,
  "number_of_data_nodes" : 1,
  "active_primary_shards" : 2550,
  "active_shards" : 2550,
  "relocating_shards" : 0,
  "initializing_shards" : 0,
  "unassigned_shards" : 2552,
  "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" : 49.98039984319875
}

以下、アップデートで行ったことです(長文です)。


Elasticsearch はさくらの VPS 上で稼働しており、メモリは 2G です。Kibana も同一ホスト上にあります。

はじめ、以下のドキュメントを参照し、不要な設定を削除しました。

実際の差分は以下になります。Kibana の設定はデフォルトです。何も設定していません。

cluster.name: masutaka_net
node.name: "Masutaka Net"
discovery.zen.minimum_master_nodes: 1
discovery.zen.ping.multicast.enabled: false
discovery.zen.ping.unicast.hosts: ["localhost"]
http.cors.enabled: true

↓

cluster.name: masutaka_net
node.name: "Masutaka Net"
discovery.zen.ping.unicast.hosts: ["localhost"]
discovery.zen.minimum_master_nodes: 1

Elasticsearch は停止しても構わないため、apt の source.list を 2.x 系に変更し $ apt-get update && apt-get upgrade しました。

Elasticsearch 自体は以下のようなログを多く出しながらも、最終的に $ curl localhost:9200 で応答が返ることを確認しました。

[2016-06-13 23:21:33,840][WARN ][cluster.metadata ] [Masutaka Net] [index-name-2016.02.14] re-syncing mappings with cluster state because of types [[type-name]]

Kibana-4.5.1 をダウンロードして起動したところ、以下のエラーが発生。

$ ./bin/kibana
  log   [23:28:28.298] [info][status][plugin:kibana] Status changed from uninitialized to green - Ready
  log   [23:28:28.412] [info][status][plugin:elasticsearch] Status changed from uninitialized to yellow - Waiting for Elasticsearch
  log   [23:28:28.456] [info][status][plugin:kbn_vislib_vis_types] Status changed from uninitialized to green - Ready
  log   [23:28:28.478] [info][status][plugin:markdown_vis] Status changed from uninitialized to green - Ready
  log   [23:28:28.492] [info][status][plugin:metric_vis] Status changed from uninitialized to green - Ready
  log   [23:28:28.530] [info][status][plugin:spyModes] Status changed from uninitialized to green - Ready
  log   [23:28:28.555] [info][status][plugin:statusPage] Status changed from uninitialized to green - Ready
  log   [23:28:28.570] [info][status][plugin:table_vis] Status changed from uninitialized to green - Ready
  log   [23:28:28.616] [fatal] Error: listen EADDRINUSE 0.0.0.0:5601
    at Object.exports._errnoException (util.js:870:11)
    at exports._exceptionWithHostPort (util.js:893:20)
    at Server._listen2 (net.js:1234:14)
    at listen (net.js:1270:10)
    at net.js:1379:9
    at nextTickCallbackWith3Args (node.js:453:9)
    at process._tickDomainCallback (node.js:400:17)
FATAL { [Error: listen EADDRINUSE 0.0.0.0:5601]
  cause:
   { [Error: listen EADDRINUSE 0.0.0.0:5601]
     code: 'EADDRINUSE',
     errno: 'EADDRINUSE',                                                                                                                                                 
     syscall: 'listen',
     address: '0.0.0.0',
     port: 5601 },
  isOperational: true,
  code: 'EADDRINUSE',
  errno: 'EADDRINUSE',
  syscall: 'listen',
  address: '0.0.0.0',
  port: 5601 }

Redirecting to Google Groups を見つけ、delete-by-query をインストール(元々インストールされてなかった)。 http.cors.enabled: true も設定したところ、表題の現象になりました。この辺、どちら要因かの切り分けは出来ていません。

それでもダメなので、Kibana のダッシュボードが消えることを覚悟して、$ curl -XDELETE http://localhost:9200/.kibana を実行したが、変化なし。 Elasticsearch is still initializing the kibana index - Stack Overflow を参考にしました。

Elasticsearchのクラスタのstatusがredだったりはしないですか?
Es側にログは何か出てないでしょうか?

返信ありがとうございます。

こちらのとおり、Elasticsearch のクラスタの status は red です。
Elasticsearch 側のログにはエラーメッセージはないようです。
grep ERR /var/log/elasticsearch/masutaka_net.log.2016-06-* で何もヒットしませんでした。

Elasticsearch 単体の動作は正常に見えます...。以下のような Document の POST や、GET/DELETE の正常動作は確認できています。

curl -s -XPOST 'http://localhost:9200/index-name-2016.06/type-name/' -d '{
    "aaa" : 1111,
    "bbb" : 2222,
    "ccc" : 3333
}'

Elasticsearchのクラスredということは、インデックスが壊れている状況になっています。

KibanaはElasticsearchがRedではない状況で動作するので、
Elasticsearchの状況をもっと調べる必要があるかと。

GET /_cat/indices

でまずは、保存されているインデックスの状態を確認してみてください。
いずれかのインデックスがredになっているはずです。

結論から言うと、Kibana 直りました。ありがとうございます!

533 個のインデックスのうち、52 個が壊れていました。

$ curl -s -X GET 'http://localhost:9200/_cat/indices' | grep '^red' | wc -l
52

$ curl -s -X GET 'http://localhost:9200/_cat/indices' | grep -v '^red' | wc -l
481

$ curl -s -X GET 'http://localhost:9200/_cat/indices' | grep '^red' | sort
red    open .kibana                      1 1
red    open kibana-int                   5 1
red    open nginx-access-2014.12         5 1
red    open nginx-access-2015.01         5 1
red    open nginx-access-2015.02         5 1
red    open nginx-access-2015.03         5 1
red    open nginx-access-2015.04         5 1
red    open nginx-access-2015.05         5 1
red    open sshd-invalid-user-2015.02.15 5 1
(snip)

ところが、何度か GET /_cat/indices していたら .kibana 以外 yellow に復帰しました。Elasticsearch を起動した直後は red のインデックスがあるが、しばらくすると yellow に変わるのですね。

red がなくなった直後の Elasticsearch のログです。

[2016-06-18 21:09:26,239][INFO ][cluster.routing.allocation] [Masutaka Net] Cluster health status changed from [RED] to [YELLOW] (reason: [shards started [[nginx-access-2014.12][3], [nginx-access-2014.12][0], [nginx-access-2014.12][3], [nginx-access-2014.12][0]] ...]).

ところが今度は以下のエラーが発生し、Kibana が完全に動作不能になってしまいました。Go backclear your session も、.kibanakibana-intDELETE しても効果なしでした。

試行錯誤して http.cors.enabled: true を削除したところ、Kibana が無事復帰しました。