背景
- GCP単独でサービスを構築している場合、Cloud Monitoringはとても便利な監視のためのツールです
- しかし、サービスをマルチクラウドで構築している場合、複数のクラウドサービスに監視の設定やダッシュボードを作っていく必要があり、面倒です
- 自分が趣味で運用しているML-NewsもAWSとGCPを使って動いている
- 一箇所に監視やダッシュボードを集めたい、というケースではMackerelが力を発揮します
- 注意: 私はMackerelアンバダサーであり、バイアスが入っているとは思います
- GCPで監視したい対象として、まず利用料金があります
- GCPの利用料金はBigQueryにExportできます
- これをMackerelでも見れるようにしたい
- その他、BigQueryのデータセット内の主要なテーブルの行数の増加具合なども見たくなります
- BigQueryのクエリ結果をMackerelに放り込めると便利なことが多そう
作ったもの
- BigQueryのクエリ結果をMackerelのメトリックとして取得できるプラグインを作りました
- mkrを使っている人は
mkr plugin install syou6162/mackerel-plugin-bigquery-query-result-importer@v0.0.1
でダウンロードできます
- mkrを使っている人は
一般的なクエリだと色んな形式が想定できてしまい、Mackerelのメトリックとして表現しようがなくなってしまいます。よって、一番使いそうだったGROUP BY
したキーと集約された値をメトリックとして表現することにしました。こんな感じ。カラム名はLabel
とValue
になるようにクエリを調整してください。
SELECT key AS Label, COUNT(*) AS Value FROM my-project.my_dataset.my_table GROUP BY key
例: GCPのサービス毎の今月の請求額を可視化する
具体例があると分かりやすいと思うので、みんな使いそうな例を。以下のクエリを--query
に食わせましょう(実際にconfに書くときは改行なしで書いてね)。BigQuery / GKEなどサービス毎に今月の請求額を積み上げグラフで可視化します。グラフではサービス毎に出しておいて、監視は式監視で設定しておくのがオススメです。AWSの費用とGCPの費用を合算したグラフをダッシュボードに出しといてもいいですね(Mackerelならではですね)。
SELECT service.description AS Label, SUM(cost) + SUM(IFNULL((SELECT SUM(c.amount) FROM UNNEST(credits) c), 0)) AS Value, FROM `my-project.source__billing.gcp_billing_export_v1_xxxxxxxxxxxxxxxxxxx` WHERE DATE(_PARTITIONTIME) BETWEEN DATE_TRUNC(CURRENT_DATE(), MONTH) AND LAST_DAY(CURRENT_DATE()) GROUP BY service.description
クエリの詳細については以下のドキュメントが参考になると思います。
注意点
使うのは簡単ですが、使う際はBigQueryのスキャン量に注意してください。mackerel-agentで使う場合、1分に一度クエリを実行しに行ってしまうので実行回数が多く、トータルでのスキャン量も多くなることが予想されます。オススメの使い方としては
- グラフ定義を行なうときだけmackerel-agentを使う
- メトリック投稿は
mackerel-plugin-bigquery-query-result-importer --project_id my-project ... | mkr throw
のようにmkr throwを使い、N時間に一度バッチ処理に挟む
というのがオススメです。用法用量を守って、楽しいMackerel & BigQuery生活をお楽しみください。