BigQuery への Cloud Billing データのエクスポートと Looker Studioを組み合わせると、Google Cloud の費用情報を常に最新の状態に保つことができます。
このドキュメントでは、Cloud Billing データを使用して課金利用状況と費用に関する分析情報のダッシュボードを設定する方法について説明します。ダッシュボードを使用すると、Compute Engine リソースの使用量など、Google Cloud の費用に関する情報を確認できます。
ダッシュボードを設定するには、このチュートリアルに沿って操作するか、次の動画をご覧ください。
目標
このチュートリアルでは、次のタスクを行う方法を説明します。
Cloud Shell を使用して 課金利用状況と費用に関する分析情報のダッシュボードを設定します。
このチュートリアルの手順は、Terraform または Python を使用して実施できます。
Google Cloud 環境で使用するラベルを使用するようにダッシュボードのフィルタを構成します。
複数の Cloud 請求先アカウントが存在する場合や、Cloud 請求先アカウントに米ドル(USD)以外の通貨が設定されている場合など、高度なケースに合わせてダッシュボードのデータソースを変更する方法について説明します。
料金
このドキュメントでは、Google Cloud の次の課金対象のコンポーネントを使用します。
The cost of storing your Cloud Billing data in BigQuery is typically free or minimal. Depending on the size of the BigQuery dataset, you might incur costs for querying the data for analysis.
料金計算ツールを使うと、予想使用量に基づいて費用の見積もりを生成できます。
始める前に
サンプルの 課金使用量と費用に関する分析情報のダッシュボードにアクセスできることを確認します。サンプルにアクセスできない場合は、組織でドメインの制限が有効になっている可能性があります。管理者は、アカウントのドメイン制限を一時的にオフにできます。
組織で、標準の使用料金データの BigQuery への Cloud Billing エクスポートが有効になっていることを確認します。
Cloud Billing データのエクスポートが有効になっていない場合は、Cloud Billing から BigQuery へのデータのエクスポートを有効にするをご覧ください。
Cloud Billing データのエクスポート用のデータセットをホストするプロジェクトに、BigQuery ビューの作成権限が必要です。
BigQuery ビュー用に新しいデータセットを作成する場合は、BigQuery データセットの作成権限が必要です。
Google Cloud 環境に関する次の情報を取得します。
- Cloud Billing BigQuery データセットがホストされているプロジェクト ID。
- 標準の費用データと詳細な費用データのエクスポートのデータセット名。通常、費用データのエクスポートは同じデータセット内にあります。
ダッシュボードを組織内の他のユーザーと共有する場合は、次の追加手順をおすすめします。これにより、Google Cloud サービス アカウントを設定できます。このアカウントは、他のユーザーが自分の認証情報または自分の認証情報を使用してデータにアクセスするのではなく、BigQuery データに対して認証できます。
Looker Studio サービス エージェントのヘルプページで、Looker Studio サービス エージェントのメールアドレスを取得します。
Python スクリプトを使用してダッシュボードを作成する場合は、Looker Studio サービス エージェントのサービス アカウントを作成します。
Terraform を使用している場合は、サービス アカウントを手動で作成する必要はありません。Terraform 構成では、構成を適用するときにサービス アカウントが作成されます。
Python スクリプトを使用している場合は、Cloud Shell 環境に最新バージョンの Python 3 があることを確認してください。Python のバージョンを確認するには、Cloud Shell ターミナルで
python --version
と入力して Enter キーを押します。
ダッシュボードのコピーを作成する
Terraform
Terraform を使用してダッシュボードの独自のコピーを作成するには、まず、プロセスを自動化する GitHub リポジトリのクローンを作成します。この手順では Cloud Shell を使用します。Cloud Shell は Google Cloud のインタラクティブなシェル環境で、ブラウザで使用できます。Cloud Shell には Terraform がプリインストールされています。
リポジトリ内の Terraform 構成は、次のタスクを行います。
- 標準の費用データのエクスポートからデータを取得する新しい BigQuery ビューを作成します。
- ダッシュボード テンプレートをコピーして、データの BigQuery ビューに接続します。
- Looker Studio へのリンクを提供します。このリンクは Looker Studio ダッシュボードに保存できます。
- Google Cloud サービス アカウント ID が提供されます。これは、ダッシュボードの認証方法として使用します。
ダッシュボードを作成する手順は次のとおりです。
Cloud Shell で GitHub リポジトリを開きます。
プロジェクトと BigQuery データセットに関する情報を含む Terraform 変数定義ファイルを作成します。次のコマンドを使用して、
variables.tfvars
というファイルを作成します。cat << EOF > variables.tfvars project-id = "PROJECT_ID" bq-dashboard-dataset-name = "DATASET_NAME" bq-billing-export-table-id = "PROJECT_ID.DATASET_NAME.TABLE_ID" looker-studio-service-agent-name = "LOOKER_STUDIO_AGENT_NAME" EOF
変数は次のとおりです。
- PROJECT_ID: Cloud Billing データセットをホストするプロジェクト ID。
- DATASET_NAME: 標準の費用データ エクスポートを含む BigQuery データセット。
- TABLE_ID: 標準の請求データ エクスポートを含む BigQuery テーブルの名前。
- LOOKER_STUDIO_AGENT_NAME: Looker Studio サービス エージェントのメールアドレス。Looker Studio サービス エージェントのヘルプページで確認できます。
GitHub リポジトリを Terraform の作業ディレクトリとして初期化するには、次のコマンドを実行します。
terraform init
必要に応じて、Terraform 構成によって行われる変更をプレビューするには、次の
terraform plan
コマンドを実行します。terraform plan -var-file=variables.tfvars
Cloud Shell に API 呼び出しを行う権限を付与するよう求められることがあります。
Terraform の変更を確認し、変数の値を変更する必要がある場合は
variables.tfvars
を編集します。リソースを作成できる状態になったら、次のterraform apply
コマンドを実行します。terraform apply -var-file=variables.tfvars
コマンドを実行すると、認証用に作成されたサービス アカウントと、Looker Studio ダッシュボードへのリンクが表示されます。
サービス アカウント名をコピーします。この情報は、Looker Studio データソースの認証を構成するときに必要になります。
Looker Studio のリンクをクリックしてダッシュボードを開きます。
Looker Studio で [編集と共有] をクリックしてダッシュボードを保存します。 データアクセス設定を確認するように求められたら、[同意して保存する] をクリックします。
レポートへのデータの追加を求めるメッセージが表示されたら、[レポートに追加] をクリックします。
Looker Studio のホームページからダッシュボードにアクセスできるようになりました。
Python
Python を使用してダッシュボードの独自のコピーを作成するには、まず、プロセスを自動化する GitHub リポジトリのクローンを作成します。この手順では Cloud Shell を使用します。Cloud Shell は Google Cloud のインタラクティブなシェル環境で、ブラウザで使用できます。
リポジトリ内のセットアップ スクリプトは次のタスクを行います。
- 標準の費用データのエクスポートを含むデータセットに、新しい BigQuery ビューを作成します。
- ダッシュボード テンプレートをコピーして、データの BigQuery ビューに接続します。
- Looker Studio へのリンクを提供します。このリンクは Looker Studio ダッシュボードに保存できます。
ダッシュボードを作成する手順は次のとおりです。
Cloud Shell で GitHub リポジトリを開きます。
billboard
ディレクトリに移動します。cd examples/billboard
次のコマンドを実行して、スクリプトの Python 環境を設定します。
rm -rf bill-env python3 -m venv bill-env source bill-env/bin/activate pip install -r requirements.txt
ダッシュボードを作成するスクリプトを実行します。API 呼び出しを行うために Cloud Shell の認可が必要になることがあります。
python billboard.py \ -pr 'PROJECT_ID' \ -se 'STANDARD_BILLING_EXPORT_DATASET' \ -bb 'BILLBOARD_DATASET'
変数は次のとおりです。
- PROJECT_ID: Cloud Billing データセットをホストするプロジェクト ID。
- STANDARD_BILLING_EXPORT_DATASET: 標準の使用料金データのエクスポートを含む BigQuery データセット。
- BILLBOARD_DATASET: ダッシュボードの BigQuery ビューが作成される BigQuery データセットの名前(例:
example_dashboard_view
)。ビューのデータセットがまだない場合は、スクリプトがこの名前で新しいデータセットを作成します。
スクリプトの実行が完了すると、Looker Studio にダッシュボードのリンクが表示されます。
Looker Studio のリンクをクリックしてダッシュボードを開きます。
Looker Studio で [編集と共有] をクリックしてダッシュボードを保存します。 データソースをレポートに追加するように求められたら、[Add to report] をクリックします。
Looker Studio のホームページからダッシュボードにアクセスできるようになりました。
(省略可)データソースの認証情報を構成する
デフォルトでは、課金情報ダッシュボードは、ユーザーの認証情報を使用して BigQuery データソースにアクセスします。ダッシュボードを他のユーザーと共有する場合は、Google Cloud サービス アカウントを使用して BigQuery データセットの認証を行うことをおすすめします。これにより、データソースが認証情報に依存しなくなります。
Terraform を使用してダッシュボードをコピーした場合は、terraform apply
コマンドを実行するとサービス アカウント ID が取得されます。Python スクリプトを使用した場合は、次の手順でサービス アカウントを手動で作成する必要があります。
Looker Studio サービス エージェントのヘルプページで、Looker Studio サービス エージェントのメールアドレスを取得します。
ダッシュボードの BigQuery ビューがあるプロジェクトに対して、サービス アカウントに次の権限を付与します。
bigquery.dataViewer
bigquery.jobUser
iam.serviceAccountTokenCreator
サービス アカウント ID を取得したら、次の手順でサービス アカウントを使用して認証を行います。
Looker Studio のホームページでダッシュボードを開きます。
[編集] をクリックしてダッシュボードを編集します。
[リソース] メニューから [追加済みのデータソースの管理] を選択します。ダッシュボードのデータソースの名前は
billing-export-view
で始まります。データソースの [アクション] 列で、[編集] をクリックします。
[データ認証情報] をクリックします。
[データの認証情報を更新] ページで、[サービス アカウントの認証情報] を選択し、サービス アカウント ID を入力します。
[更新] をクリックして、サービス アカウントの認証情報を使用します。
[完了] をクリックして、データソースへの変更を保存します。
ダッシュボードを表示するには、[表示] をクリックします。
組織のラベルを使用するようにダッシュボードを更新する
ダッシュボードのいくつかのグラフ(Cost Reporting: Labels
ページのグラフなど)は、リソースのラベルに基づいています。特定のラベル別の費用の正確な内訳を確認するには、独自のラベルを使用するようにデフォルトのフィルタを変更する必要があります。
Looker Studio のホームページでダッシュボードを開きます。
[編集] をクリックしてダッシュボードを編集します。
[リソース] メニューから [フィルタを管理] を選択します。
labels.key
とproject.labels.key
に基づくフィルタを確認し、必要に応じて [編集] をクリックして、組織で使用しているラベルキーに変更します。たとえば、ラベルキー
department
を使用してビジネス単位でリソースを整理する場合は、business_unit
フィルタを編集して、project.labels.key
フィルタをdepartment
に変更します。[閉じる] をクリックして、フィルタの編集を終了します。
ダッシュボードでデータを分析する
Looker Studio ダッシュボードのページでは、費用データが分類されているため、費用と傾向の概要を簡単に確認したり、費用に関する詳細情報を取得したりできます。
ほとんどのページでは、プロジェクトでデータをフィルタできます。また、カレンダーを使用して、費用を分析する期間を選択することもできます。
費用の概要を確認する
[概要] ページでは、当月と前月の請求額の差額、上位のサービスにかかる費用、過去 30 日間の 1 日あたりの費用を概観できます。
[傾向] ページでは、当月と前月、今四半期と前四半期など、さまざまな期間の費用を比較できます。
[分析] ページを使用して、期間ごとの費用を分析し、異常な費用の増加や減少などの異常を特定します。
費用の要因を特定する
次のページで、最も費用が掛かっている項目を確認できます。
- サービス別の月別費用
- プロジェクト別の月ごとの費用
- プロジェクト、サービス、SKU 別の費用
- 地域ごとの費用
各サービスの費用の詳細を確認するには、サービス固有のページを使用します。たとえば、[GKE クラスタ] ページには、GKE クラスタと Namespace 別の費用の内訳が表示されます。
確約利用割引で費用を削減する機会を特定する
確約利用割引(CUD)では、特定の期間において最小レベルのリソースを使用するよう確約することで、割引料金を利用できるようになります。
ダッシュボードの CUD ページには、CUD の対象となる可能性がある Compute Engine、Cloud SQL、Memorystore の使用量が表示されます。すでに 1 つ以上の CUD がある場合、これらのページには、既存の CUD の対象外である使用量のみが表示されます。
Cloud Marketplace ソフトウェアと追加ライセンスの費用を確認する
[Marketplace] ページを使用して、Cloud Marketplace から購入したソフトウェア(Google Cloud NetApp Volumes など)の費用を確認します。
[ライセンス] ページを使用して、Compute Engine 上の Windows Server のライセンスや、Cloud Marketplace から購入したサードパーティ ライセンスなどの追加ライセンスに費やしている金額を確認します。
ラベル別の費用を表示する
組織のラベルを使用するようにダッシュボードのフィルタをカスタマイズできます。フィルタを更新したら、次のページを使用して、プロジェクトとフォルダ全体の費用を確認できます。
[アプリケーション別] ページには、ラベルキー
application
のすべてのリソースの費用が表示されます。たとえば、ウェブアプリとモバイルアプリがあり、それぞれのリソースにapplication:web
とapplication:mobile
というラベルを付けると、各アプリケーションの費用を個別に確認できます。[ラベル] ページには、コストセンターやビジネスコードなど、特定のラベルの費用が表示されます。ダッシュボードのフィルタをカスタマイズした場合は、グラフのタイトルを変更してフィルタを反映できます。
(上級者向け)複数の Cloud 請求先アカウントのデータを変更する
ダッシュボードに複数の Cloud 請求先アカウントのデータを含める場合は、すべての Cloud 請求先アカウントの課金データのエクスポートを含むように、BigQuery ビューを変更します。
始める前に
追加する Cloud 請求先アカウントごとに、チュートリアルの前提条件のすべての手順を行います。
BigQuery ビューを更新して追加の Cloud Billing エクスポートを含める
Google Cloud コンソールで、BigQuery ページを開きます。
ダッシュボード用に作成したデータセットを含むプロジェクトを選択します。
[エクスプローラ] パネルでプロジェクトを開き、データセットを開きます。
Billboard ビューをクリックして詳細を表示します。このビューでは、標準費用と使用状況データのエクスポートをクエリします。
[詳細] タブをクリックしてから、[クエリを編集] をクリックします。ビューのクエリは、次のようになります。
SELECT *, COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0) AS credits_sum_amount, COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0) + cost as net_cost, PARSE_DATE("%Y%m", invoice.month) AS Invoice_Month, _PARTITIONDATE AS date from `PROJECT_ID.BILLING_ACCOUNT_EXPORT` s WHERE _PARTITIONDATE > DATE_SUB(CURRENT_DATE(), INTERVAL 13 MONTH)
ここで、PROJECT_ID は Cloud Billing の BigQuery 標準費用データのエクスポートを含むプロジェクトです。BILLING_ACCOUNT_EXPORT は、標準費用データを含む BigQuery テーブルの名前です。
既存のクエリを複製します。
FROM
句で、プロジェクト ID と BigQuery テーブルを追加の Cloud 請求先アカウントの情報に置き換えます。2 つのクエリの間に
UNION ALL
演算子を追加して、データを結合します。最終的なクエリは次のようになります。これは、それぞれ PROJECT_ID_1 と PROJECT_ID_2 にある BILLING_ACCOUNT_1 と BILLING_ACCOUNT_2 のデータ エクスポートを組み合わせたものです。SELECT *, --query for BILLING_ACCOUNT_1 COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0) AS credits_sum_amount, COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0) + cost as net_cost, EXTRACT(DATE FROM _PARTITIONTIME) AS date FROM `PROJECT_ID_1.BILLING_ACCOUNT_1_EXPORT` s WHERE _PARTITIONTIME >"2021-01-01" UNION ALL SELECT *, --query for BILLING_ACCOUNT_2 COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0) AS credits_sum_amount, COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0) + cost as net_cost, PARSE_DATE("%Y%m", invoice.month) AS Invoice_Month, _PARTITIONDATE AS date from `PROJECT_ID_2.BILLING_ACCOUNT_2_EXPORT` s WHERE _PARTITIONDATE > DATE_SUB(CURRENT_DATE(), INTERVAL 13 MONTH)
詳細な費用と使用状況データをクエリする billboard_detail ビューに対して、上記の手順を繰り返します。
米ドルと異なる通貨を使用しているアカウントがある場合は、この手順を繰り返し、次の例のように
currency_conversion_rate
列を使用して米ドルに換算します。select *, (COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0))/currency_conversion_rate AS credits_sum_amount, (COALESCE((SELECT SUM(x.amount) FROM UNNEST(s.credits) x),0))/currency_conversion_rate + cost/currency_conversion_rate as net_cost, 'USD' as net_cost_currency, PARSE_DATE("%Y%m", invoice.month) AS Invoice_Month, _PARTITIONDATE AS date from `PROJECT_ID.BILLING_ACCOUNT_DATASET` s WHERE _PARTITIONDATE > DATE_SUB(CURRENT_DATE(), INTERVAL 13 MONTH)
クリーンアップ
Terraform
ダッシュボードを今後使用しない場合は、Terraform 作業ディレクトリを再度開き、terraform apply
コマンドを使用して作成したリソースを削除します。
Python
ダッシュボードを今後使用しない場合は、GitHub リポジトリのクローンを作成し、-clean
オプションを指定してダッシュボード スクリプトを実行します。このスクリプトは BigQuery のビューを削除しますが、BigQuery のエクスポート データセットはそのまま残ります。
Cloud Shell で GitHub リポジトリを開きます。
billboard
ディレクトリに移動します。cd examples/billboard
次のコマンドを実行して、スクリプトの Python 環境を設定します。
pip install virtualenv virtualenv bill-env source bill-env/bin/activate pip install -r requirements.txt
クリーンアップ コマンドを実行します。
python billboard.py \ -pr 'PROJECT_ID' \ -se 'STANDARD_BILLING_EXPORT_DATASET' \ -de 'DETAILED_BILLING_EXPORT_DATASET' \ -bb 'BILLBOARD_DATASET' \ -clean yes
変数は次のとおりです。
- PROJECT_ID: Cloud Billing データセットをホストするプロジェクト ID。
- STANDARD_BILLING_EXPORT_DATASET: 標準の使用料金データのエクスポートを含む BigQuery データセット。
- DETAILED_BILLING_EXPORT_DATASET: 詳細な使用料金データのエクスポートを含む BigQuery データセット。
- BILLBOARD_DATASET: ダッシュボードの BigQuery ビューの作成に使用した BigQuery データセット。
Looker Studio ダッシュボードを削除するには、Looker Studio を開き、ダッシュボードを見つけ、 メニューで [削除] をクリックします。