designetwork

ネットワークを軸としたIT技術メモ

Kibanaが参照するElasticsearchを冗長化する(v6.6.0-)

Kibana 6.6.0 から標準で参照するElasticsearchを複数設定できるようになった。設定方法と動作を確認する。

Release Note

以下の通り機能追加が報告されている。

www.elastic.co

Kibanaでは、待ち望まれていた複数へのElasticsearchノードの接続がKibanaで可能になりました。これにより、Kibana <> Elasticsearch接続の単一障害点が無くなります。可視化機能では、KibanaのダッシュボードをPNGで出力できるようになりました。その他の変更や詳細についてはKibana 6.6 release highlightsをご覧ください。

https://www.elastic.co/guide/en/kibana/current/release-notes-6.6.0.htmlwww.elastic.co

Kibana->Elasticsearch冗長化方式

こちらのProduction Guideの中でKibanaからElasticsearchへの接続を冗長化することが推奨されている。冗長化の方法は以下の通り。

www.elastic.co

  • 外部LBによるElasticsearchロードバランス(ラウンドロビン等)
  • KibanaノードへのCoordinating Only Elasticsearch同居クラスタ参加
  • NEW!! elasticsearch.hostsでのElasticsearch全ノード指定

設定項目

kibana.yml の設定項目が以下の通りアップデートされている。v6.5まではelasticsearch.url: string であったのに対して、elasticsearch.hosts: [(string)]という項目に変更された。(v6.6では引き続きelasticsearch.urlも使用可能)

  • Before
# The URL of the Elasticsearch instance to use for all your queries.
elasticsearch.url: "http://localhost:9200"
  • After
# The URLs of the Elasticsearch instances to use for all your queries.
elasticsearch.hosts: ["http://localhost:9200"]

設定と動作確認

以下の通り、クラスタ内の全Elasticsearchを指定して動作を確認する。

server.name: kibana
server.port: 5601
server.host: 0.0.0.0
kibana.index: .kibana

elasticsearch.hosts:
- https://10.244.0.3:443
- https://10.244.0.6:443
- https://10.244.0.7:443
...

配列の記載方法はYAML記法のいずれでも可

全体的な設定項目はこちら
www.elastic.co

Kibana, Elasticsearch状態

X-Pack Monitoringで、Kibanaから見たElasticsearchの状態を確認しながら、Elasticserchの各Nodeを再起動してみる。従来だと、Kibanaに設定している対象ノードがダウンしている間はエラー画面になった。

正常状態

elasticsearch-master/0再起動

elasticsearch-master/1再起動

elasticsearch-master/2再起動

それぞれのノード障害が発生しても、KibanaからElasticsearchの接続は継続され、ログが参照できている。

ただし、再起動直後はReplica ShardのPrimary昇格等の兼ね合いでエラー画面が表示されることがある。

とは言え、数秒〜数分で復旧するため、バージョンアップ等の運用作業、障害対応による特定ノード停止を想定すると十分に実用的と考えられる。

Kibana自体の冗長化

Kibanaを複数立ち上げて、ロードバランサ経由にすることで、さらに可用性が向上する。(詳細割愛)

BOSH環境へのデプロイ

BOSH環境の場合は、こちらのBOSH Deploymentが非常に有用です。

github.com

本記事のKibana->Elasticsearch冗長化部分についてContributeさせていただきました。

github.com

まとめ

kibana.ymlelasticsearch.hostsクラスタの各Elasticsearchを設定することで、KibanaからElasticsearchへの接続を冗長化することができるようになった。

  • Before
# The URL of the Elasticsearch instance to use for all your queries.
elasticsearch.url: "http://10.244.0.3:9200"
  • After
# The URLs of the Elasticsearch instances to use for all your queries.
elasticsearch.hosts: ["http://10.244.0.3:9200","http://10.244.0.6:9200","http://10.244.0.7:9200"]