18
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

BigQuery ユーザ毎に使用したコストを算出する

Posted at

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
18
12
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
12

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?