BigQueryを運用していると、どのユーザがどれだけコストを使用しているのか知りたいことがある。
そこで、その方法について以下のページに記載されているので実際に試してみる。
https://cloud.google.com/bigquery/audit-logs
##Cloud Audit Loggingを有効にする
Cloud Audit LoggingはGCPによって提供される使用率のログを収集する。BigQueryのAuditログは"Administrative Activity"と”Data Access”のログから構成されている。
GCPコンソールでLogsViewerからExportを選択し、出力先のBigQuery Datasetを指定する。これにより、AuditLogがBigQueryに出力されるようになる。
##AuditLogに対してクエリを実行し、ユーザ毎の使用コストを算出
クエリのコストは以下に記載されているように、5ドル/TBである。
https://cloud.google.com/bigquery/pricing?hl=ja
カラム | 概要 |
---|---|
protoPayload.serviceData.jobCompletedEvent.eventName | query_job_completedだとジョブが正常に終了したことを示す |
protoPayload.serviceData.jobCompletedEvent.job.jobStatistics.totalBilledBytes | ジョブ使用した課金対象のデータ容量 |
以下のクエリを実行するとユーザ毎のコストが出力される。
SELECT
protoPayload.authenticationInfo.principalEmail User,
ROUND((total_bytes*5)/1000000000000, 2) Total_Cost_For_User,
Query_Count
FROM (
SELECT
protoPayload.authenticationInfo.principalEmail,
SUM(protoPayload.serviceData.jobCompletedEvent.job.jobStatistics.totalBilledBytes) AS total_bytes,
COUNT(protoPayload.authenticationInfo.principalEmail) AS query_count,
FROM
TABLE_DATE_RANGE(データセット名.cloudaudit_googleapis_com_data_access_, DATE_ADD(CURRENT_TIMESTAMP(), -7, 'DAY'), CURRENT_TIMESTAMP())
WHERE
protoPayload.serviceData.jobCompletedEvent.eventName = 'query_job_completed'
GROUP BY
protoPayload.authenticationInfo.principalEmail)
ORDER BY
2 DESC