Databricks SystemTableのデータを使って監査ログやBillingデータを分析


# はじめに

[前回の記事](https://qiita.com/maroon-db/items/b89d47009948206ac064)でUnityCatalogの新機能である SystemTableの機能や有効化する方法をご紹介いたしました。今回はそのデータを使って可視化・分析していきたいと思います。

分析するのにすでに便利なノートブックが用意されておりますので、こちらを利用してご紹介していきます。

https://www.dbdemos.ai/demo.html?demoName=uc-04-system-tables

# セットアップ

上記のサンプルノートブックをセットするために、以下を実行してください。

```
%pip install dbdemos
import dbdemos
dbdemos.install('uc-04-system-tables')
```

こちらを実行すると、以下のように必要なノートブックやダッシュボード、データを取得するジョブ、クラスターが作成作成されます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/24932586-ced5-a340-5d9e-cef0d6a95023.png)

ちなみに新規のクラスターを作成したくない場合は、以下のようにするといいようです。（[参考記事](https://qiita.com/manabian/items/aa28f48da5062cb64f43)@manabian)
```
dbdemos.install(
    'uc-04-system-tables',
    start_cluster = False,
    use_current_cluster = True
)
```

# Billing Table 

`system.billing.usage` のテーブルには、すべてのワークスペースの課金ログが収集されております。それでは、Billing Tableから見ていきましょう。作成されたノートブックのうち、`01-blling-tables`のフォルダーを01から実行していきます。

Notebookの中に以下のような注意事項がありました。

:::note
価格表に関する注意
価格テーブル（各SKUの$単位の価格情報を含む）は、別のシステムテーブルとしてすぐに利用できるようになる予定です。

その間、ヘルパー関数を使って価格データを挿入しています。このテーブルと以下のクエリはあくまで教育的なものとお考えください。より正確な情報については、契約書を確認してください。
:::

どういうことかというと、DBU(Databricks Units)という単位から価格を計算する際に、SKU単位での単価をかける必要があるのですが、価格の単価テーブルがまだ用意されていないので、今回作成して挿入しているという事で、実際に `%run ../_resources/00-setup` を実行していますが、この 00-setup内に各単価が記載されており、単価テーブルを作成しておりましたので、ご興味がある方はチェックしてみてください。

最初のノートブックは、実際にJobsやAll PurposeなどSKU毎の検索例などがいくつか載っております。利用方法などをチェックするのに参考になります。

**JOBの使用量を確認**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/7c88faba-1207-62b9-61cb-8c310ee78739.png)

**ML(Prophet)を活用した請求予測**
`02-forecast-billing-tables` のノートブックは、MLを活用した請求予測をするノートブックです。以下のイメージ図のように、SKUとWorkspace毎にDailyの使用量を計算して、その時系列データを元に、MLモデルで今後の使用量を予測するというものです。
<img src="https://github.com/databricks-demos/dbdemos-resources/blob/main/images/product/uc/system_tables/uc-system-tables-flow.png?raw=true" width="800px">

例えば以下のような結果が確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/87af6b79-0d34-6c99-d081-2c7f83f99b1a.png)


**Workflow Job**(`dbdemos_billing_forecast_init_・・・`)としてこのノートブックが登録されているので、Jobをスケジュール実行して、毎日実行するように設定するだけで、予測を日々更新してくれます。

ノートブックをすべて実行すると、上記予測を含めたデータテーブルが作成され、ダッシュボードから確認することができます。ダッシュボードは、dbdemosをセットアップ時に一緒に作成されております。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/4989c254-7895-2747-ef2a-6c6cd47c0e01.png)


# 監査ログ

DatabricksはLakehouse全体のすべての操作を追跡します。これはガバナンスやLakehouseの利用状況を分析する上で重要です。

これは、`system.access.audit`テーブルによって可能になります。

このテーブルには以下のような質問に答えるための全ての情報が含まれています：

- アカウントとワークスペースで実行されたすべての操作
- Unityカタログオブジェクトに対して実行された操作
- 誰が何にアクセスしているか
- いつ誰がテーブルを削除したか
- 重要なテーブルへのアクセスを監視
- ...

`02-audit-log` ノートブックを実行してみてください。以下のような例が確認できます。

**Unity Catalogへのアクセスリスト**
いつ、誰が、どのテーブルにアクセスしたかわかります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/9005948c-7872-44bf-528c-82f74a42751f.png)

**Permision変更履歴**
いつ、誰がどのような権限変更をしたか確認できます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/d50f4241-2e14-0dcd-779a-71ad8456cdb3.png)

:::note
Notebook内のcmd7,8のセルで、 created_at というカラムがないとエラーになりましたが、event_time に修正して実行しました
:::

**ユーザー数**
DailyとMonthlyのアクティブユーザー数の確認
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/fa9a4fc9-c824-f8c7-0e02-662327710d54.png)



# リネージ情報

`system.access.table_lineage`と`system.access.column_lineage` テーブルにデータが格納されております。

リネージテーブルを使用すると、データ資産のすべてのリネージを追跡および監視できます。

テーブルとカラムのレベルで追跡し、依存関係を見つけ、ワークフロー、SQLクエリ、ダッシュボード、ノートブックなど、テーブルが何を使用しているかを理解することができます。

この情報はデータエクスプローラーUIで直接利用できますが、自動分析を簡単にするためにシステムテーブルとして保存することもできます。

例えば、table_lineageテーブルには以下のような情報が入ってます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/fe74354a-bf26-c140-c23a-6bd50ab29424.png)


# ダッシュボード

今回のdbdemos(uc-04-system-tables)をインストールすると、ダッシュボードも作成されます。どのような情報が確認出来るかみてみましょう。

日付やワークスペースでフィルタリング出来るようになっており、月々の使用量や来月などの予想まで出してくれます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/12a96ac7-047f-1412-b6b1-a7d2fd0777bd.png)
こちらは今後の使用量予想です。SKU単位でも確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/b3019343-dc66-90be-8f53-40b9bdf70b77.png)
テーブルやボリュームの数や割合などを確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/eb758dd4-ae1e-edc4-e6b4-7e0a7aa309a5.png)

上記のダッシュボードはあくまでサンプルなので、他にもセキュリティに特化した監査ダッシュボードを作成したり、部署毎の使用量などもチェックすることができます。またアラート設定すれば急な利用増加に対しても早急な対策がたてられるでしょう。

ぜひ、System Tableを有効にして運用に活用してみてください。