Databricksの利用料金データを使って分析してみた


:::note
Unity CatalogのSystem Tableがリリースされた事で、[こちらの方法](https://qiita.com/maroon-db/items/b89d47009948206ac064)でも確認出来るようになりました。
:::

:::note
Console上でのデータ分析(AWS/GCPのみ）については、続編として[こちらの記事](https://qiita.com/maroon-db/items/ddb433882150824d31f6)もご覧ください。

:::

# はじめに

AWS Databricksの使用料を確認した際に、UI上だけでは細かい分析ができなかったので詳細データを取得して分析してみましたので、その方法をご紹介したいと思います。

# 使用料や利用料金を確認するには？

AzureとAWS/GCPで確認の仕方は異なります。Azureの場合はAzure Serviceに組み込まれているため、Azure Portalから確認することが可能です。AWS/GCPは Databricks Account Console上から確認することができます。今回はAWS/GCPのケースにフォーカスしております。

**Databricks Account Console** -> **[Usage]** 
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/a478a2d0-8729-ed5c-7bb0-604bca7e5ea3.png)

上図のように、Workspace毎やSKU毎に使用量（DBU）や料金（$)を確認できます。日付指定もできるため簡易的な確認はこの画面で十分そうです。しかしもっと細かくクラスター単位やユーザー単位での使用量の分析やプロジェクト毎の使用量を把握したい場合はこの画面だけでは足りそうもありません。

# 詳細データを取得する

上図の**Usage**画面には、もう一つ機能として詳細データ(csv)を取得することができます。右上の**[Usage actions]**をクリックすると以下の画面が現れます。　取得する期間を指定してDownloadするとcsvファイルが取得できます。

<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/a88930dd-04cf-a151-77f7-1c5f4f68a13b.png' width='300' />

どのようなデータが取得できるかというと以下のようなスキーマ情報になります。
https://docs.databricks.com/administration-guide/account-settings/usage-analysis.html#csv-file-schema

他にもAPI経由で取得することができるため、継続的にモニタリングしたい場合はAPI経由でS3などのストレージに保管するように設定するといいと思います。[設定方法](https://docs.databricks.com/administration-guide/account-settings/billable-usage-delivery.html)

:::note info
Databricks 利用料金データを S3に保存するように設定するには？
https://qiita.com/maroon-db/items/3b8f6216d29ce8f7baec
:::

# データを使って分析してみる

せっかくなのでDatabricks上で分析してみたいと思います。最後にサンプルノートブックも用意しておりますのでお手元で試してみてください。

また今回のサンプルノートブックはマニュアルにある[サンプルコード](https://docs.databricks.com/_static/notebooks/usage-delivery-analysis-dashboard.html)をカスタマイズして利用しております。

## 1) データのアップロード

先ほどダウンロードしたファイルをS3ストレージもしくはDatabricks上にアップします。S3上に保存してそれをマウントして利用することで長期的な運用が可能になるのでお勧めですが、お試しであれば直接アップロードでもいいかと思います。

**[Data]** -> **[Upload]ボタン**
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/b3a4b47e-e00d-a9ed-705c-a938cfd7dcf8.png' width='300' />

## 2) サンプルノートブックのインポート

今回は[こちらのサンプルノートブック](https://sajpstorage.blob.core.windows.net/maruyama/public_share/AWS Usage Analysis Dashboard.html)を利用します。自分の環境にインポートしてご利用ください。
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/8fcb26b2-fde7-c3c2-2729-bda5e90ca377.png' width='300' /> 

## 3) ファイルパスと料金設定の確認

アップロードしたファイルパスの編集と、利用しているEditionや各料金設定を確認します。金額設定はこちらの内容を元に金額を算出するためお客様の契約内容に応じて変更してください。defaultの金額はこちらで確認できます。[AWS Pricing]
(https://databricks.com/product/aws-pricing)
（契約内容によっては割引が適用されているケースもあります。）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/85ea91ef-e94a-29ea-1791-c3dba1a617c7.png)

## 4) RunAll実行と処理概要

あとはRunAll実行します。どのようなことを実行しているかというと今回取得した詳細データには、各Cluster毎のdbuが算出されておりますが、金額までは算出されておりません。そのため別途price表を作成してjoinしております。

**join後のglobal data(globalDF)**
取得したデータ(usageDF)に金額リスト（sku_rate_df)をjoinし、tag情報をいくつかパースしたデータフレームになります。tag情報は独自に追加できるため、適宜変更してご利用ください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/8acdf962-f8de-98a6-341b-8ce4f2f1b53e.png)

**widget作成**
またwidgetを作成してこの後、日付やtag指定などを出来るようにオプションを追加しております。Widgetを利用するとインタラクティブな分析が可能になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/af2c137f-8605-8857-9872-45ecf5eb14a6.png)

**usage関数作成(累積算出のため）**
こちらはオリジナルのサンプルノートブックにあったため利用させていただきました。この後の処理が簡素化できるのと累積表示が可能になります。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/76dafc15-e430-fb83-94f5-6a4668eb0b54.png)

## 5) 分析してみる

それでは早速いくつか分析グラフを用意しましたのでみてみたいと思います。

**workspace毎の使用金額**
会社内で複数のワークスペースを用意している場合、ワークスペース毎にモニタリングすることは非常に重要です。ここでは累積データを使いました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/c5c1c397-19f3-09de-93ea-067491b8ca5c.png)

[plot Option]で累積ではないデータでの表示やDBU表示に切り替えることができます。
<img src='https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/1f4ebc20-fb39-7931-bb66-927f71b9ec76.png' width='500'/>

**SKU毎の使用金額**
Notebook上で実行したものはAll Purposeとして課金され、Job実行ではJobとして課金されます。そのためSKU単位で見ることでどのような処理が多いかが確認できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/12896107-8946-c7c5-bcc0-a09976cee558.png)

**Tag毎の使用金額**
Widgetのtagを指定することで、tag単位での使用料を確認できます。
以下はteamというタグを指定してますが、teamタグがないケースが多いため殆どnullになってしまってます。global設定でデフォルトtagなど指定すると更に良いかと。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/1e6a3348-72f1-929e-b997-7ac0c4f0c33c.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/6a3b6868-b425-b1ca-34ed-9e1d54cb0ae7.png)
tableを作成することでSQLを使った分析が可能になります。またDatabricks SQLからもアクセスできるようになり、ダッシュボード作成や外部のBIツールからのアクセスが可能になります。

**SKUの割合をPieチャートで確認**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/a7ab5ac6-15e9-0c7f-517b-e9f5048f0200.png)

**利用の多いユーザー(Creator) Top5**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/3daffd1e-bcd7-cfd8-1826-a9ea8ffe4313.png)


**利用の多いクラスター Top5**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/b5a7b055-f541-3e60-9f59-0c71ff836e51.png)

**Cluster Node Type別利用料金**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2206424/e67561de-5ada-9201-cbf1-efa31177233e.png)

勿論他にも様々な分析ができるかと思います。是非お試しください。


## 7) Databricks SQL Dashboardで運用しよう

長期的なモニタリングを考えるなら是非Dashboardを作成して運用してみてください。Alert設定も可能ですので使いすぎの場合などアラートをあげて対応することが可能になります。

ここからはノートブックは利用しませんが、運用時には取得したデータを加工してDelta Tableとして保存する必要があるので、このノートブックをJob登録して定期実行すると良いかと思います。

Databricks SQLを使ったDashboard作成はまた別の記事でご紹介いたします。

# サンプルノートブック
<a href="https://sajpstorage.blob.core.windows.net/maruyama/public_share/AWS Usage Analysis Dashboard.html">AWS Databricks Usage Analytics Dashboard</a>