Cloud Monitoring におけるアラート通知をカスタマイズする

こんにちは。SCSKの磯野です。

Google CloudではCloud Monitoringで監視を行うことができます。
監視をする際、Slack等に通知されるアラートのメッセージをカスタマイズしたいというケースがあると思います。
例)CloudRunのエラーログ監視において、Slackの通知にVM名やエラーメッセージを含めたい。

今回は、アラートの通知内容をカスタマイズする方法とTerraformでの記載例についてご紹介します。

アラートの通知内容をカスタマイズする方法

アラートのdocumentation・ラベルを活用することで、通知メッセージをカスタマイズすることが可能です。
詳細は以下公式ドキュメントに記載されています。

変数として、ラベルを定義することが可能です。

カスタムラベルについて、ログ・メトリクスで扱い方が異なります。詳しく見ていきましょう。

ログ監視におけるカスタムラベル

リソースラベルに加えて、ログベースのアラートポリシーでは、log.extracted_label.KEYという形でカスタムラベルを付与することが可能です。

Terraformでの記載例は以下の通り。

# CloudRunのエラーログが発生したことを検知するアラートポリシー
resource "google_monitoring_alert_policy" "cloud_run_warn" { 
  display_name = "Cloud Run - Error Detected"
  combiner     = "OR"
  conditions {
    display_name = "Log match - Cloud Run Error"
    condition_matched_log {
      filter = <<EOT
      (resource.type="cloud_function" OR resource.type="cloud_run_revision" OR (resource.type="cloud_run_job" AND protoPayload.serviceName="run.googleapis.com"))
        AND severity="ERROR"
        AND (
          resource.labels.project_id="xxx"
        )
      EOT
      label_extractors = {
        error_message = "EXTRACT(protoPayload.status.message)"
      }
    }
  }
  enabled = true
  alert_strategy {
    notification_prompts = ["OPENED"]
    notification_rate_limit {
      period = "300s"
    }
    auto_close = "1800s"
  }
  notification_channels = "xxx(通知先のslackなど)"
  documentation {
    content   = <<EOT
project: $${resource.labels.project_id}
job name: $${resource.labels.job_name}
error_message: $${log.extracted_label.error_message}
    EOT
    mime_type = "text/markdown"
  }
}

メトリクス監視におけるカスタムラベル

リソースラベルメトリクスラベルに加えて、Monitoring は、モニタリング対象リソースに関する追加情報を内部で収集し、システム メタデータ ラベルに保存します。これらのシステム メタデータ ラベルは、読み取り専用の値として使用できます。一部のリソースでは、Google Cloud コンソールで VM インスタンスなどのリソースを構成するときに、独自のリソース メタデータ ラベルを作成することもできます。

Terraformでの記載例は以下の通り。
本コードでは、リソースラベルメトリクスラベルを使用して、通知内容のカスタマイズを行っています。

# CloudRunジョブのCPU使用率が90%を超えたことを検知するアラートポリシー
resource "google_monitoring_alert_policy" "cloud_run_memory_utilization_common" {
  display_name = "Cloud Run Job - Container Memory Utilization > 0.9"
  combiner     = "OR"
  conditions {
    display_name = "Cloud Run Job - Container Memory Utilization"
    condition_prometheus_query_language {
      query = <<EOT
      histogram_quantile(0.99,sum by (job_name,project_id,le)(
      run_googleapis_com:container_memory_utilizations_bucket{
      monitored_resource="cloud_run_job",
      project_id="xxx"})) > 0.9
      EOT
    }
  }
  enabled               = true
  notification_channels = "xxx(通知先のslackなど)"
  alert_strategy {
    notification_prompts = ["OPENED"]
  }
  documentation { 
    content = <<EOT
Project: $${resource.label.project_id}
JobName : $${metric.label.job_name}
  EOT
  }
}

まとめ

いかがだったでしょうか。

今回は、Cloud Monitoringでアラートの通知内容をカスタマイズする方法とTerraformでの記載例についてご紹介しました。

本記事が皆様のお役に立てれば幸いです。

タイトルとURLをコピーしました