はじめに
棒グラフ、円グラフ、表グラフの3つを覚えるだけでできるんです!
本投稿の内容
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に取り込んでみた
利用環境
項目 | 内容 |
---|---|
Elasticsearch | 7.9.1 (latest) |
Kibana | 7.9.1 (latest) |
※投稿時点における最新版を採用しています。 |
実施手順
以下の手順でダッシュボードを作成します。
- 棒グラフの作成
- 円グラフの作成
- 表グラフの作成
- 検索条件の作成
- ダッシュボードの作成
1. 棒グラフの作成
- Kibanaにログインします。
- [Visualize]でCreate new visualizationをクリックします。

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

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

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

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

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

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

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

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

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

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

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

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

- 上記の方法で以下の円グラフも作成します。(グラフごとの違いだけをまとめています)
# | 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をクリックし、表グラフを作成します。

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

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

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

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

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

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

- 上記の方法で以下の表グラフも作成します。(グラフごとの違いだけをまとめています)
# | 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]をします。
- ipaddress
- database
- command
- object_name
- statement
- username

- Selected fieldsに上記フィールドがあることを確認し、❷の並びに表示を並び替えます。
- 好きな名前をつけて保存します。(今回は、PostgreSQL_AuditLog_Searchとしています)

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

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

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

- 棒グラフ、円グラフ、表グラフ、検索条件の順に上から整頓して配置します。
- プロットしたグラフ(ここではパネル)の右上のボタンをクリックし、Edit panel titleを選択します。

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

- 今回のダッシュボードでは下記のようにパネル名を変更しています。
# | 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]ボタンをクリックして保存します。

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

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

皆様もぜひ、試して頂けると幸いです!
基本ができたら、次はヒートマップや地図グラフ、TSVBなどの
高度なVisualizaionを使っていくのが良いと思っています^^