Kibanaでログ検索・可視化をするために最低限必要な知識と技

# はじめに
Kibanaでログ検索・可視化をする上で最低限知っておいた方がよいと思われる、知識と操作方法をまとめています。
「説明→画面キャプチャ」の順で記載していますので、文章とその下の図をセットで見ながら読み進めていただければと思います。

本記事はElasticsearch社が提供しているデモサイトのKibana 7.4.2を用いて作成しています。
https://demo.elastic.co/

# デモサイトにアクセス
ブラウザで以下のURLにアクセスするだけでKibanaを使用できます。
https://demo.elastic.co/

画面左側の複数のアイコンは、ログ検索やログ可視化、Kibanaの設定などのアイコンです。
この中から最低限知っておいた方が良い部分のみ、本記事にまとめています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/89c2bcfd-5d90-c2f5-1519-bb1498a7c4a2.png)

# ログ検索画面
## 画面の説明
画面左側のコンパスのようなマーク[Discover]を選択するとログ検索画面が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/a5f32737-6b65-0f75-8d5d-03e031eefa0a.png)

画面は大きく4つにわかれています。
上が検索条件指定部分、左はログのフィールド情報、中央がログ件数のグラフ、下が実際のログです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/6bf0cce1-f4d8-0e9c-11bd-c7f3e4df2120.png)

この画面に表示されているログは[filebeat-\*]の[Last 15 minutes]のログです。

[filebeat-\*]はインデックスパターンと呼ばれるもので、Elasticsearchに保存されているどのインデックスを検索対象とするか指定する部分です。ワイルドカードも使えます。

[Last 15 minutes]というのはログの表示範囲です。
[Last 15 minutes]の場合は「現在-15分 〜 現在」までの範囲でログが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/ecd0df4f-4c68-5e8e-d34c-5d49bce2a519.png)

ログの表示範囲を変更したい場合は画面上のカレンダーのボタンを選択すると、変更が可能になります。

[Refresh every]の部分では画面のリフレッシュタイミングを指定できます。
デフォルトでは[0 seconds]となっていますのでリフレッシュはされません。
Elasticsearchにログがストリーミングで取り込まれている場合は、この部分を指定することで常に新しいログを表示することができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/31768e62-a533-c96f-fba6-86346e403a94.png)

指定したフィールドだけを画面に表示したい場合は、画面左のフィールド一覧が表示されている部分にマウスカーソルを持っていきます。
Addと表示されますのでAddを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/156b188d-0b8b-78c0-6882-6b71fa314792.png)

すると選択したフィールドだけが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/780947bc-36c4-46cc-b270-5c032d29e0b8.png)

removeを選択すると元に戻すことができます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/289d7993-4850-df71-698b-9c61e7dcb79b.png)

## ログ検索
ログ検索をするための条件指定方法は大きく3種類あります。
例として「container.labels.io_confluent_docker:」が「true」のものを検索してみます。

### 検索方法1
画面上に直接検索条件を入力する方法です。
`container.labels.io_confluent_docker:"true"`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/9c77721c-59e1-9700-4c48-b5e088801696.png)

以下のOn, Offを選択することで、KQL（Kibana Query Language）とLuceneという表記方法の2つから選択が可能です。
どちらも基本的には以下のような直感的な記載で検索することが可能です。
`（フィールド名:検索したいワード OR フィールド名:検索したいワード） AND フィールド名:検索したいワード`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/9ba544b9-54db-08f6-a032-a0fea51330e8.png)

### 検索方法2
[Add filter]を利用する方法です。
[Field],[Operator],[Value]の3つを入力して[Save]を選択するだけです。

[Field]には検索対象のフィールド名を入力してください。

[Operator]は検索条件を指定する部分です。
isを選択するとAND条件、is notを選択するとAND NOT条件、is one ofを選択するとOR条件、existsを選択するとフィールドに何らかの値が入っているもののみ表示、となります。

[Value]には検索したい文字を入力してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/00d4f01f-5d67-483a-5080-b21e169b0f39.png)

Saveされると以下のように検索条件が登録されます。

条件を選択すると以下の操作が可能になります。
[Edit filter]は条件を編集する機能です。
[Exclude results]は条件がANDであればAND NOTにする機能です。
[Temporarily disable]は一時的に条件を無効にする機能です。
[Delete]は条件を削除します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/080e6cd1-1de3-0b5d-f1c5-ae8a36aab434.png)

### 検索方法3
ログから条件を追加する方法です。
ログの左側に表示されている三角ボタンを選択するとログの詳細が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/98d3b6bf-3535-9c77-4897-2129e477ce9b.png)

条件を指定したいフィールドの左側にマウスカーソルを移動してください。
プラスやマイナスのマークが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/4289b88d-9808-7593-c861-670ae0b240ed.png)

プラスマークを押すと現在表示しているログのフィールドと一致するものが検索条件に指定されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/a6d51781-ec2d-5087-b59d-585f82e42880.png)

## 検索条件の保存
デモサイトでは保存ができませんが、自分で構築したKibanaの場合は画面左上に[Save]ボタンが表示されますので、そこから名前をつけて保存ができます。

## 検索結果のエクスポート
検索条件を保存したのち、[Share] -> [CSV Reports]の順で選択すると検索結果をエクスポートすることが可能です。
なおエクスポートの前には検索条件を保存することが必須なので、デモサイトではエクスポートができません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/d51223d4-a798-95f5-63ac-7f1e8519a0a2.png)

## クエリの表示
KibanaがElasticsearchに向けて発行しているクエリを表示することが可能です。
[Inspect] -> [Request]の順で選択するだけです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/7f84fff2-0f7c-b877-7799-44a930d5ff2b.png)

# ログ可視化
## 画面の説明
画面左側のグラフのマークを選択するとログ可視化の画面が表示されます。
最初に表示される画面は現在保存されているログ可視化画面ですので、[Create new visualization]を選択してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/f24e0c20-b565-3fa1-621b-5f66e73c1257.png)

次に表示される画面で、どのような可視化をするか選択します。
棒グラフ、線グラフ、テーブル表示、などの機能がありますが、基本的には1つの使い方を覚えれば他にも応用できますので、今回は棒グラフを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/6e36eeb1-aded-d5fc-599d-cc802d3650d3.png)

次に表示される画面で、データソース（Elasticsearchに保存されているログのインデックス）を指定します。
今回は[packetbeat-\*]を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/6352c771-6ae2-a98b-dd2a-b054448c6e99.png)

次に表示される画面で可視化の詳細設定をします。
画面上で検索条件を指定できます。検索条件に合致したもののみ可視化の対象とすることができます。
画面左は可視化の詳細設定部分です。このあと説明します。
画面右は可視化された結果が表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/6587270a-81c9-72b3-4fdf-b9443ba7fae2.png)

### ログ可視化1
それではここから、過去30日の送信元IPアドレス（source.ip）の件数上位5件を表示したいと思います。
まず[Buckets]の下の[Add]から[Split series]を選択してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/a04db777-e712-4b7c-35f4-6cd2aee16ea7.png)

[Last 30 days]を選択し、Aggregationで[Terms]、Fieldで[source.ip]、Sizeで[5]（デフォルト）を入力後、三角ボタンを押してください。

Aggregationはログをどのように分割するかを指定します。TermsとはFieldで指定された単位で分割するというものです。
Fieldは分割するためのフィールドを指定します。
Sizeは何件を表示するかを決める部分です。

すると以下のようなグラフが表示されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/51bd8069-24c3-dedd-cb0c-e734469d167d.png)

### ログ可視化2
次に、ログ可視化1で可視化したグラフをさらに分割したいと思います。
今回は送信先ポート番号でさらに分割します。
まず、画面下の[Add]から[Split series]を選択してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/7170e9e0-f9fb-cb0a-038c-9ac91514399c.png)

Aggregationで[Terms]、Fieldで[destination.port]、Sizeで[3]を入力後、三角ボタンを押してください。
すると以下のようなグラフが表示されます。
IPアドレスごとにポート番号が分割されています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/80d48456-1f12-01d5-eb91-9e9abefa6765.png)

### ログ可視化3
グラフは好みがあると思いますので、様々な設定でどのように表示されるかまとめました。

ログ可視化1で可視化したグラフに対して以下の設定をした結果。

* Add -> X-axis
* Sub aggregationで[Terms]
* Fieldで[destination.port]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/ec18f4d0-0ed6-6c57-8932-5a39e496a96a.png)

ログ可視化1で可視化したグラフに対して以下の設定をした結果。

* Add -> Split chart -> Rows
* Sub aggregationで[Terms]
* Fieldで[destination.port]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/abb6d724-16ef-6528-0232-f9035bd61075.png)

ログ可視化1で可視化したグラフに対して以下の設定をした結果。

* Add -> Split chart -> Columns
* Sub aggregationで[Terms]
* Fieldで[destination.port]

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/0e282fa1-4cb1-0c6a-e799-3828fb4219ff.png)

## 検索条件の保存
デモサイトでは保存ができませんが、自分で構築したKibanaの場合は画面左上に[Save]ボタンが表示されますので、そこから名前をつけて保存ができます。

## 検索結果のエクスポート
検索条件を保存したのち、[Share] -> [PDF Reports]（または[PNG Reports]）の順で選択すると検索結果をエクスポートすることが可能です。
なおエクスポートの前には検索条件を保存することが必須なので、デモサイトではエクスポートができません。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/b79eceec-e532-bfda-8a8a-120705f8e7eb.png)

# ダッシュボート
画面左の赤枠のボタンを選択するとダッシュボード画面が表示されます。
ダッシュボード画面ではログ検索やログ可視化で保存した条件を組み合わせて可視化することができます。
なおデモサイトではダッシュボード作成はできませんでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/d236481e-6221-32ae-9342-c36f69f37ca5.png)

# その他
## インデックスパターン
Kibanaで可視化を行うためには最初にインデックスパターンを作成する必要があります。
インデックスパターンとは、Elasticsearchに保存されているインデックス（DBでいうテーブルのようなもの）名のようなものです。
例えば以下のように日毎にログ取り込み先のインデックス名を分けて、Elasticsearchにログを取り込んでいる場合があったとします。

* filebeat-2019.10.01
* filebeat-2019.10.02
* filebeat-2019.10.03
* filebeat-2019.10.04
* filebeat-2019.10.05

上記のログを検索対象にするためには以下のようなインデックスパターンを作成する必要があります。

1. filebeat-2019.10.*
2. filebeat-2019.*
3. filebeat-*
4. \*

1の場合は2019年10月分のログだけが検索でき、2の場合は2019年分のログが検索でき、3の場合はfilebeat全部のログが検索でき、4の場合はElasticsearchに取り込まれている全てのログが検索できるようになります。

4のインデックスパターンを1つ作成すれば、他のインデックスパターンを作成しなくても全てのログが検索可能になるので便利なようにも思えますが、検索対象が広がるため検索時間がかかりますし、ログを可視化する際にログ種別を絞り込む条件を追加するなど面倒なこともあります。
そのため自身の検索内容にあわせてインデックスパターンを作成することが望まれます。

なおインデックスパターンの作成は、画面左の歯車マークを選択し、Index Managementを選択して表示された画面で作成します。デモサイトではインデックスパターンの作成はできませんでした。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/402872/89322bdf-5b78-7707-285f-5b27a06db818.png)