BigQueryのユーザー毎利用料金をDataPortalに表示する
BigQueryって油断してると結構お金かかるので
自分への戒めも込めて誰がどれくらい使ってるか可視化してみたかった
BigQuery操作ログをBigQueryにシンク
誰が何Byteクエリを読み込んだか判別するためにログをBQにシンク
GCP Consoleにて「ロギング」「ログ エクスプローラ」を選択
リソースにBigQueryを選択
ログ名にCLOUD AUDITのdata_accessを指定
シンクを作成を選択
シンクに必要な情報を適当に設定
1. シンクの詳細
Name: export_audit_logs
Description: export bq data access logs to check usage per user
2. シンクの宛先
新しいデータセット:source__cloudaudit__bigquery
パーティション分割:チェック
3. シンクに含めるログの選択
ログエクスプローラで選択した条件が自動で入る
DataPotalのレポート作成
先ほどシンクしたテーブルに対してカスタムクエリを実行し、ユーザー毎のクエリ課金を実施
(誰もBigQuery実行しないとテーブルにデータがないのでご注意)
まずはDataPotalでレポート作成
カスタムクエリを貼り付けて接続
※ 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
あとは、レポートを作成!
簡単にDataPotalグラフを作ってみる
積み上げ面グラフを選択して、以下項目を設定すればいい感じにグラフが出るはず。
ディメンション:Day
内部ディメンション:User
指標:Cost
データがないと寂しい感じだけど
データが溜まってきて頑張ってオシャレにすればこんな感じにできる