LoginSignup
0
0

More than 1 year has passed since last update.

Cloud Monitoringのalert設定の、label_extractors問題にハマった

Last updated at Posted at 2023-04-07

背景

GCPの Cloud Monitoringの設定で、ある条件のエラーログが検知されたら、Slack通知される、という仕組みを作成していた。terraform設定の概要は下記のようになる(少し編集してあります)

resource "google_monitoring_alert_policy" "alert_policy_api_failure_sample" {
  ...
  conditions {
    ...
    condition_matched_log {
      filter = <<-EOT
        resource.type="cloud_run_revision"
        resource.labels.service_name="sample-endpoint"
        severity=ERROR
      EOT

      label_extractors = {
        message = "EXTRACT(jsonPayload.message)"
        tenant = "EXTRACT(jsonPayload.tenant)"
      }
    }
  }
  ...
  // 条件にマッチしたログをslackに流す
  notification_channels = [
    var.notification_channel
  ]
  ...
  // 通知に追記されるメッセージ
  documentation {
    content = <<-EOT
      *${var.env}環境*
      tenant_id: `$${log.extracted_label.tenant_id}`
    EOT
    mime_type = "text/markdown"
  }
}

発生した問題

新しくログに載せる項目を増やすために、label_extractorに項目を追加した。

      label_extractors = {
        message = "EXTRACT(jsonPayload.message)"
        tenant = "EXTRACT(jsonPayload.tenant)"
+       target = "EXTRACT(jsonPayload.target)"
      }
      documentation {
        content = <<-EOT
         *${var.env}環境*
         tenant_id: `$${log.extracted_label.tenant_id}`
+        target: `$${log.extracted_label.target}`
        EOT
        mime_type = "text/markdown"
      }

これで、targetという名前の項目がとれるので、ログに出力されるはずだった。
が、出力されなかった。

原因

どうやら、jsonPayload.targetのキーあるいは値が存在しないとき、インシデントとして見なされないようで、slackに通知されない。

対策

jsonPayload.target必ず 値が設定されるようにする!で今回のハマりはとりあえずなんとか乗り越えられた。
キーおよび値が設定されないと通知されない。デフォルト値をいれておくのもいいかもしれない。
(詳細未確認だが、デフォルト値が空文字だともしかしたらダメかもしれない。

0
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
0
0