継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

GCP の課金状況をモニタリングできるよう設定する

タダです.

GCP を利用していると無料の利用枠で使えているうちはいいのですが,課金され始めるとびっくりするみたいな経験があります.そのため,BigQuery に課金データをエクスポートして状況をウォッチできるようにしたり,課金が嵩むような使い方をしていないかをチェックするよう監視を仕込んでみたのでこの記事にやったことをまとめます.

cloud.google.com

今回やること

大きく二つのことをやっていきます.

  1. BigQuery に課金データをエクスポート
  2. BigQuery の課金要素にアラートを設定

BigQuery に課金データをエクスポート

課金データを BigQuery へのエクスポートを下記ドキュメントを参考に設定していきます.

cloud.google.com

GCP のメニューからお支払い > 課金データのエクスポートの画面に移動します.初期の画面は画像のような状態です.料金をエクスポート するために 標準の使用料金から設定を編集でこの設定を有効化し,どのプロジェクトでどのデータセットに対して課金データをエクスポートするかを設定します. f:id:sadayoshi_tada:20210906190210p:plain

設定完了後の画面が画像のような状態で,myproject_costというデータセットを課金データエクスポートの設定で作り,そのデータセットに課金データのテーブルを作るように設定しました.

f:id:sadayoshi_tada:20210906191554p:plain

設定後1日経ったら,課金データがgcp_billing_export_v1_[乱数]のテーブルに出てきます.自分が見てみた感じエクスポートの設定を入れる以前の課金情報は出てこないため,その点は注意です.課金データは Redash などを使えば可視化できるので自分もこちらの記事などを参考にさせていただきました.画像で出しているのはプロジェクト全体とサービスごとの課金状況を出力した例です.

BigQuery のテーブル f:id:sadayoshi_tada:20210906191905p:plain

Redash に出してみた例 f:id:sadayoshi_tada:20210906192310p:plain

BigQuery の課金要素にアラートを設定

次に,BigQuery の課金要素になるところにアラートを設定していきます.GCP の課金でよくみるのが BigQuery のコストが嵩むのを見かけます.業務でも BigQuery を分析で使っていたりするので,課金要素にアラートを設定していければと思いました.BigQuery ではストレージのコストと,クエリ実行時にかかる費用があります.また,クエリ実行時にかかる費用として,オンデマンド料金定額料金の二つのモデルがあるのが特徴です.前者はクエリで処理したデータのバイト数に応じて課金され,後者がクエリの処理につかった 仮想 CPU のスロットを購入する時にかかるものと理解しました.そのため,ストレージの費用とクエリで処理したデータ量を気にしてくことにし,ストレージの費用は課金データのエクスポートで状況をウォッチできるので,重い処理をしてるクエリが投げられた時にアラートが出るよう設定していくことにしました.

オンデマンド料金. この料金モデルでは、各クエリによって処理されたバイト数に基づいて課金されます。処理されるクエリデータは毎月 1 TB まで無料です。

定額料金. この料金モデルでは、仮想 CPU であるスロットを購入します。スロットを購入すると、クエリの実行に使用できる専用の処理容量を購入したことになります。スロットは次のコミットメント プランで使用できます。

cloud.google.com

こちらもドキュメントを参考に進めていきます.GCPMonitoring > アラート のページに移動し CREATE POLICY をクリックしていきます.ADD CONDITION でアラートの条件を設定するんですが,次のように設定しました.東京リージョンで BigQuery を使うと $6.00 per TB がかかるので,100GB以上のクエリを何回も投げつけてないかをチェックするようにしました.

項目 設定値
Find resource type and metric Resource type: Global
Metric: Scanned bytes billed
Group By priority
Aggregator sum
Period 1 day
Condition triggers if Any time series violates
Condition is above
Threshold 100000000000
For most recent value

100GBを超えるようなクエリが投げられたらアラートが画像のように Slack に通知されるようになりました.アラートによって課金の上昇を感知することができてよかったです.

f:id:sadayoshi_tada:20210906194541p:plain

まとめ

GCP の利用料金を BigQuery にエクスポートして,Redash で可視化したり,BigQuery のアラートを出す設定をしてみました.これで課金状況だったり,課金になりそうな要素を見ていけるようになりました.業務でも課金の増加に感知できてなかったのが課金が増えた時にも気付けるようになったので,今後も運用していければと思います.