【再入門】サクッと作る「Kibanaダッシュボード」

## はじめに
1時間でこんなダッシュボード作ってみたくありませんか？
<img width="700" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/597a8e2a-e8ca-c1aa-c60e-89963ced4c7d.png>

**棒グラフ**、**円グラフ**、**表グラフ**の3つを覚えるだけでできるんです！
<img width="700" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/fde11c32-02ac-081a-d2b6-02b89302d2a5.png>

## 本投稿の内容
Amazon Elasticsearch Service (以降、AES)に取り込んだログを使って
汎用的に使えるKibanaのダッシュボードを作成する方法を紹介します。

どんなログを利用しても同じようなダッシュボードの作成が可能です。

## 利用するデータ
今回利用するログは**Aurora PostgreSQL**の監査ログになります。
以下、利用するログデータのデータ構造になります。

|フィールド (論理名) | フィールド名 (物理名) | 値 (サンプル) | データ型 | Kibanaで利用 |
|---------|---------|---------|---------|---------|
|タイムスタンプ|timestamp|2020-10-19 10:49:24|日付型|◯|
|IPアドレス|ipaddress|172.31.41.200|IP型|◯|
|ポート番号|src_port|44050|文字列型 (keyword)|-|
|ユーザ名|username|postgres|文字列型 (keyword)|◯|
|データベース名|database|postgres|文字列型 (keyword)|◯|
|プロセスID|process_id|27653|文字列型 (keyword)|-|
|ログレベル|log_level|LOG|文字列型 (keyword)|-|
|ログタイプ|log_type|AUDIT|文字列型 (keyword)|-|
|認証タイプ|audit_type|OBJECT|文字列型 (keyword)|-|
|ステートメントID|statement_id|1|文字列型 (keyword)|-|
|サブステートメントID|substatement_id|1|文字列型 (keyword)|-|
|クラス|class|READ|文字列型 (keyword)|-|
|コマンド|command|SELECT|文字列型 (keyword)|◯|
|オブジェクトタイプ|object_type|TABLE|文字列型 (keyword)|-|
|オブジェクト名|object_name|public.tessttable|文字列型 (keyword)|◯|
|クエリ文|statement|select * from testtable;|文字列型 (text)|◯|
|パラメータ|parameter|\<not logged>|文字列型 (keyword)|-|

ログの取り込み方法は、以下を参考にして頂ければと思います。 (多少、オブジェクトの命名が異なります)

**【参考】**
・ [Aurora PostgreSQLの監査ログをAmazon ESに取り込んでみた][00]

## 利用環境
| 項目 | 内容 |
|---------|---------|
| Elasticsearch | 7.9.1 (latest) |
| Kibana | 7.9.1 (latest) |
※投稿時点における最新版を採用しています。

## 実施手順
以下の手順でダッシュボードを作成します。

1. 棒グラフの作成
2. 円グラフの作成
3. 表グラフの作成
4. 検索条件の作成
5. ダッシュボードの作成

### 1. 棒グラフの作成
- Kibanaにログインします。
- [Visualize]で**Create new visualization**をクリックします。

<img width="700" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/c305b701-f010-f1ee-5621-617f25623ac6.png>

- **Vertical Bar**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/9db3829b-1b58-d486-a239-9a1e53431ba5.png)

- PostgreSQLの監査ログが格納されているIndex Patternsを選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/22aa890b-11e1-063d-b01c-75524e39b5f4.png)

- Y軸のラベル名を好きな名前に変更します。 (今回は、ログ件数としています)

<img width="700" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/31f48286-d2cb-e9ff-c845-8aef8236bc2a.png>

- X軸を定義するため、Bucketsを[+Add]で**X-axis**をクリックします。

<img width="700" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/3dcb6919-12c0-e784-527a-19938a56b5b1.png>

- X軸に日付型のフィールドを利用するため、**Data Histogram**を利用して、❶〜❸を指定します。

<img width="700" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/b7545720-f677-14fc-8159-2674105275d8.png>

- [Panel settings]で**Show X-axis lines**をオンにします。 (少しだけイケてる感じにします)
- 下部の[Update]をクリックし、設定をグラフに反映させます。

<img width="700" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/fb6ec6ad-9bae-429c-20ab-11d6605f917f.png>

- 棒グラフが表示されれば完了です。上部の[Save]ボタンをクリックして保存します。

<img width="700" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/fc527f55-294e-96fb-524d-15653421b623.png>

- 好きな名前をつけて保存します。(今回は、**PostgreSQL_AuditLog_VarChart**としています)

<img width="700" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/f74c9624-7f95-45ab-3b4b-36ea60d42389.png>

### 2. 円グラフの作成
- 次は**Pie**をクリックし、円グラフを作成します。

<img width="700" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/41c82a49-213b-205e-dc77-eecbff73da86.png>

- Index Patternsは先程の棒グラフと同様PostgreSQLの監査ログの入っているものを選択します。
- 凡例のラベル名を好きな名前に変更します。 (今回は、ログ件数としています)

<img width="700" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/8847109b-ee81-372a-e15f-417d8509b5d9.png>

- 円グラフの内訳を定義するため、Bucketsを[+Add]で**Split slices**をクリックします。

<img width="500" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/cb447c86-8545-d9af-fd34-2c39a244466d.png>

- usernameフィールドの上位10件+それ以外を「その他」として表示させるため、❶〜❼を実施します。

<img width="700" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/c364d7cc-2f13-4ea7-53d4-27621107026b.png>

- 円グラフが表示されれば完了です。上部の[Save]ボタンをクリックして保存します。

<img width="700" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/aaf2b3e8-863f-5aaf-a16b-5312b6e318de.png>

- 好きな名前をつけて保存します。(今回は、**PostgreSQL_AuditLog_Pie_Username**としています)

<img width="600" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/1853d340-163a-c15d-0bc0-05ebb857a831.png>

- 上記の方法で以下の円グラフも作成します。(グラフごとの違いだけをまとめています)

| # | Field (利用するフィールド) | Custom label | Title (グラフ名) |
|---------|---------|---------|---------|
|1|ipaddress|送信元IPアドレス|PostgreSQL_AuditLog_Pie_IPAddress|
|2|database|データベース名|PostgreSQL_AuditLog_Pie_Database|
|3|command|SQL種別|PostgreSQL_AuditLog_Pie_Command|
|4|object_name|テーブル名|PostgreSQL_AuditLog_Pie_ObjectName|

### 3. 表グラフの作成
- 次は**Data Teble**をクリックし、表グラフを作成します。

<img width="700" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/99e07555-de2b-a21b-0560-abd7f996c878.png>

- Index Patternsは先程の棒グラフと同様PostgreSQLの監査ログの入っているものを選択します。
- 凡例のラベル名を好きな名前に変更します。 (今回は、ログ件数としています)

<img width="700" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/5a8486cd-10f5-1fd0-f192-73fe3fa114e1.png>

- 表グラフの内訳を定義するため、Bucketsを[+Add]で**Split rows**をクリックします。

<img width="600" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/9636b3c2-2194-155d-f472-093348fbd310.png>

- usernameフィールドの上位10件+それ以外を「その他」として表示させるため、❶〜❼を実施します。

<img width="600" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/9ddd55b7-ffcc-56d0-af6d-16d4435b8499.png>

- 11位以下をその他として表示するため、❶と❷を設定し、[Update]をクリックします。

<img width="600" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/fbbe7ad6-54ca-d167-8a75-35ba402836b8.png>

- 表グラフが表示されれば完了です。上部の[Save]ボタンをクリックして保存します。

<img width="700" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/edb3b1cd-5a05-7532-baf5-4a8d53f97b06.png>

- 好きな名前をつけて保存します。(今回は、**PostgreSQL_AuditLog_DataTable_Username**としています)

<img width="600" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/0adf4cd3-1a04-d6b2-52ce-df07e087a77c.png>

- 上記の方法で以下の表グラフも作成します。(グラフごとの違いだけをまとめています)

| # | Field (利用するフィールド) | Custom label | Title (グラフ名) |
|---------|---------|---------|---------|
|1|ipaddress|送信元IPアドレス|PostgreSQL_AuditLog_DataTable_IPAddress|
|2|database|データベース名|PostgreSQL_AuditLog_DataTable_Database|
|3|command|SQL種別|PostgreSQL_AuditLog_DataTable_Command|
|4|object_name|テーブル名|PostgreSQL_AuditLog_DataTable_ObjectName|

### 4. 検索条件の作成
- 最後に少しグラフとは異なりますが、[Discover]を使って検索条件を作成します。 
- [Discover]に移動し、**Available fields**から下記フィールドで[add]をします。

1. ipaddress
2. database
3. command
4. object_name
5. statement
6. username

<img width="600" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/3c364bfb-0853-0899-d805-1b1a014aad76.png>

- **Selected fields**に上記フィールドがあることを確認し、❷の並びに表示を並び替えます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/aea89056-11e1-47c9-0ef0-1abd2cd0b547.png)

- 好きな名前をつけて保存します。(今回は、**PostgreSQL_AuditLog_Search**としています)

<img width="600" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/585c69ea-38bf-7445-3aa0-5a7745f26e3f.png>

### 5. ダッシュボードの作成
- [Dashboard]で**Create new dashboard**をクリックします。

<img width="600" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/7571d53c-21bc-6e87-7b05-c53ecd8003b6.png>

- **Add an existing**をクリックし、ここまで作成してきたアイテムを利用します。

<img width="600" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/1bef4f3b-70cb-3ae5-908e-ffb38ff451af.png>

- PostgreSQL _AutidLogから始まるアイテムを全てダッシュボードに追加します。

<img width="600" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/f8c00440-aeb1-bfb1-e8bb-3b12832a46d6.png>

- 棒グラフ、円グラフ、表グラフ、検索条件の順に上から整頓して配置します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/a39a37aa-4026-345d-b1e7-df744fcddba6.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/51b77241-5f89-7b05-e380-88acc2bade92.png)

- プロットしたグラフ(ここではパネル)の右上のボタンをクリックし、**Edit panel title**を選択します。

<img width="600" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/9ef671a2-a869-8f7d-a111-57886ce50577.png>

- 分かりやすいグラフの名前をつけて保存します。

<img width="600" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/017d65b2-2775-57d2-f60a-e12cd86706d2.png>

- 今回のダッシュボードでは下記のようにパネル名を変更しています。

| # | Title (グラフ名) | Panel title (パネル名) |
|---------|---------|---------|
|1|PostgreSQL_AuditLog_VarChart|ログ件数推移|
|2|PostgreSQL_AuditLog_Pie_Username|ユーザ名_割合|
|3|PostgreSQL_AuditLog_Pie_IPAddress|送信元IPアドレス_割合|
|4|PostgreSQL_AuditLog_Pie_Database|データベース名_割合|
|5|PostgreSQL_AuditLog_Pie_ObjectName|テーブル名_割合|
|6|PostgreSQL_AuditLog_Pie_Command|SQL種別_割合|
|7|PostgreSQL_AuditLog_DataTable_Username|ユーザ名_Top10|
|8|PostgreSQL_AuditLog_DataTable_IPAddress|送信元IPアドレス_Top10|
|9|PostgreSQL_AuditLog_DataTable_Database|データベース名_Top10|
|10|PostgreSQL_AuditLog_DataTable_ObjectName|テーブル名_Top10|
|11|PostgreSQL_AuditLog_DataTable_Command|SQL種別_Top10|
|12|PostgreSQL_AuditLog_PostgreSQL_AuditLog_Search|ログ一覧|

- 上部の[Save]ボタンをクリックして保存します。

<img width="600" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/0f9e3d9d-55ae-e64a-72b9-bda1ba4de154.png>

- 好きな名前をつけて保存します。(今回は、**PostgreSQL_AuditLog_Dashboard**としています)

<img width="600" alt=image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/9188b15d-a702-0d6b-e252-fbbaa01061d3.png>

## まとめ
さて、いかがでしたでしょうか？

このようなダッシュボードを作成しておくとそれぞれのパネルで絞り込みたい項目で
[+]や[-]を使ってフィルタするとその条件に合わせて、ダッシュボードの内容が瞬時に再検索がかかります。
これがKibanaの優位性の１つだと私は思っています^^

<img width="400" image.png src=https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/211371/ad9a4d50-8b8b-e8a6-eda9-3d809f18b70e.png>

皆様もぜひ、試して頂けると幸いです！

基本ができたら、次はヒートマップや地図グラフ、TSVBなどの
高度なVisualizaionを使っていくのが良いと思っています^^

[00]:https://qiita.com/hssh2_bin/items/051a9aa079f29f972ebb "Aurora PostgreSQLの監査ログをAmazon ESに取り込んでみた"