Kibana 6.6.0 から標準で参照するElasticsearchを複数設定できるようになった。設定方法と動作を確認する。
Release Note
以下の通り機能追加が報告されている。
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への接続を冗長化することが推奨されている。冗長化の方法は以下の通り。
- 外部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が非常に有用です。
本記事のKibana->Elasticsearch冗長化部分についてContributeさせていただきました。
まとめ
kibana.yml
のelasticsearch.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"]