Kibana6.6.0 リリース記念 DokcerのKibanaから接続するElasticsearchを複数指定する
はじめに
Elastic Stack 6.6.0がリリースされました。
これまでKibanaでは単一のElasticsearchの場所しか指定できなかったところが、複数指定できるようになった、というアップデートが含まれているので、 これを試してみます。
確認環境
例によってDockerで確認します。 複数指定するため、Elasticsearchのノードを2つ、Kibanaを1つ、コンテナで用意することにします。
docker-compose.ymlは以下の通りです。 今回は、Kibanaから複数Elasticsearchに接続することを確認するためだけの環境のため、メモリを激しくケチっています。
version: '2' services: elasticsearch: image: docker.elastic.co/elasticsearch/elasticsearch:6.6.0 container_name: elasticsearch environment: - cluster.name=docker-cluster - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" ulimits: memlock: soft: -1 hard: -1 volumes: - esdata660-1:/usr/share/elasticsearch/data ports: - 9200:9200 networks: - esnet elasticsearch-2: image: docker.elastic.co/elasticsearch/elasticsearch:6.6.0 container_name: elasticsearch-2 environment: - cluster.name=docker-cluster - bootstrap.memory_lock=true - "ES_JAVA_OPTS=-Xms512m -Xmx512m" - "discovery.zen.ping.unicast.hosts=elasticsearch" ulimits: memlock: soft: -1 hard: -1 volumes: - esdata660-2:/usr/share/elasticsearch/data networks: - esnet kibana: image: docker.elastic.co/kibana/kibana:6.6.0 container_name: kibana ports: - 5601:5601 depends_on: - elasticsearch volumes: - ./custom/kibana.yml:/usr/share/kibana/config/kibana.yml links: - elasticsearch:elasticsearch - elasticsearch-2:elasticsearch-2 networks: - esnet volumes: esdata660-1: driver: local esdata660-2: driver: local networks: esnet:
ノーマル設定の確認
ここでは、このように書かれています。
Simply set elasticsearch.host in your kibana.yml file to the URLs of the Elasticsearch nodes you want to use.
しかし、Kibanaのdockerイメージの中に含まれているkibana.ymlでは、elasticsearch.url
の方が指定されていました。
--- # Default Kibana configuration from kibana-docker. server.name: kibana server.host: "0" elasticsearch.url: http://elasticsearch:9200 xpack.monitoring.ui.container.elasticsearch.enabled: true
urlを指定しているところで、elasticsearch.host
を指定するように、書き換えることにします。
変更
ここで、設定項目を確認しますと、elasticsearch.hosts
という項目が見つかります。
Releaseの方ではelasticsearch.host
と記載されており、hostsとどっちが正しいの?と、一瞬疑いましたが、settingsの方を信じて進むことにしました。
hostsとなっていることから、複数指定が可能そうと読み取れます。 これをkibana.ymlに反映させたものがこちら。
--- # Default Kibana configuration from kibana-docker. server.name: kibana server.host: "0" elasticsearch.hosts: - http://elasticsearch:9200 - http://elasticsearch-2:9200 xpack.monitoring.ui.container.elasticsearch.enabled: true
あとは、この設定ファイルをvolumesでマウントして渡してやると良いです
ノードを止めて確認
テストデータを入れ、それぞれのノードにデータが格納されるようにしました。
elasticsearchでアクセスできる方のノードをdocker stopで止めてみます。 Monitoringの画面から確認すると、Offline表示になっています。
この状態で、Discoverで確認すると、欠損なくデータが検索できることが確認できました。
感想
今回はhostsを列挙する形で書きました。
elasticsearch.hostsの説明では、以下のようになっています。
All nodes listed here must be on the same cluster.
いくつも列挙するのが面倒だと思う場合は、Releaseの中にあった以下の記述の方、automatically discover other nodes
を使う方が、より容易かもしれません。
You can also configure Kibana to automatically discover other nodes in the cluster (elasticsearch.sniffOnStart) or on an interval (elasticsearch.sniffInterval).
これはまだ試せてませんが、そのうちやれたら良いなぁ。
*1:注1:大谷さんのご指摘により記述を訂正