designetwork

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

Kibana 5でDiscoverタブの検索結果をCSVエクスポートする

f:id:daichi703n:20170327005406p:plain

Kibanaで要望されつつもなかなか実装されない機能の一つに、Discover画面からのエクスポートがある。Githubでもissueとして長期的に要望されている。

github.com

その中で、次の通り機能実装版を提供してくれている方がいる。

If you are adventurous enough, you can implement it yourselves. It is fairly simple. For example this commit for version 5.1. Build instructions here.

Here is the screenshot:

f:id:daichi703n:20170326234449p:plain

今回は機能追加版のKibanaをビルドして動作確認をした。また、より簡単に導入できるようDockerコンテナを作成したので公開する。

前提条件

本記事の前提条件・知識は以下の通り。

  • Elasticsearchをインストールして使用している。
  • Kibanaの設定変更箇所が分かる。
  • Dockerを通常使用できる。

ちなみに、私はDocker歴が非常に浅いため至らない点が多いですがご了承ください。また、本記事ではKibana5.2.3を使用していますので、Elasticsearchのバージョンも合わせる必要があります。

公開手順でビルドする

公開いただいている手順でエクスポート機能追加版のKibanaをインストール・設定する。

github.com

つまづいた点はいくつがあるが、どうにかビルドできた。

  • 説明に記載はないがgit clone https://github.com/tongwang/kibana.gitする
  • nvm install "$(cat .node-version)"したときに存在しないと言われるときは~/.nvm/nvm.sh install "$(cat .node-version)"する

Kibanaを起動する

Kibanaの設定はファイルは/etc/kibana/config/kibana.yml。通常通りserver.port, server.host, server.name, elasticsearch.url, (kibana.indexもコメント外す必要あり?)等を設定する。

kibanaの起動方法は以下の通り。

cd /etc/kibana (when cloned kibana into /etc/)
npm start

このときにProxy?がどうのこうのでアクセス出来ないことがあった。kibana.ymlでserver.host: 0.0.0.0を指定していると0.0.0.0にリダイレクトされてしまった。起動オプションから--devを除外したらアクセス可能になった。

vi /etc/kibana/package.json

-  "start": "sh ./bin/kibana --dev",
+  "start": "sh ./bin/kibana",

各種設定後にnpm startして指定ポートにアクセスするとエクスポート機能付きKibanaにアクセスできる。再掲にはなるが、このようにexport付きの画面が表示される。

f:id:daichi703n:20170327001735p:plain

エクスポートしてみる

さっそくエクスポートしてみたが、CSVファイルをダウンロードできるものの出力されていない…

f:id:daichi703n:20170327001920p:plain

いろいろと試したところ、単純なDiscoverの状態ではだめで、左ペインでindexをAddした状態でないとエクスポートされないようだ。次の画面のようにカラムが表示されていればよい。

f:id:daichi703n:20170327002624p:plain

次の通りエクスポートできた。

f:id:daichi703n:20170327002710p:plain

Dockerコンテナで簡単に導入する

正直、git cloneして、ビルドして、と導入のハードルはやや高い(私自身が経験浅く難しかった)。また、Proxy環境では、Git(Port9418)の通信が発生するため、Proxyサーバの設定次第では通信できず、ビルドを完了できない。

導入を簡単にするために、ビルド済みのDockerコンテナを作成しました。ただし、Dockerhubへの自作コンテナpushも今回が初めてなので、全く最適化できていません…。容量もでかいですがご了承ください。(3GB程度)

https://hub.docker.com/r/daichi703n/kibana-exp-52/

導入手順

導入手順はこちらの通り。オフィシャルと同様、Elasticsearchのパスを起動オプションで指定できるようにしたいが、未実装。設定ファイルを編集ください。

docker pull daichi703n/kibana-exp-52
docker images
// daichi703n/kibana-exp-52 があることを確認する

docker run -d -p 5605:5601 --name some-kibana daichi703n/kibana-exp-52 /sbin/init
docker ps -a
// CONTAINER ID        IMAGE                      COMMAND             CREATED             STATUS              PORTS                    NAMES
// 2098d63548c3        daichi703n/kibana-exp-52   "/sbin/init"        3 minutes ago       Up 3 minutes        0.0.0.0:5605->5601/tcp   some-kibana

docker exec -it some-kibana /bin/bash  // dockerコンテナにログインする。
cd /etc/kibana/
vi ./config/kibana.yml  //環境にあわせて調整
npm start  // 以下のように表示されればOK

> kibana@5.2.3 start /etc/kibana
> sh ./bin/kibana

  log   [15:41:48.351] [info][status][plugin:kibana@5.2.3] Status changed from uninitialized to green - Ready
  log   [15:41:48.424] [info][status][plugin:elasticsearch@5.2.3] Status changed from uninitialized to yellow - Waiting for Elasticsearch
  log   [15:41:48.457] [info][status][plugin:console@5.2.3] Status changed from uninitialized to green - Ready
  log   [15:41:48.494] [warning] You're running Kibana 5.2.3 with some different versions of Elasticsearch. Update Kibana or Elasticsearch to the same version to prevent compatibility issues: v5.2.2 @ 192.168.1.81:9200 (192.168.1.81)
  log   [15:41:49.815] [info][status][plugin:timelion@5.2.3] Status changed from uninitialized to green - Ready
  log   [15:41:49.823] [info][status][plugin:elasticsearch@5.2.3] Status changed from yellow to green - Kibana index ready
  log   [15:41:49.824] [info][listening] Server running at http://0.0.0.0:5601
  log   [15:41:49.825] [info][status][ui settings] Status changed from uninitialized to green - Ready

これでhttp://<サーバIP>:<Kibanaフォワーディングポート>にアクセスすれば使用可能。ポート番号はコンテナ起動時 -p パラメータで変更可能。

まとめ - Kibana 5でDiscoverタブの検索結果をCSVエクスポートする

エクスポート機能が実装されたKibanaを導入して、DiscoverからCSVエクスポートできることを確認した。また、ビルド済みのDockerコンテナを作成したため、簡単に導入できる。