BigQueryのユーザー毎利用料金をDataPortalに表示する

BigQueryって油断してると結構お金かかるので
自分への戒めも込めて誰がどれくらい使ってるか可視化してみたかった

BigQuery操作ログをBigQueryにシンク

誰が何Byteクエリを読み込んだか判別するためにログをBQにシンク
GCP Consoleにて「ロギング」「ログ エクスプローラ」を選択

スクリーンショット 2021-01-05 19.13.14

リソースにBigQueryを選択

画像7

ログ名にCLOUD AUDITのdata_accessを指定

画像8

シンクを作成を選択

画像9

シンクに必要な情報を適当に設定

1. シンクの詳細
Name: export_audit_logs
Description: export bq data access logs to check usage per user

2. シンクの宛先
新しいデータセット:source__cloudaudit__bigquery
パーティション分割:チェック

3. シンクに含めるログの選択
ログエクスプローラで選択した条件が自動で入る

スクリーンショット 2021-01-05 19.23.22

DataPotalのレポート作成

先ほどシンクしたテーブルに対してカスタムクエリを実行し、ユーザー毎のクエリ課金を実施
(誰もBigQuery実行しないとテーブルにデータがないのでご注意)

まずはDataPotalでレポート作成

FireShot Capture 351 - Google データポータル - datastudio.google.com

カスタムクエリを貼り付けて接続
※ 6US$/TB, 110円/US$計算

WITH
log AS (
 SELECT
   protopayload_auditlog.authenticationInfo.principalEmail AS user,
   SUM(protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.job.jobStatistics.totalBilledBytes) AS total_bytes,
   COUNT(protopayload_auditlog.authenticationInfo.principalEmail) AS query_count,
   FORMAT_TIMESTAMP('%Y%m%d', timestamp, 'Asia/Tokyo') AS day
FROM
   `source__cloudaudit__bigquery.cloudaudit_googleapis_com_data_access*`
WHERE 
   protopayload_auditlog.servicedata_v1_bigquery.jobCompletedEvent.eventName = 'query_job_completed'
GROUP BY
   protopayload_auditlog.authenticationInfo.principalEmail,
   day
)
SELECT
   L.user AS User,
   ROUND(((L.total_bytes/1024/1024/1024/1024)*6*110), 2) AS Cost,
   L.query_count AS Query_Count,
   L.day AS Day
FROM
   log L
ORDER BY
   Cost DESC

FireShot Capture 353 - 無題のデータソース - datastudio.google.com

あとは、レポートを作成!

画像5

簡単にDataPotalグラフを作ってみる

積み上げ面グラフを選択して、以下項目を設定すればいい感じにグラフが出るはず。
ディメンション:Day
内部ディメンション:User
指標:Cost

FireShot Capture 355 - 無題のレポート - datastudio.google.com

データがないと寂しい感じだけど
データが溜まってきて頑張ってオシャレにすればこんな感じにできる

画像7


この記事が気に入ったらサポートをしてみませんか?