Configura 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 hacerlo.

Antes de comenzar

Debes 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

En el siguiente ejemplo de configuración de Terraform, se habilita Personalized Service Health y las alertas para todos los incidentes nuevos y todas las actualizaciones.

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 de Service Health para ver los campos que puedes configurar.

La configuración anterior equivale a elegir la opción Todos los incidentes, todas las actualizaciones cuando configuras una alerta en el panel de estado del servicio.

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