👋

ELK Stackを触ってみよう!((02)Kibanaのインストール)

2021/11/13に公開

前回の続き

前回はElasticSearchをインストールしたので、続いてkibanaをインストールしていきます。

kibanaのインストール

リポジトリの登録

本記事では、ElasticSearchとKibanaを別OSにインストールしているので、リポジトリの登録が必要になりますが、同じOSにインストールしている場合は不要です。
私は、通信パケットを確認したいので、別OSにインストールしています。

CentOS(Kibana)
sudo vi /etc/yum.repos.d/elasticsearch.repo
elasticsearch.repo
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

パッケージのインストール

前回記載し忘れていましたが、ELK Stackの場合、バージョンを指定しないと最新バージョンがインストールされてしまいます。
更新頻度は非常に速いことに加え、マイナーバージョンアップでも結構設定やGUIが変わるので、検証を行ったバージョンで絞った方がいいですよ!

CentOS(Kibana)
sudo yum update -y
sudo yum install -y java-11-openjdk-devel
yum install kibana-7.14.1 -y

設定ファイルの編集

デフォルトは英語なので、日本語化した設定ファイルを掲載します。
ポイントは、
31行目で「elasticsearch.hosts: ["http://192.168.151.131:9200"]」と、ElasticSearchのURLを設定すること
121行目に「i18n.locale: "ja-JP"」を入力して日本語化すること
の2点ですね。

CentOS(/etc/elasticsearch/elasticsearch.yml)
# Kibanaは、バックエンドサーバーによって提供されます。
# この設定では、使用するポートを指定します。
server.port: 5601

# Kibanaサーバーがバインドするアドレスを指定します。
# IPアドレスとホスト名はどちらも有効な値です。
# デフォルトは'localhost'ですが, これは通常リモートマシンが接続できないことを意味します。
# リモートユーザからの接続を許可するには, このパラメータにループバックでないアドレスを設定してください。
server.host: "0.0.0.0"

# プロキシ経由で運用している場合に、Kibanaをマウントするパスを指定できるようにします。
# Kibanaが受信したリクエストからbasePathを削除するかどうか、起動時の非推奨警告を防ぐには、
# `server.rewriteBasePath`設定を使用します。
# この設定は、スラッシュで終わることはできません。
#server.basePath: ""

# Kibana が `server.basePath` をプレフィックスとするリクエストを書き換えるか、リバースプロキシによる 
# 書き換えを要求するかを指定します。
# この設定は Kibana 6.3 以前は常に `false` でしたが、Kibana 7.0 からは 
# デフォルトで `true` になります。
#server.rewriteBasePath: false

# 受信するサーバーリクエストの最大ペイロードサイズをバイト単位で指定します。
#server.maxPayloadBytes: 1048576

# Kibanaサーバーの名前です。 
# これは表示のために使用されます。
server.name: "localhost"

# すべてのクエリに使用するElasticsearchインスタンスのURLです。
elasticsearch.hosts: ["http://192.168.151.131:9200"]

# この設定の値が true の場合、Kibana は server.host 設定で指定されたホスト名を使用します。
# この設定の値が false の場合、Kibana はこの Kibana インスタンスに接続しているホストの
# ホスト名を使用します。
#elasticsearch.preserveHost: true

# Kibana は Elasticsearch のインデックスを使用して、保存された検索、
# ビジュアライゼーション、ダッシュボードを保存します。
# Kibana は、インデックスがまだ存在していない場合、新しいインデックスを作成します。
kibana.index: ".kibana"

# ロードするデフォルトのアプリケーションです。
#kibana.defaultAppId: "home"

# Elasticsearch が基本認証で保護されている場合、これらの設定は、Kibana サーバーが起動時に 
# Kibana インデックスのメンテナンスを実行するために使用するユーザー名とパスワードを提供します。
# Kibanaユーザーは、Kibanaサーバーを介してプロキシされるElasticsearchで認証する必要があります。
#elasticsearch.username: "kibana"
#elasticsearch.password: "pass"

# SSLを有効にし、PEM形式のSSL証明書とSSL鍵ファイルへのパスをそれぞれ設定します。
# これらの設定により、Kibanaサーバからブラウザへの送信リクエストに対してSSLが有効になります。
#server.ssl.enabled: false
#server.ssl.certificate: /path/to/your/server.crt
#server.ssl.key: /path/to/your/server.key

# PEM形式のSSL証明書と鍵ファイルのパスを指定するオプション設定です。
# これらのファイルは、Elasticsearchに対するKibanaのアイデンティティを確認するために使用され、
# Elasticsearchのxpack.security.http.ssl.client_authenticationがrequiredに設定されている場合に必要となります。
#elasticsearch.ssl.certificate: /path/to/your/client.crt
#elasticsearch.ssl.key: /path/to/your/client.key

# Elasticsearchインスタンスの認証局のPEMファイルへのパスを指定できるオプション設定です。
#elasticsearch.ssl.certificateAuthorities: [ "/path/to/your/CA.pem" ]

# SSL証明書の有効性を無視するには、この設定値を「none」に変更してください。
#elasticsearch.ssl.verificationMode: full

# ElasticsearchがPingに応答するのを待つ時間をミリ秒単位で指定します。
# デフォルトは elasticsearch.requestTimeout 設定の値です。
#elasticsearch.pingTimeout: 1500

# バックエンドまたはElasticsearchからの応答を待つ時間をミリ秒単位で指定します。
# この値は正の整数でなければなりません。
#elasticsearch.requestTimeout: 30000

# Elasticsearchに送信するKibanaクライアント側ヘッダーのリスト。
# クライアント側のヘッダーを送信しない場合は、この値を[](空のリスト)に設定します。
#elasticsearch.requestHeadersWhitelist: [ authorization ]

# Elasticsearch に送信されるヘッダー名と値です。
# カスタムヘッダは、elasticsearch.requestHeadersWhitelistの設定に関わらず、
# クライアント側のヘッダで上書きすることはできません。
#elasticsearch.customHeaders: {}

# Elasticsearchがシャードからの応答を待つ時間をミリ秒で指定します。
# 0に設定すると無効になります。
#elasticsearch.shardTimeout: 30000

# Kibana起動時にElasticsearchが再試行するまでの待ち時間(ミリ秒)。
#elasticsearch.startupTimeout: 5000

# Elasticsearchに送信されたクエリをログに記録します。
# logging.verboseをtrueに設定する必要があります。
#elasticsearch.logQueries: false

# KibanaがプロセスIDファイルを作成するパスを指定します。
#pid.file: /var/run/kibana.pid

# Kibanaがログ出力を保存するファイルを指定することができます。
#logging.dest: stdout

# この設定の値をtrueにすると、すべてのログ出力が抑制されます。
#logging.silent: false

# この設定値をtrueにすると、エラーメッセージ以外のすべてのログ出力が抑制されます。
#logging.quiet: false

# この設定値をtrueに設定すると、システム使用情報やすべてのリクエストを含む
# すべてのイベントが記録されます。
#logging.verbose: false

# システムやプロセスのパフォーマンスメトリクスをサンプリングする間隔をミリ秒単位で設定します。
# 最小値は100msです。
# デフォルトは5000です。
#ops.interval: 5000

# ローカライズ可能な全ての文字列、日付、数値フォーマットに使用されるロケールを指定します。
# サポートされている言語は以下の通りです: 英語 - en , デフォルト , 中国語 - zh-CN .
i18n.locale: "ja-JP"

プロセスの起動

CentOS(Kibana)
systemctl start kibana
systemctl status kibana

起動ログの確認

エラーが出ていないことを確認。
"Kibana is now available (was unavailable)"というメッセージを確認できればOKです!

CentOS(/var/log/kibana/kibana.log)
{"type":"log","@timestamp":"2021-11-13T03:29:19-05:00","tags":["info","http","server","Kibana"],"pid":3049,"message":"http server running at http://0.0.0.0:5601"}
{"type":"log","@timestamp":"2021-11-13T03:29:19-05:00","tags":["info","plugins","monitoring","monitoring","kibana-monitoring"],"pid":3049,"message":"Starting monitoring stats collection"}
{"type":"log","@timestamp":"2021-11-13T03:29:19-05:00","tags":["info","plugins","securitySolution"],"pid":3049,"message":"Dependent plugin setup complete - Starting ManifestTask"}
{"type":"log","@timestamp":"2021-11-13T03:29:20-05:00","tags":["info","status"],"pid":3049,"message":"Kibana is now unavailable"}
{"type":"log","@timestamp":"2021-11-13T03:29:20-05:00","tags":["info","plugins","reporting"],"pid":3049,"message":"Browser executable: /usr/share/kibana/x-pack/plugins/reporting/chromium/headless_shell-linux_x64/headless_shell"}
{"type":"log","@timestamp":"2021-11-13T03:29:20-05:00","tags":["warning","plugins","reporting"],"pid":3049,"message":"Enabling the Chromium sandbox provides an additional layer of protection."}
{"type":"log","@timestamp":"2021-11-13T03:29:23-05:00","tags":["info","status"],"pid":3049,"message":"Kibana is now available (was unavailable)"}

接続確認

クライアントOSからWebブラウザを起動して、「http://192.168.151.132:5601」にアクセスすると下記の表示がされます。
(右下の警告は無視して構いません)

kibanaの使い方は、メトリックを収集した後に、解説していきますね。

補足(人によっては重要?)

私が初めてKibanaを触ったときは、WebのGUIが表示されませんでした。
/var/log/kibana/kibana.logを確認すれば、原因がkibanaにあるものはわかるのですが
① Firewallの設定が許可されていない
② ウェブブラウザの広告表示をブロックする設定にしている
が原因というのは少し、ハマりどころでした…
①はともかく、②に行き着くのは相当苦労した記憶がありますので、ご参考まで、、、

正常に動作していることを確認できました!
次回はkibanaのインストールを行っていきます。

パケット調査(興味のある人だけ♪)

ネットワーク&セキュリティ好きな者として、kibanaをインストールした後で流れるパケットは見ておきたいところです。

ElasticSearch - Kibana間のパケットサンプル

Kibana_ElasticSearch_Packet_HTTP.pcapの部分キャプチャ

Kibana - クライアント間のパケットサンプル

client_Kibana_Packet_HTTP.pcapの部分キャプチャ

キャプチャファイルはgitで共有します

上記キャプチャ画面の生ログは下記gitに公開いたしました。
https://github.com/wakaprings/wireshark_zenn02.git

HTTP通信だと通信内容が丸見えだということをご確認いただけると思いますので、Wiresharkなどでご参照ください。
この程度であれば、大したことありませんが、filebeatで監査ログなんかを平文で流した日には「事故案件」ですね!
HTTPSにするか、IPsecなどで通信を暗号化すれば、ある程度は安全ということがわかると思います。
(機械学習の進化やスペックの進化の激しいこのご時世、暗号化したから安全であるなどと決して言えませんけどね)

Discussion