タダです.
GCP を利用していると無料の利用枠で使えているうちはいいのですが,課金され始めるとびっくりするみたいな経験があります.そのため,BigQuery に課金データをエクスポートして状況をウォッチできるようにしたり,課金が嵩むような使い方をしていないかをチェックするよう監視を仕込んでみたのでこの記事にやったことをまとめます.
今回やること
大きく二つのことをやっていきます.
- BigQuery に課金データをエクスポート
- BigQuery の課金要素にアラートを設定
BigQuery に課金データをエクスポート
課金データを BigQuery へのエクスポートを下記ドキュメントを参考に設定していきます.
GCP のメニューからお支払い > 課金データのエクスポート
の画面に移動します.初期の画面は画像のような状態です.料金をエクスポート するために 標準の使用料金
から設定を編集でこの設定を有効化し,どのプロジェクトでどのデータセットに対して課金データをエクスポートするかを設定します.
設定完了後の画面が画像のような状態で,myproject_cost
というデータセットを課金データエクスポートの設定で作り,そのデータセットに課金データのテーブルを作るように設定しました.
設定後1日経ったら,課金データがgcp_billing_export_v1_[乱数]
のテーブルに出てきます.自分が見てみた感じエクスポートの設定を入れる以前の課金情報は出てこないため,その点は注意です.課金データは Redash などを使えば可視化できるので自分もこちらの記事などを参考にさせていただきました.画像で出しているのはプロジェクト全体とサービスごとの課金状況を出力した例です.
BigQuery のテーブル
Redash に出してみた例
BigQuery の課金要素にアラートを設定
次に,BigQuery の課金要素になるところにアラートを設定していきます.GCP の課金でよくみるのが BigQuery のコストが嵩むのを見かけます.業務でも BigQuery を分析で使っていたりするので,課金要素にアラートを設定していければと思いました.BigQuery ではストレージのコストと,クエリ実行時にかかる費用があります.また,クエリ実行時にかかる費用として,オンデマンド料金
と定額料金
の二つのモデルがあるのが特徴です.前者はクエリで処理したデータのバイト数に応じて課金され,後者がクエリの処理につかった 仮想 CPU のスロットを購入する時にかかるものと理解しました.そのため,ストレージの費用とクエリで処理したデータ量を気にしてくことにし,ストレージの費用は課金データのエクスポートで状況をウォッチできるので,重い処理をしてるクエリが投げられた時にアラートが出るよう設定していくことにしました.
オンデマンド料金. この料金モデルでは、各クエリによって処理されたバイト数に基づいて課金されます。処理されるクエリデータは毎月 1 TB まで無料です。
定額料金. この料金モデルでは、仮想 CPU であるスロットを購入します。スロットを購入すると、クエリの実行に使用できる専用の処理容量を購入したことになります。スロットは次のコミットメント プランで使用できます。
こちらもドキュメントを参考に進めていきます.GCP の Monitoring > アラート
のページに移動し 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 に通知されるようになりました.アラートによって課金の上昇を感知することができてよかったです.
まとめ
GCP の利用料金を BigQuery にエクスポートして,Redash で可視化したり,BigQuery のアラートを出す設定をしてみました.これで課金状況だったり,課金になりそうな要素を見ていけるようになりました.業務でも課金の増加に感知できてなかったのが課金が増えた時にも気付けるようになったので,今後も運用していければと思います.