Créer des règles d'alerte avec une condition basée sur PromQL (API)

Cette page explique comment créer une règle d'alerte avec une règle d'alerte basée sur PromQL à l'aide de l'API Cloud Monitoring. Vous pouvez utiliser PromQL dans vos règles d'alerte pour créer des conditions complexes comme les ratios, les seuils dynamiques et l'évaluation des métriques.

Pour obtenir des informations générales, consultez la page Règles d'alerte avec PromQL

Si vous travaillez dans un environnement Prometheus en dehors de Cloud Monitoring et que vous avez d'alerte Prometheus, vous pouvez utiliser la Google Cloud CLI les migrer vers des règles d'alerte Monitoring avec une requête PromQL ; requête. Pour en savoir plus, consultez Migrer les règles d'alerte et les récepteurs à partir de Prometheus.

Créer des règles d'alerte avec des requêtes PromQL

Utilisez la méthode alertPolicies.create pour créer des règles d'alerte par programmation.

La seule différence entre créer des règles d'alerte Conditions basées sur PromQL et autres règles d'alerte est que votre Condition doit être PrometheusQueryLanguageCondition. Ce type de condition permet de définir des règles d'alerte avec PromQL.

Voici une requête PromQL pour une règle d'alerte Condition qui utilise une métrique de l'exportateur kube-state pour trouver le nombre de redémarrages d'un conteneur au cours des 30 dernières minutes:

rate(kube_pod_container_status_restarts[30m]) * 1800 > 1

Construire la règle d'alerte

Pour créer une règle d'alerte avec une condition basée sur PromQL, utilisez la classe AlertPolicy type de condition PrometheusQueryLanguageCondition. PrometheusQueryLanguageCondition présente la structure suivante :

{
  "query": string,
  "duration": string,
  "evaluationInterval": string,
  "labels": {string: string},
  "ruleGroup": string,
  "alertRule": string
}

Les champs PrometheusQueryLanguageCondition ont les définitions suivantes:

  • query: expression PromQL à évaluer. Équivalent à la fonction expr d'une règle d'alerte Prometheus standard.
  • duration: spécifie la durée au cours de laquelle Chaque évaluation de la requête doit générer une valeur true avant que est déclenchée. La valeur doit être un nombre de minutes exprimée en secondes ; Exemple : 600s pendant 10 minutes. Pour en savoir plus, consultez Comportement des règles d'alerte basées sur les métriques.
  • evaluationInterval: intervalle de temps, en secondes, entre PromQL et les évaluations de la requête. La valeur par défaut est de 30 secondes. Si le PrometheusQueryLanguageCondition a été créé en migrant un Prometheus d'alerte, cette valeur provient du groupe de règles Prometheus contenant la règle d'alerte Prometheus.

  • labels: moyen facultatif d'ajouter ou d'écraser des étiquettes dans PromQL résultat de l'expression.

  • ruleGroup: si la règle d'alerte a été migrée depuis un Prometheus fichier de configuration, ce champ contient la valeur du champ name du groupe de règles dans Prometheus fichier de configuration. Ce champ n'est pas obligatoire lorsque vous créez Règle d'alerte PromQL dans l'API Cloud Monitoring.

  • alertRule: si la règle d'alerte a été migrée depuis un Prometheus fichier de configuration, ce champ contient la valeur du champ alert à partir de la règle d'alerte dans Prometheus fichier de configuration. Ce champ n'est pas obligatoire lorsque vous créez Règle d'alerte PromQL dans l'API Cloud Monitoring.

Par exemple, la condition suivante utilise une requête PromQL pour trouver le nombre de redémarrages d'un conteneur au cours des 30 minutes:

"conditionPrometheusQueryLanguage": {
  "query": "rate(kube_pod_container_status_restarts[30m]) * 1800 > 1",
  "duration": "600s",
  evaluationInterval: "60s",
  "alertRule": "ContainerRestartCount",
  "labels": {
    "action_required":"true",
    "severity":"critical/warning/info"}
}

Utilisez cette structure comme valeur d'un champ conditionPrometheusQueryLanguage dans une condition, qui à son tour est intégrée dans une structure de règle d'alerte. Pour en savoir plus sur ces structures, consultez AlertPolicy.

Vous trouverez ci-dessous une règle complète avec un élément PrometheusQueryLanguageCondition. en JSON:

{
  "displayName": "Container Restarts",
  "documentation": {
    "content": "Pod ${resource.label.namespace_name}/${resource.label.pod_name} has restarted more than once during the last 30 minutes.",
    "mimeType": "text/markdown",
    "subject": "Container ${resource.label.container_name} in Pod ${resource.label.namespace_name}/${resource.label.pod_name} has restarted more than once during the last 30 minutes."
  },
  "userLabels": {},
  "conditions": [
    {
      "displayName": "Container has restarted",
      "conditionPrometheusQueryLanguage": {
        "query": "rate(kubernetes_io:container_restart_count[30m]) * 1800",
        "duration": "600s",
        evaluationInterval: "60s",
        "alertRule": "ContainerRestart",
        "labels": {
          "action_required":"true",
          "severity":"critical/warning/info"}
      }
    }
  ],
  "combiner": "OR",
  "enabled": true
}

Créer une règle d'alerte

Pour créer la règle d'alerte, placez son fichier JSON dans un fichier appelé POLICY_NAME.json, puis exécutez la commande suivante:

curl -d @POLICY_NAME.json -H "Authorization: Bearer $TOKEN"
-H 'Content-Type: application/json'
-X POST https://monitoring.googleapis.com/v3/projects/${PROJECT}/alertPolicies

Pour plus d'informations sur l'API Monitoring pour les règles d'alerte, consultez la page Gérer des règles d'alerte à l'aide d'API.

Pour plus d'informations sur l'utilisation de curl, consultez la section Appeler curl.

Utiliser Terraform

Pour savoir comment configurer des règles d'alerte basées sur PromQL à l'aide de consultez la section condition_prometheus_query_language du google_monitoring_alert_policy Terraform registry.

Pour obtenir des informations générales sur l'utilisation de Google Cloud avec Terraform, consultez la page Terraform avec Google Cloud.

Appeler curl

Chaque appel curl inclut un ensemble d'arguments, suivi de l'URL d'une ressource d'API. Les arguments courants incluent un ID de projet Google Cloud et un jeton d'authentification. Ces valeurs sont représentées ici par les variables d'environnement PROJECT_ID et TOKEN.

Vous devrez peut-être également spécifier d'autres arguments pour définir des éléments tels que le type de la requête HTTP (-X DELETE, par exemple). La requête par défaut est GET. Les exemples ne la spécifient donc pas.

Chaque appel curl possède la structure générale suivante :

curl --http1.1 --header "Authorization: Bearer ${TOKEN}" <other_args> https://monitoring.googleapis.com/v3/projects/${PROJECT_ID}/<request>

Pour utiliser curl, vous devez spécifier l'ID de votre projet et un jeton d'accès. Pour réduire la saisie et les erreurs, vous pouvez les placer dans des variables d'environnement en les transmettant à curl de cette manière.

Pour définir ces variables, procédez comme suit :

  1. Créez une variable d'environnement destinée à contenir l'ID de votre projet de champ d'application de métriques. Ces étapes appellent la variable PROJECT_ID :

    PROJECT_ID=a-sample-project
    
  2. Authentifiez-vous sur Google Cloud CLI :

    gcloud auth login
    
  3. Facultatif. Pour éviter d'avoir à spécifier l'ID de votre projet avec chaque gcloud , définissez votre ID de projet comme ID par défaut à l'aide de la gcloud CLI:

    gcloud config set project ${PROJECT_ID}
    
  4. Créez un jeton d'autorisation et placez-le dans une variable d'environnement. Ces étapes appellent la variable TOKEN :

    TOKEN=`gcloud auth print-access-token`
    

    Vous devez actualiser régulièrement le jeton d'accès. Si des commandes auparavant fonctionnelles indiquent soudainement que vous n'êtes pas authentifié, exécutez à nouveau cette commande.

  5. Pour vérifier que vous disposez bien d'un jeton d'accès, renvoyez la variable TOKEN :

    echo ${TOKEN}
    ya29.GluiBj8o....