designetwork

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

Kibana5にパッチ適用しDiscoverタブからCSVエクスポートする

こちらの記事でKibanaのDiscoverタブからExportできる機能追加版をビルドしたが、正直かなり手間がかかった。

designetwork.hatenablog.com

時間が経ち、同様機能をパッチとして作成した方がいるようなので、使ってみた。

github.com

Kibana Exportパッチの使い方

作成者から紹介されている使用方法はこちらの通り。内容を確認したところ、パッチはsrcディレクトリの内容となっていた。それを置き換えた上でoptimizeを削除し、起動時に再作成する。(自動的に)

cd ${KIBANA_HOME}
tar -zcvf optimize-backup.tar.gz
rm -rf optimize
wget https://github.com/fbaligand/kibana/releases/download/v5.4.0-csv-export/csv-export-patch.tar.gz
tar -zxvf csv-export-patch.tar.gz
rm -f csv-export-patch.tar.gz
bin/kibana

Dockerでデプロイする

Kibanaは既に動かしている環境があり、競合を避けるために、Dockerコンテナとしてパッチ適用版のKibanaをデプロイする。

Docker-Composeで以下の通りデプロイできるようにした。なお、Elasticseach関連のパラメータは環境変数から読み込むようにはしておらず、configディレクトリをマウントする形にしている。

github.com

$ tree
.
├── README.md
├── docker-compose.yml
└── kibana_5.3
    ├── Dockerfile
    └── config
        └── etc
            ├── kibana.log
            └── kibana.yml

ベースイメージはシンプルにCentOSから作成する。ElasticオフィシャルはX-Packインストールなど、多機能で起動が重いと感じている。なお、既存のElasticsearchがVer.5.3.0のため、Kibanaもバージョンを揃えている。パッチは各バージョン向けにリリースされているので、該当のバージョンを使用する。

$ sudo vi ./kibana_5.3/Dockerfile
FROM centos

RUN rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
RUN echo $'[kibana-5.x]\n\
name=Kibana repository for 5.x packages\n\
baseurl=https://artifacts.elastic.co/packages/5.x/yum\n\
gpgcheck=1\n\
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch\n\
enabled=1\n\
autorefresh=1\n\
type=rpm-md' > /etc/yum.repos.d/elastic.repo

RUN yum install -y kibana-5.3.0-1

WORKDIR /usr/share/kibana
RUN curl -OL https://github.com/fbaligand/kibana/releases/download/v5.3.0-csv-export/csv-export-patch.tar.gz
RUN tar -xzvf ./csv-export-patch.tar.gz
RUN chown kibana:kibana -R ./src
RUN rm -rf ./optimize/*

CMD /usr/share/kibana/bin/kibana

docker-composeファイルはこのようにかなりシンプル。

$ sudo vi ./docker-compose.yml
version: '2.1'
services:
  kibana:
    build: kibana_5.3
    container_name: kibana_5.3_export
    ports:
     - 5605:5601
    networks:
      - kibana_net
    volumes:
      - ./kibana_5.3/config/etc/:/etc/kibana/
networks:
  kibana_net:

設定ファイルは個別に作成して、コンテナ起動時にマウントする。logging設定はマウントディレクトリをひとつにするために同一ディレクトリに出力。

$ sudo vi ./kibana_5.3/config/etc/kibana.yml
server.port: 5601
server.host: "0.0.0.0"
server.name: "kibana.designet.local"
elasticsearch.url: "http://192.168.1.81:9200"
logging.dest: /etc/kibana/kibana.log

起動時に若干時間を要する

起動時にはoptimizeの処理で数分の時間を要する。私の環境では下記の通り90秒程度でKibanaが上がってきた。(logをSTDOUTしている状態)

$ sudo docker-compose up
Starting kibana_5.3_export ...
Starting kibana_5.3_export ... done
Attaching to kibana_5.3_export
kibana_5.3_export | {"type":"log","@timestamp":"2017-07-16T17:17:12Z","tags":["info","optimize"],"pid":1,"message":"Optimizing and caching bundles for kibana, timelion and status_page. This may take a few minutes"}
kibana_5.3_export | {"type":"log","@timestamp":"2017-07-16T17:18:43Z","tags":["info","optimize"],"pid":1,"message":"Optimization of bundles for kibana, timelion and status_page complete in 90.28 seconds"}
kibana_5.3_export | {"type":"log","@timestamp":"2017-07-16T17:18:43Z","tags":["status","plugin:kibana@5.3.0","info"],"pid":1,"state":"green","message":"Status changed from uninitialized to green - Ready","prevState":"uninitialized","prevMsg":"uninitialized"}

エクスポート動作概要

パッチ適用版だと、このようにExportが可能になっている。なお、Discoverタブの中でもカラム選択してSaveしOpenすることでExportが可能となる。そうしないと_sourceのみが表示されてしまう。

ここから以下のようにCSVでのエクスポートができる。

"@timestamp",action,"if_src","if_dst",proto,direction,"ip_src","ip_local","port_src",nat,"ip_dst","port_local","port_dst"
"July 17th 2017, 00:40:00.000",Built,outside,management,tcp,outbound,"172.217.27.68"," - ",443," - ","192.168.1.104",,"53,574"
"July 17th 2017, 00:40:00.000",Built,management,outside,tcp," - ","192.168.1.104"," - ","53,574",dynamic,"222.159.141.103",,"53,574"
"July 17th 2017, 00:40:00.000",Built,management,outside,tcp," - ","192.168.1.104"," - ","53,575",dynamic,"222.159.141.103",,"53,575"

まとめ - Kibana5にパッチ適用しDiscoverタブからCSVエクスポートする

Kibana5でパッチを適用しDiscoverタブから検索結果をCSVエクスポートできるようにした。シンプルな操作でエクスポート機能を追加できるため、非常に有用なパッチと評価している。