Configurer des alertes dans Terraform

Si vous utilisez Terraform, vous pouvez configurer des alertes pour les événements d'état des services qui s'affichent dans Personalized Service Health. Ce document explique comment procéder.

Avant de commencer

Vous devez définir un canal de notification dans votre configuration Terraform. Pour en savoir plus, consultez la documentation de la ressource google_monitoring_notification_channel.

Exemple de configuration

L'exemple de configuration Terraform suivant active Personalized Service Health et les alertes pour tous les nouveaux incidents et toutes les mises à jour.

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"
  }
}

Le service servicehealth.googleapis.com fait référence à Personalized Service Health, et le filtre extrait tous les événements. Consultez la documentation de référence de l'API Service Health pour connaître les champs que vous pouvez définir.

La configuration précédente équivaut à choisir l'option Tous les incidents, toutes les mises à jour lors de la configuration d'une alerte dans le tableau de bord "État du service".

Pour en savoir plus sur les champs que vous pouvez définir dans la règle d'alerte, consultez les pages suivantes: