Surveiller les résultats de vos requêtes SQL à l'aide d'une règle d'alerte

Ce document explique comment créer une règle d'alerte pour surveiller les résultats d'une requête que vous exécutez dans Log Analytics. Ces requêtes sont écrites en SQL et doivent interroger une vue de journal. La règle d'alerte vous avertit lorsque le résultat de la requête remplit les conditions que vous spécifiez. Par exemple, vous pouvez configurer une règle d'alerte afin d'être averti lorsque 25 % au moins des entrées de journal d'une période donnée ont une gravité de ERROR.

Les règles d'alerte que vous créez depuis la page Analyse de journaux s'exécutent sur un moteur BigQuery. Par conséquent, les données interrogées doivent être accessibles via un ensemble de données BigQuery associé. C'est pourquoi ces requêtes SQL ne peuvent interroger que des vues de journaux. Ils ne peuvent pas interroger les vues Analytics.

Pour en savoir plus sur l'Analyse de journaux, consultez la section Interroger et analyser les journaux avec l'Analyse de journaux.

Fonctionnement des règles d'alerte

Une règle d'alerte décrit les circonstances dans lesquelles vous souhaitez être averti d'un incident et de quelle manière. Vous pouvez utiliser trois approches différentes pour recevoir une notification lorsqu'un contenu ou un modèle apparaît dans vos données de journal :

  • Pour rechercher une expression spécifique dans des entrées de journal individuelles, créez une règle d'alerte basée sur les journaux. Utilisez ces règles d'alerte lorsque vous souhaitez être averti d'événements liés à la sécurité, par exemple.

  • Pour surveiller les événements dans les données d'entrée de journal, vous pouvez créer une métrique basée sur les journaux, puis une règle d'alerte pour la surveiller. Ces types de règles d'alerte sont efficaces lorsque vous souhaitez surveiller les tendances des données d'entrée de journal au fil du temps. Toutefois, elles ne sont pas aussi efficaces si vous ne prévoyez que quelques événements.

  • Pour surveiller l'analyse globale de vos données d'entrée de journal, combinez Log Analytics avec des règles d'alerte. Dans ce scénario, vous mettez à niveau un bucket de journaux pour utiliser l'Analyse de journaux et créez un ensemble de données BigQuery associé pour ce bucket de journaux. Ensuite, vous utilisez l'Analyse de journaux, qui est compatible avec les requêtes SQL, pour interroger une vue de journal sur le bucket de journaux. Enfin, vous créez la règle d'alerte pour surveiller les résultats de la requête SQL. Ce type de règle d'alerte est appelé règle d'alerte basée sur SQL.

Les règles d'alerte basées sur SQL sont les plus efficaces pour évaluer des valeurs exactes sur plusieurs entrées de journal. Si vous souhaitez évaluer des entrées de journal individuelles, créez une règle d'alerte basée sur les journaux.

Le reste de ce document explique comment utiliser les règles d'alerte basées sur SQL.

Composants des règles d'alerte

Une règle d'alerte basée sur SQL contient une condition et un calendrier :

  • La condition contient la requête, qui est une requête SQL qui interroge une vue de journal. La condition définit également les circonstances dans lesquelles le résultat de la requête entraîne la création d'un incident par Monitoring.

  • La planification définit la fréquence à laquelle la règle d'alerte exécute sa requête. La planification définit également la taille de la fenêtre d'analyse, qui est un filtre qui ne sélectionne que les entrées de journal reçues depuis la dernière évaluation de la requête. Par exemple, si vous définissez la planification sur 60 minutes, la requête est exécutée toutes les 60 minutes à l'aide d'une fenêtre d'analyse qui sélectionne les 60 dernières minutes d'entrées de journal.

Les règles d'alerte contiennent également une liste de canaux de notification. Lorsque la condition de la règle d'alerte est remplie, Cloud Monitoring crée un incident, puis envoie des notifications à son sujet via ces canaux. Un incident est un enregistrement des données ayant entraîné la satisfaction de la condition, ainsi que d'autres informations pertinentes. Ces informations peuvent vous aider à résoudre les problèmes à l'origine de l'incident. Vous pouvez afficher l'incident à l'aide de la console Google Cloud .

Types d'évaluation pour les règles d'alerte basées sur SQL

Les conditions qui surveillent un résultat de requête SQL acceptent deux types d'évaluation :

  • Seuil de nombre de lignes : la condition est remplie lorsque le nombre de lignes dans le résultat de la requête est supérieur, égal ou inférieur à une valeur seuil.

    Par exemple, supposons que vous souhaitiez recevoir une notification lorsque plus de 50 entrées de journal de la période d'analyse ont une gravité supérieure à 200. Vous créez une requête qui signale les entrées de journal dont la gravité est supérieure à 200. Vous configurez ensuite une condition, sélectionnez le seuil de nombre de lignes et définissez-le sur 50.

  • Booléen : la condition est remplie lorsqu'une colonne booléenne spécifique du tableau des résultats de la requête contient une ligne avec une valeur de true.

    Par exemple, supposons que vous souhaitiez recevoir une notification lorsque plus de 25 % des entrées de journal de la période d'analyse ont un niveau de gravité ERROR. Vous créez une requête qui calcule le pourcentage d'entrées de journal dont le niveau de gravité est ERROR. Les résultats de la requête écrivent true dans la colonne notify lorsque ce pourcentage dépasse 25 %. Ensuite, créez une condition, définissez le type sur booléen et configurez la condition pour surveiller la colonne notify.

Les règles d'alerte qui surveillent le résultat d'une requête SQL ne doivent comporter qu'une seule condition.

Règles d'alerte et BigQuery

Lorsqu'une règle d'alerte exécute une requête SQL, cette requête est exécutée à l'aide d'emplacements BigQuery réservés dans le projet Google Cloud où la règle d'alerte est définie. Pour en savoir plus, consultez la page Utiliser des réservations d'emplacements.

Pour qu'une stratégie d'alerte utilise des emplacements BigQuery réservés pour interroger une vue de journaux, le bucket de journaux qui héberge la vue de journaux doit être configuré pour disposer d'un ensemble de données BigQuery associé. Les ensembles de données associés permettent à BigQuery de lire les données du bucket de journaux et de vous permettre d'exécuter des fonctions BigQuery sur les données renvoyées par votre requête SQL.

Entrées de journal évaluées

Pour qu'une entrée de journal soit évaluée par la requête SQL d'une règle d'alerte, les deux conditions suivantes doivent être remplies :

  • L'horodatage de réception de l'entrée de journal, qui indique quand l'entrée de journal a été reçue par Cloud Logging, doit se trouver dans la période d'analyse de la règle d'alerte.
  • Le code temporel de l'entrée de journal, qui indique quand l'entrée de journal a été générée, doit être compris dans les 15 minutes de la période d'analyse.

Par exemple, votre règle d'alerte basée sur SQL dispose d'une période d'analyse de 60 minutes. L'Analyse de journaux exécute la requête SQL de la règle d'alerte à 13h30. Pour être incluse dans la requête, une entrée de journal doit répondre aux deux critères suivants :

  • Le code temporel reçu doit être compris entre 12h30 et 13h30.
  • Le code temporel doit être compris entre 12h15 et 13h45.

Lorsque vous exécutez une requête à partir de l'interface Log Analytics, toutes les entrées de journal de la période sélectionnée sont évaluées en fonction du code temporel de l'entrée de journal.

Période d'analyse et temps de propagation des incidents

Lorsqu'une règle d'alerte est planifiée pour évaluer sa condition, l'Analyse de journaux retarde l'exécution de la requête SQL de cinq minutes pour laisser le temps à Cloud Logging d'indexer les entrées de journal reçues pendant la période d'analyse. Par exemple, si la règle d'alerte utilise une période d'analyse qui se termine à 14h00, l'Analyse de journaux n'exécute la requête SQL qu'à 14h05.

Si la condition d'alerte est remplie après l'exécution de la requête, la propagation de l'incident dans le système peut prendre jusqu'à deux minutes supplémentaires.

Échecs de requête

Les requêtes émises par des règles d'alerte basées sur SQL peuvent échouer pour diverses raisons, y compris les suivantes :

  • Le compte de service de surveillance n'existe plus ou ne dispose plus des autorisations nécessaires pour lire les données de journal interrogées.

  • Le temps d'exécution de la requête dépasse cinq minutes.

  • Une erreur interne se produit.

Une requête ayant échoué génère une entrée de journal contenant l'ID de stratégie d'alerte et l'état de l'erreur. Vous pouvez utiliser une règle d'alerte basée sur les journaux pour créer une alerte lorsqu'une erreur est enregistrée.

Avant de commencer

Cette section suppose que vous avez mis à niveau votre bucket de journaux pour utiliser l'Analyse de journaux et que vous pouvez interroger et afficher vos données de journaux à l'aide de la page "Analyse de journaux". Il suppose également que vous avez déjà créé un ensemble de données BigQuery associé pour votre bucket de journaux.

Avant de créer une règle d'alerte basée sur SQL, procédez comme suit :

  1. Pour obtenir les autorisations nécessaires pour créer et gérer des règles d'alerte basées sur SQL, demandez à votre administrateur de vous accorder les rôles IAM suivants :

  2. Assurez-vous que le compte de service Monitoring existe et qu'il dispose des rôles suivants :

    1. Agent de service Monitoring (roles/monitoring.notificationServiceAgent) sur votre projet.
    2. Lecteur de données BigQuery (roles/bigquery.dataViewer) sur votre ensemble de données associé.

    Si le compte de service de surveillance n'existe pas, consultez la section Dépannage : Aucun compte de service de surveillance.

  3. Pour permettre à vos règles d'alerte basées sur SQL de s'exécuter sur des emplacements BigQuery réservés, procédez comme suit :
    1. Configurez des emplacements BigQuery réservés.
    2. Attribuez des emplacements réservés à votre Google Cloud projet.
  4. Configurez les canaux de notification que vous souhaitez utiliser pour recevoir des notifications d'incidents. À des fins de redondance, nous vous recommandons de créer plusieurs types de canaux de notification. Pour en savoir plus, consultez la page Créer et gérer des canaux de notification.

Créer une règle d'alerte basée sur SQL

Pour créer une règle d'alerte basée sur SQL, procédez comme suit :

ConsoleGoogle Cloud

  1. Dans la console Google Cloud , accédez à la page Analyse de journaux :

    Accéder à l'Analyse de journaux

    Si vous utilisez la barre de recherche pour trouver cette page, sélectionnez le résultat dont le sous-titre est Logging.

  2. Sur la page Log Analytics, dans l'éditeur de requête, saisissez une requête SQL pour une vue des journaux.

    Pour en savoir plus sur l'écriture de requêtes SQL pour les vues de journaux, consultez la section Interroger une vue de journaux.

  3. Dans la barre d'outils, cliquez sur Exécuter dans BigQuery.

    Log Analytics exécute votre requête sur le moteur BigQuery et affiche les résultats dans le tableau Résultats.

    Si l'option Exécuter sur BigQuery ne s'affiche pas, cliquez sur Sélectionner un moteur de requêtes, puis sur BigQuery. Le bouton Exécuter la requête est remplacé par Exécuter sur BigQuery.

  4. Dans le tableau Résultats de la page Log Analytics, cliquez sur  Créer une alerte.

    La page Log Analytics affiche la fenêtre Créer une règle d'alerte SQL, qui affiche votre requête sous la section Requête SQL.

  5. Dans la section Condition d'alerte, configurez la condition et la planification de votre règle d'alerte.

  6. Configurez les détails de l'alerte de votre règle d'alerte.

    1. Ajoutez des canaux de notification et configurez le contenu des notifications, comme une ligne d'objet personnalisée.

    2. Facultatif : Ajoutez des libellés de règles d'alerte et de la documentation.

    3. Cliquez sur Suivant.

  7. Examinez votre règle d'alerte, puis créez-la en cliquant sur Enregistrer.

API Cloud Monitoring

Utilisez la méthode alertPolicies.create pour créer des règles d'alerte par programmation. Le type Condition de votre règle d'alerte doit être conditionSql, qui est une instance de SqlCondition. Ce type de condition permet de définir les conditions de votre règle d'alerte avec SQL.

Pour définir la planification, définissez une valeur periodicity pour l'un des champs minutes, hours ou days. Par exemple, si vous souhaitez que la requête s'exécute toutes les 12 heures, définissez la périodicité du champ hours sur 12.

Pour définir la condition, utilisez les champs suivants :

  • boolean_test : configure la stratégie d'alerte afin que sa condition soit remplie lorsqu'une ligne d'une colonne booléenne dans le tableau des résultats de la requête contient une valeur "true".
  • row_count_test : configure la stratégie d'alerte afin que sa condition soit remplie lorsque le nombre de lignes dans le tableau des résultats de la requête atteint un certain seuil.

Pour obtenir la liste complète des champs et des définitions, consultez SqlCondition dans la documentation de l'API Cloud Monitoring.

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.

Terraform

  1. Installez et configurez Terraform pour votre projet. Pour les configurations App Hub, sélectionnez le projet hôte App Hub ou le projet de gestion du dossier compatible avec les applications.

  2. Dans Cloud Shell, accédez au répertoire contenant votre configuration Terraform.

  3. Dans votre configuration Terraform, configurez une instance de la ressource google_monitoring_alert_policy, y compris condition_sql.

  4. Dans Cloud Shell, saisissez terraform apply.

Pour modifier votre règle d'alerte, apportez les modifications nécessaires, puis réappliquez la configuration Terraform. Pour en savoir plus, consultez la section Gérer les règles d'alerte avec Terraform.

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

Limites

  • Vous pouvez avoir une condition par règle d'alerte basée sur SQL.

  • Les règles d'alerte basées sur SQL ne peuvent pas interroger une vue d'analyse.

  • Les requêtes émises par des règles d'alerte basées sur SQL échouent lorsque leur durée d'exécution dépasse cinq minutes.

  • Un délai de jusqu'à sept minutes, plus le temps d'exécution de la requête, s'écoule entre le moment où une requête est planifiée et celui où un incident est créé.

Pour obtenir la liste complète des limites associées aux règles d'alerte, consultez la section Limites de surveillance.

Tarifs

Pour en savoir plus sur les tarifs, consultez les documents suivants :

Étapes suivantes