3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ZOZOAdvent Calendar 2024

Day 10

Cloud MonitoringによるBigQuery スロット割り当て量の監視

Last updated at Posted at 2024-12-09

これは ZOZO Advent Calendar 2024 カレンダー Vol.9 の 10日目の記事です。

はじめに

本記事では、Google CloudのBigQueryのスロットの割り当て量について、Cloud Monitoringによる監視を導入する方法をご紹介します。
BigQueryのスロットについては、昨日投稿したBigQuery コンピューティング容量(スロット)ベースの課金体系とスロット予約の特性を理解するでご紹介しているため、良ければ参照ください。

Cloud Monitoringによるスロット割り当て量の確認

Cloud MonitoringのMetrics ExplorerではBigQuery Project > Slots > Slots used by project, reservation, and job typeの指標から、現在割り当てられているスロットの量を確認できます。

次図が確認できるスロット量のグラフの例です。

スクリーンショット 2024-12-01 15.02.33.png

スロット割り当て量の監視

スロットベースの課金(BigQuery Editions)を利用する場合、スロットの上限値等はスロットの予約により管理されます。
またスロットのコスト効率はクエリ実行パフォーマンスとのトレードオフになります。
※ 詳細は昨日投稿したBigQuery コンピューティング容量(スロット)ベースの課金体系とスロット予約の特性を理解するを参照ください

上述の指標を監視することで、長時間のスロット不足に気が付きやすくなります。

以下が上記の指標に対してアラートを設定する際のTerraform定義になります。
上記の指標を元にアラートポリシーを設定することで対象プロジェクトにおけるSlotの割り当て量を監視することができます。閾値については、プロジェクトでのユースケースに応じてご調整ください。

resource "google_monitoring_alert_policy" "bq-reservation-assignment-slot" {
  for_each = {
    "project-a" = {
      slots_threshold         = <ALERT_THRESHOLD> # ex: 90
      duration                = "<DURATION>" # ex: "3600s"
      notification_channel_id = "<NOTIFICATION_CHANNEL_ID>"
    }
  }
  project      = each.key
  display_name = "[WARNING] [${each.key}] BigQuery Slots High usage is continuing over ${each.value["duration"]}"
  combiner     = "OR"
  conditions {
    display_name = "[WARNING] [${each.key}] BigQuery Slots High usage is continuing over ${each.value["duration"]}"
    condition_threshold {
      filter          = <<-EOT
                  metric.type="bigquery.googleapis.com/slots/allocated"
                  resource.type="bigquery_project"
                  resource.labels.project_id="${each.key}"
                  EOT
      comparison      = "COMPARISON_GT"
      threshold_value = each.value["slots_threshold"]
      duration        = each.value["duration"]
      aggregations {
        alignment_period     = "60s"
        per_series_aligner   = "ALIGN_MAX"
        cross_series_reducer = "REDUCE_MAX"
      }
      trigger {
        count = 1
      }
    }
  }
}
3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?