Cette page explique comment créer une règle d'alerte basée sur PromQL à l'aide de l'API Cloud Monitoring. Vous pouvez utiliser des requêtes PromQL dans vos règles d'alerte pour créer des conditions complexes avec des fonctionnalités telles que des ratios, des seuils dynamiques et une évaluation des métriques.
Pour obtenir des informations générales, consultez la section Présentation des alertes basées sur PromQL.
Si vous travaillez dans un environnement Prometheus en dehors de Cloud Monitoring et que vous disposez de règles d'alerte Prometheus, vous pouvez utiliser la Google Cloud CLI pour les migrer vers des règles d'alerte basées sur PromQL dans Monitoring. Pour en savoir plus, consultez la page Migrer des règles d'alerte et des récepteurs depuis 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 la création de règles d'alerte basées sur PromQL et d'autres règles d'alerte réside dans le fait que votre type 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 condition de stratégie d'alerte qui utilise une métrique de l'exportateur kube-state
pour déterminer le nombre de fois qu'un conteneur a été redémarré 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 basée sur PromQL, utilisez le type de condition AlertPolicy
PrometheusQueryLanguageCondition
.
PrometheusQueryLanguageCondition
présente la structure suivante :
{ "query": string, "duration": string, "evaluationInterval": string, "labels": {string: string}, "ruleGroup": string, "alertRule": string }
Les champs PrometheusQueryLanguageCondition
sont définis comme suit:
query
: expression PromQL à évaluer. Équivalent au champexpr
d'une règle d'alerte Prometheus standard.duration
: spécifie la durée pendant laquelle chaque évaluation de la requête doit générer une valeurtrue
pour que la condition de la règle d'alerte soit remplie. La valeur doit être un nombre de minutes, exprimé en secondes. Par exemple,600s
pour une durée de 10 minutes. Pour en savoir plus, consultez la page Comportement des règles d'alerte basées sur les métriques.evaluationInterval
: intervalle de temps, en secondes, entre les évaluations PromQL de la requête. La valeur par défaut est de 30 secondes. SiPrometheusQueryLanguageCondition
a été créé en migrant une règle d'alerte Prometheus, cette valeur provient du groupe de règles Prometheus qui contenait la règle d'alerte Prometheus.labels
: méthode facultative permettant d'ajouter ou d'écraser des libellés dans le résultat de l'expression PromQL.ruleGroup
: si la stratégie d'alerte a été migrée à partir d'un fichier de configuration Prometheus, ce champ contient la valeur du champname
du groupe de règles dans le fichier de configuration Prometheus. Ce champ n'est pas obligatoire lorsque vous créez une règle d'alerte PromQL dans l'API Cloud Monitoring.alertRule
: si la stratégie d'alerte a été migrée à partir d'un fichier de configuration Prometheus, ce champ contient la valeur du champalert
de la règle d'alerte dans le fichier de configuration Prometheus. Ce champ n'est pas obligatoire lorsque vous créez une règle d'alerte PromQL dans l'API Cloud Monitoring.
Par exemple, la condition suivante utilise une requête PromQL pour déterminer le nombre de fois qu'un conteneur a été redémarré au cours des 30 dernières 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 la section AlertPolicy
.
Vous trouverez ci-dessous une règle complète avec une condition 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 la règle d'alerte 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
.
Désactiver la vérification de l'existence de la métrique
Lorsque vous créez une règle d'alerte basée sur PromQL, Google Cloudeffectue une validation pour s'assurer que les métriques référencées dans la condition existent déjà dans Monitoring. Toutefois, vous pouvez remplacer cette validation si vous devez créer une règle d'alerte avant que les métriques n'existent. Par exemple, vous pouvez le faire lorsque vous utilisez l'automatisation pour créer des projets associés à un ensemble standard de règles d'alerte prédéfinies. Si vous ne désactivez pas la validation, la création de votre règle d'alerte échoue jusqu'à ce que les métriques sous-jacentes soient créées.
Pour désactiver la vérification de l'existence de la métrique, ajoutez le champ "disableMetricValidation": true
à votre PrometheusQueryLanguageCondition
:
{ "query": string, "duration": string, "evaluationInterval": string, "labels": {string: string}, "ruleGroup": string, "disableMetricValidation": true, "alertRule": string }
Si la condition d'une règle d'alerte fait référence à une métrique qui n'existe pas, la condition s'exécute toujours selon son intervalle d'évaluation. Toutefois, le résultat de la requête est toujours vide. Une fois la métrique sous-jacente créée, la requête renvoie des données.
Utiliser Terraform
Pour obtenir des instructions sur la configuration de règles d'alerte basées sur PromQL à l'aide de Terraform, consultez la section condition_prometheus_query_language
du registre Terraform google_monitoring_alert_policy
.
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 :
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
Authentifiez-vous sur Google Cloud CLI :
gcloud auth login
Facultatif. Pour éviter d'avoir à spécifier votre ID de projet avec chaque commande
gcloud
, définissez votre ID de projet par défaut à l'aide de gcloud CLI:gcloud config set project ${PROJECT_ID}
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.
Pour vérifier que vous disposez bien d'un jeton d'accès, renvoyez la variable
TOKEN
:echo ${TOKEN} ya29.GluiBj8o....