Configurar alertas en Terraform

Si usas Terraform, puedes configurar alertas para los eventos de estado del servicio que aparecen en Personalized Service Health. En este documento se explica cómo.

Antes de empezar

  1. Habilita la API Service Health en el proyecto para el que quieras crear alertas.
  2. Tener un canal de notificaciones definido en tu configuración de Terraform. Para obtener más información, consulta la documentación del recurso google_monitoring_notification_channel.

Configuración de ejemplo

La siguiente configuración de Terraform habilita Personalized Service Health y las alertas de todos los incidentes y actualizaciones nuevos.

provider "google" {
  project = "PROJECT_ID"
}

resource "google_project_service" "project" {
  service = "servicehealth.googleapis.com"
}

resource "google_monitoring_alert_policy" "alert_policy_all" {
  display_name = "All incidents, all updates"
  combiner     = "OR"
  enabled      = "true"
  conditions {
    display_name = "test condition"
    condition_matched_log {
      filter     = "resource.type = \"servicehealth.googleapis.com/Event\" AND jsonPayload.category = \"INCIDENT\" AND jsonPayload.@type = \"type.googleapis.com/google.cloud.servicehealth.logging.v1.EventLog\""
      label_extractors = {
          state = "EXTRACT(jsonPayload.state)"
          description = "EXTRACT(jsonPayload.description)"
          impactedProducts = "EXTRACT(jsonPayload.impactedProducts)"
          startTime = "EXTRACT(jsonPayload.startTime)"
          title = "EXTRACT(jsonPayload.title)"
          impactedLocations = "EXTRACT(jsonPayload.impactedLocations)"
      }
    }
  }

  documentation {
    content = "### $${log.extracted_label.title}\nCheck out [Personalized Service Health dashboard](https://console.cloud.google.com/servicehealth/incidentDetails/projects%2F${resource.labels.resource_container}%2Flocations%2F${resource.labels.location}%2Fevents%2F${resource.labels.event_id}?project=${resource.labels.resource_container}) for more details.<br><br>  Description: $${log.extracted_label.description}<br><br>  Impacted products: $${log.extracted_label.impactedProducts}<br><br> Impacted locations: $${log.extracted_label.impactedLocations}<br><br>  Incident start time: $${log.extracted_label.startTime}<br><br>  State: $${log.extracted_label.state}"
    mime_type = "text/markdown"
  }
  alert_strategy {
    notification_rate_limit {
      period = "300s"
    }
  }

  notification_channels =  ["projects/PROJECT_ID/notificationChannels/NOTIFICATION_CHANNEL"]

  user_labels = {  # Add any extra labels that might be helpful
    scope = "all"
  }
}

El servicio servicehealth.googleapis.com hace referencia a Personalized Service Health y el filtro extrae todos los eventos. Consulta la referencia de la API Service Health para ver los campos que puedes definir.

La configuración anterior equivale a elegir la opción Todos los incidentes, todas las actualizaciones al configurar una alerta en el panel de control Estado del servicio.

Consulta las siguientes páginas para obtener más información sobre los campos que puedes definir en la política de alertas: