概要
-
前回の続きです。
- Elasticserch公式のdocker-compose.yamlではKibanaが動く環境が準備されてなかったので、Kibanaが動くContenerを追加して連携させたいと思います。
検証内容
Kibanaを使用して実現したい機能を箇条書きで記載。ただし、一度もイジったことがないのでこれら機能要件がKibanaで実現できるかも分かってない状態です。用途次第でその他Elasticが提供している別のツールを使うのが正しいのかもですが、その「当たり」をつける意味でもまずはKibanaがElasticserchと連動して動く環境を作成しで確認してみたいと思います。
- 検証内容(実現したい機能)
- データのCRUD操作系インターフェース(以後IFと省略)
- ElasticsearchのデータI/O、CRUD操作を行うためのIFとして利用。
- その他、RDBMSやKVS、ファイルからElasticserchにデータ取り込みをかけるためのGUIのIF的な利用。
- データ操作結果のVIEW表示
- Elasticserch内部データを参照するためのGUIとしての利用。
- データの検索、集計やクエリを実行する為のIFとしての利用。
- その他機能検証項目
- なんとなくVIEW的な役割のツールっぽいので認証及び、認可の制限が掛けられるか?
- 自前の認証ではなくAuth/OpenIDConnectや、組織内利用シーンではAD連携した認証を行いたい。
- 認可に関してはページ(ダッシュボードというらしい?)単位でのアクセス制限と編集制限をかけたい。
- 日常の利用で英文はキビしいので日本語化の可否確認。
- エクスポート処理の有無。特にGUIとして優れているならばページをPDF等に吐けるのか?
- なんとなくVIEW的な役割のツールっぽいので認証及び、認可の制限が掛けられるか?
- データのCRUD操作系インターフェース(以後IFと省略)
リファレンス
- 環境構築時に参考にしたサイト
環境構築
- こちらも公式版コンテナが提供されているのでimageで取得する手法を採用。以下Kibana Guideでサンプル掲載れているdocker-compose.yamlの記載例。
version: '2'
services:
kibana:
image: docker.elastic.co/kibana/kibana:7.17.0
volumes:
- ./kibana.yml:/usr/share/kibana/config/kibana.yml
- 上記、サンプルに対して下記の変更を適用。
- imageは公式のkibanaコンテナを取得する方式としてバージョンをElasticserchと揃えてみる。
- で、volumesでカレントディレクトリのkibana.yamlをマウントしているが、ここでユーザー設定を記載したkibana.yamlをデフォルトのkibana.yamlの配備パスにバインドする処理をしているらしい。
- kibana.yamlに記載するパラメーターの一覧→Configure Kibana
- 上記設定可能なパラメータに
i18n.locale
を発見。このパラメーターはBasic以上のライセンスで設定が可能でこの値に"ja-JP"を設定すれば日本語化できるとの事。- ライセンス体系も調査が必要。
- 特に必須設定のパラメータではなく、kibana.ymlマウントを指定しなければDefault設定が適用されるっぽいので一旦無視(volumes設定を消去)して実行してみる。
- ざっと斜め読みしたがこの他の設定適用方法として、環境変数
KBN_PATH_CONF
にvolumesでマウントさせたkibana.yamlをフルパス指定で定義する等の方法も可能っぽい。 - その他、Elasticserchと連携する上で(必要と思われる)環境変数等を追記してみました。
- 下記yaml内のコメント部分は学習及び備忘として当該記事には記載してますが、実際のyamlではコメントは消去しております。
version: '2'
services:
kibana:
# Elasticserchとバージョンを合わせる
# (dockerhubで存在確認済み。将来的に現行のStableっぽい7.17に変えるかも)
image: docker.elastic.co/kibana/kibana:7.16.3
# 追記01: コンテナ名定義
container_name: kb01
environment:
# 追記2:コピペ(これは要否不明)
SERVER_NAME: kibana.example.org
# 追記3:クラスター起動している筈なのでそれぞれのホスト名で記載。
ELASTICSEARCH_HOSTS: '["http://es01:9200","http://es02:9200","http://es03:9200"]'
# 追記4:これもネットからパクリでdockerで利用の場合はポートをマッピングしないとならない筈。
ports:
- "5601:5601"
# 追記5:network定義。Elasticserchと同じサブネット適用のために必要(になると思う)
networks:
- elastic
上記kibanaのコンテナ設定を、前回検証したElasticsearchクラスター定義のdocker-compose.yamlに追記して再度docker-compose up -d
コマンドで起動し、docker ps
で無事にコンテナが起動した事を確認。
❯❯❯ d ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cadac7c9eb16 docker.elastic.co/elasticsearch/elasticsearch:7.16.3 "/bin/tini -- /usr/l…" 2 minutes ago Up 2 minutes 0.0.0.0:9200->9200/tcp, 9300/tcp es01
83d1eb3f7e71 docker.elastic.co/elasticsearch/elasticsearch:7.16.3 "/bin/tini -- /usr/l…" 2 minutes ago Up 2 minutes 9200/tcp, 9300/tcp es03
2f0e719021b0 docker.elastic.co/elasticsearch/elasticsearch:7.16.3 "/bin/tini -- /usr/l…" 2 minutes ago Up 2 minutes 9200/tcp, 9300/tcp es02
e53fd123aab4 docker.elastic.co/kibana/kibana:7.16.3 "/bin/tini -- /usr/l…" 2 minutes ago Up 2 minutes 0.0.0.0:5601->5601/tcp kb01
上記のdocker ps
戻り値で、kb01がdockerのホスト側5601番ポートにバインドできている事が確認できたのでlocalhost:5601にアクセスして動作確認。上手く動いたのでここまでのdocker-compose.yamlをgithubにPushしていちおう構成管理。
Webで調べた結果(事前の調査ではKibanaのHome画面だった)と異なるが、一応は起動している様子。左の「Add Integrations」ボタンを押下するとこのような画面に切り替わった。
なるほど、わからん…… 正直、機能が盛りだくさんすぎて目が辛い。。。ブラウザバックしてとりあえずGoogle翻訳に掛けて意図を読む事。ふむふむ、、、今度は統合を追加するではなく「自分で探検する」のリンクを押下。
遷移後の画面。当方英語力が弱くカッコつけても始まらない。最初からGoogle翻訳かけたページでダッシュボードに配備されているElasticの機能群の意図を流し読み。
左上の「エンタープライズサーチ」のあたりがElasticserchへのデータI/Oのインターフェース提供かな?管理メニューに「権限の管理する」メニューの存在を確認できた。うん。アクセス制御も可能っぽい。やはり英語よりこの英訳ページと適宜画面を切り替えつつ機能検証を開始しようと思います。
で、注目すべきはこの「サンプルデータを試す」がチュートリアル的な役割を果たすのではないでしょうか?早速ボタン押下。
下記画像はGoogle翻訳済みのページですが、「データを追加するその他の方法」といったページでサンプルデータを元にKibanaを動かすか、独自データをアップロードする選択が出ました。
とりあえず「サンプルデータ」タブの「eコマース注文のサンプル」を試してみる。
どうやらサンプル適用は上手く動いている様子だが、データを追加するっていうよりKibanaのフロントエンドとしての機能紹介っぽいページですね。各種チャートが使えることや検索IFとして利用できるメニューが存在することを確認。
ブラウザバックして今度は「ファイルをアップロードする」タブ側を確認。
どうやらCSV/TSV/JSONをElasticserchにインポートができる旨が記載されている。
この時点でファイル連携できることはクリアしているが、ちょっと手動で取り込むのはイケてないから嫌だなと。。(もう少しイケてる連携方法がありそうな気がする。それがBeatsとかLogstashなのかな?)。
そしてElasticserchの構築時にQuick startページの記事で見たクエリIFの使い方がまるでわからない(と言うかダッシュボードからその画面遷移方法がわからない)よって、ここらで一旦、ネットを検索してた結果、この【初心者向け】Elastic Stackについて知ろうが非常にわかりやすくまとめられておりました(以下、引用です)。
DevTools (Console)
Elasticsearchに対するREST APIを簡単に実行できるUI
私が探していたクエリIFの画面は"Dev Tools(Console)"と言うらしい。Kibanaの左メニューで該当文言を探し、リンク押下で同じ画面か確認した。やっとKibanaのGUIインターフェース上でのI/Oを探し当てたが、動作状況を確認する意味で前回の記事で参照したQuick Startページで'Serch Data'のExampleとして紹介されてたKibana用のクエリ文言(下記のCurlでJSONを送信する文法の省略形みたいな奴)を実行してみる。
GET logs-my_app-default/_search
{
"query": {
"match_all": { }
},
"sort": [
{
"@timestamp": "desc"
}
]
}
以下、実行結果のレスポンスです。(最上段のコメント行でKibanaの設定に関するセキュリティー警告が出てますが、設定周りは一旦無視して)前回実行したCurlコマンドと同じJSONレスポンスを得られました。
だいぶ文章が長くなったので今回はここまで。