GCPの月額料金データ(Billing)をBigQuery経由で抽出し可視化する方法

Google Cloud Platform(GCP)の課金データをBigQueryにExportさせ、SQLでその月のデータだけを抽出する方法です。これで直近(前日まで?)のGCP利用料をプロジェクト単位で見ることができます。

非エンジニアの私でも簡単に出来ました。やっぱりBigQueryってすごい!

スポンサーリンク
AD for PC

GCPの課金データが見づらいという悩み

Google Cloud Platform(GCP)を利用するにあたって、プロジェクト毎に今月はいくら使ったか、を知りたいという問題が出てきました。

もちろん請求書ベースではプロジェクト毎に見やすい形になってはいるのですが、現時点で今月どれくらい消費したか、というのを確認するのは少しめんどうです。

AWSのようなコスト分析ツールもないですし。

そこで、どうするか調べて考えた結果、自分でBigQueryなどを使っていじっちゃうことに。

私は元エンジニアで現在はそういう分野はあえてやらないようにしていましたが、あまりにも簡単だったので工数もお金もかからずに簡単に出来てしまいました。

課金データをBigQueryに自動で定期的に書き出す設定

まず初めに、BigQueryへBillingデータをexportする設定を行います。

詳しくは以下のページに記載してあるのですが、英語なので簡易的な日本語での説明を付けておきます。

GCPのコンソールに入ったら、Billingのメニューへ。

そこで、Billing exportを選択し、BigQuery exportの設定を行います。

そして、BigqQueryを使用するプロジェクト名とデータの置き場所であるDatasetの名前を指定します。

そう、注意事項としてはまず最初に対象のプロジェクトにて、BigQueryのDatasetを先に用意しておく必要があります。

事前にやっておきましょう。

設定はこれだけで、後はしばらくたったらBilling dataがBigQueryに書き出されるようになります。

間隔は以下の記載の通り、ある一定。プロダクトとかサービスによっては頻繁に書き出されるものもあれば、まとまって書き出されるものもあるようです。

Billing data automatically exports your data to BigQuery in regular intervals, but the frequency of updates in BigQuery varies depending on the services you’re using.

実際に運用してみると、確かに1日に1回というわけではなく、数時間ごとに書き出されています。

しかもこの書き出す頻度はGoogleさんの改善により、きっと今後どんどん短く(早く)なっていく可能性があります。それこそほぼリアルタイムに近いような、課金の単位時間あたりの計測が終わった瞬間にBigQueryにデータが乗ってる、なんて未来はきっと近いでしょうね。

動かしてみて分かったことですが、BigQueryにExportされるデータは、そのExportの設定をして以降のものに限られます。

つまりExportの設定をするまでの過去のデータはBigQueryには入っていません。これにはご注意を。

イメージとしては、BigQuery Exportを設定すると、課金の計測が終わった項目から随時BigQueryに行として追加されていき、それが溜まっていく感じです。

それにしても、それが全自動っていうのがいいですね。

いちいちバッチとか叩かなくても、Googleさん側でデータ転送を随時してくれるという、最高のバックエンドシステムです。

BigQueryからSQLで今月分のデータのみを抽出

ここまではエンジニアの知識がほぼ0でもいけますが、ここからというか唯一のハードルがBigQueryからのデータ抽出。SQL文を使用しないといけません。

非エンジニア、しかも元ネットワークエンジニアの私にとっては、SQLは未知すぎる領域。

ということで、ググったりSQLに詳しい後輩に聞いたりしてSQL文を作成しました。

それが以下のとおり。

SELECT project.name, product, sum(cost) as cost FROM [データセットの名前]

where MONTH(start_time) = MONTH(CURRENT_TIMESTAMP())

AND YEAR(start_time) = YEAR(CURRENT_TIMESTAMP())

GROUP BY project.name, product;

これで、その月のGCP利用料がProject Name & Product Nameごとに合計されて出てきます。

例えば、以下のような出力結果になります。

Row project_name product cost
1 A-project App Engine 0
2 B-project Cloud Storage 0.00844999999999999
3 C-project Cloud Storage 0.17999199999999900

ポイントは、このcostの値が「今月」の値の合計、ということ。

先ほども書きましたが、BigQueryにBillingデータがどんどん追加されていく方式のため、単純に何も考えずに合算だけにしてしまうと、BigQuery exportを設定した日からの合計になってしまうのです。

それって可視化してもあまり嬉しくないよね、ってこと。

今回は月単位にしましたが、日とか年とか何かしらの時間単位を作らないと、可視化には向いてないです。

ということで、CURRENT_TIMESTAMP()関数を使い、Query実行時の月や年を拾ってstart_timeと一致する項目のみを抽出するようにしています。

別にend_timeでもいいと思うのですが、なんとなくStartの方にしました。

あと、知識がないのでMonthとYearを個別にやっていますが、ここら辺をワンライナーにしたり、もっと綺麗なコードを書くことが出来るのかもしれません。

でも、いいんです。BigQueryは超パワフルなので、汚いSQL文でも処理が高速ですし。Googleさんの処理能力により解決です。

BigQueryで抽出したデータをData Visualization Toolに突っ込む

SQL文で欲しいデータが取り出せるようになったらもう終わりです。

後は何らかのツールに食わせて、可視化しましょう。

が、残念ながら私の会社で使用しているData Visualization Toolについては諸事情により詳しくは書けません。

なのでここの手順はどうしても1つずつ書けないのですが、イメージとしては

  • 私の会社で使用しているData Visualization Toolは、Connectorのようなデータソースとの自動連携Add-onが豊富にそろっている
  • Google BigQueryとの自動連携を設定
  • GCPのアカウントの設定の他に、SQL文を入力できるパートがあるので、先ほどのSQL文を入力
  • そのデータソースからの取り込みを毎時実行に指定
  • そのデータソースを元にリアルタイムのグラフを作成

というような流れで、Data Visualization Toolへのデータの取り込みからグラフの作成まで、自動化が出来ました。

これで、「プロジェクト&プロダクト毎に見る、今月の利用料確認ダッシュボード」が完成しました。

なお、指定のData Visualization Toolが無い場合は、DataStudioというGoogleさんの無料サービスを利用すると幸せになれます。

詳しい手順は以下のサイトで説明されていますが、無料でこんなリッチな可視化ツールが使えるなんてすごいです。

工数もコストもほとんどかからなかった

今回色々と設定してみて思ったのですが、調べたりする時間も含めて、全体で1時間もかかっていません。たったそれくらいの工数です。

コストについても、そんなに大きなデータを置いたり抽出したりするわけではないので、全然お金がかかりません。無料枠とかでカバー出来てしまいます。

1MBくらいのデータサイズで、毎時Queryを自動で走らせていますが、月0.01ドルとか0.02ドルとかそれくらいです。つまり、たったの1円とか2円の世界。

桁が違いすぎますね。

しかも、アクセス頻度が少ないデータは自動でお安い長期保存ストレージに落としてくれるなんて、至れり尽くせりです。

以上のような工数とコストなので、非エンジニアというか管理部門の人もおもいきってBigQuery使ってみて、GCPの毎月のコストを監視するダッシュボードを作ってみてはいかがでしょうか?

予算とかなくても、時間もあまりなくても簡単に出来ますよ!

私はこれを機に、経理情報やSLA情報など色々なマネジメントデータをBigQueryに突っ込んで、SQLで抽出してニヤニヤしたいな、と強く思いました。

BigQuery最高!

スポンサーリンク
AD for PC