Monitora i risultati delle query SQL con un criterio di avviso

Questo documento spiega come creare un criterio di avviso per monitorare i risultati di una query SQL. Il criterio di avviso ti invia una notifica quando il risultato della querysoddisfa le condizioni specificate. Ad esempio, puoi configurare un criterio di avviso in modo da ricevere una notifica quando almeno il 25% delle voci di log in un determinato periodo ha una gravità pari a ERROR.

Esistono tre diversi approcci che puoi utilizzare per ricevere una notifica quando vengono visualizzati contenuti o pattern nei dati dei log:

  • Per eseguire la scansione di singole voci di log alla ricerca di una frase specifica, crea un criterio di avviso basato su log. Utilizza questi criteri di avviso quando vuoi ricevere notifiche su eventi correlati alla sicurezza.

  • Per monitorare gli eventi nei dati voce di log, puoi creare una metrica basata su log e poi un criterio di avviso per monitorare la metrica. Questi tipi di criteri di avviso sono efficaci se vuoi monitorare le tendenze dei dati voce di log nel tempo. Tuttavia, non sono altrettanto efficaci se prevedi solo pochi eventi.

  • Per eseguire un'analisi aggregata dei dati delle voci di voce di log e monitorare i risultati, scrivi una query SQL in Analisi dei log per analizzare i dati voce di log. Quindi, crea un criterio di avviso per monitorare la tabella dei risultati della query. Questo tipo di criterio di avviso è chiamato criterio di avviso basato su SQL.

    I criteri di avviso basati su SQL sono più efficaci per valutare valori esatti in più voci di log. Se vuoi valutare le singole voci di log e non devi monitorare valori esatti, crea criteri di avviso basati su log che utilizzano il linguaggio di query di Logging.

La parte rimanente di questo documento descrive come utilizzare i criteri di avviso basati su SQL.

Per informazioni generali su Log Analytics, consulta Panoramica delle query e della visualizzazione dei log.

Come funzionano i criteri di avviso

Un criterio di avviso descrive le circostanze in cui vuoi ricevere un avviso e come vuoi ricevere una notifica di un incidente. Un criterio di avviso può monitorare i risultati di una query SQL. Quando il risultato della query soddisfa la condizione del criterio di avviso, Cloud Monitoring crea un incidente e poi invia notifiche relative all'incidente tramite i canali di notifica.

Un incidente è un record dei dati che hanno causato il verificarsi della condizione, insieme ad altre informazioni pertinenti. Queste informazioni possono aiutarti a risolvere i problemi che hanno causato l'incidente. Puoi visualizzare l'incidente utilizzando la console Google Cloud. Per ulteriori informazioni, consulta Incidenti per i criteri di avviso basati su SQL.

Componenti dei criteri di avviso

Un criterio di avviso basato su SQL contiene una condizione e una pianificazione:

  • La condizione contiene la query, ovvero una query SQL che esegue query su una vista log. La condizione definisce anche le circostanze in cui il risultato della query induce il monitoraggio a creare un incidente.

  • L'attributo schedule definisce la frequenza con cui il criterio di avviso esegue la query. La pianificazione definisce anche la dimensione della finestra temporale, ovvero un filtro che seleziona solo le voci di log ricevute dall'ultima volta che la query è stata valutata. Ad esempio, se impostate la pianificazione su 60 minuti, la query viene eseguita ogni 60 minuti utilizzando una finestra temporale che seleziona gli ultimi 60 minuti di voci di log.

Tipi di valutazione per i criteri di avviso SQL

Le condizioni che monitorano un risultato SQL supportano due tipi di valutazione:

  • Soglia di conteggio righe: la condizione è soddisfatta quando il numero di righe nel risultato della query è maggiore, uguale o minore di un valore di soglia.

    Ad esempio, supponiamo che tu voglia ricevere una notifica quando più di 50 voci di log nella finestra temporale hanno una gravità maggiore di 200. Creando una query che registri le voci di log la cui gravità è superiore a 200. Poi, configura una condizione, seleziona Soglia di conteggio righe e imposta la soglia su 50.

  • Booleano: la condizione è soddisfatta quando una colonna booleana specifica nella tabella dei risultati della query contiene una riga con un valore true.

    Ad esempio, supponiamo che tu voglia ricevere una notifica quando più del 25% delle voci di log nella finestra temporale ha una gravità pari a ERROR. Creiamo una query che calcola la percentuale di voci di log il cui livello di gravità è ERROR. I risultati della query scrivono true nella colonna notify quando la percentuale supera il 25%. Poi, crea una condizione, imposta il tipo su Boolean e configura la condizione per monitorare la colonna notify.

I criteri di avviso che monitorano il risultato di una query SQL devono avere una sola condizione.

Criteri di avviso e BigQuery

Quando un criterio di avviso esegue una query SQL, questa viene eseguita utilizzando gli slot BigQuery riservati nel progetto Google Cloud in cui è definito il criterio di avviso. Per ulteriori informazioni, consulta Gestire le prenotazioni degli slot.

Affinché un criterio di avviso utilizzi gli slot BigQuery riservati per eseguire query su una visualizzazione di log, il bucket di log che la ospita deve essere configurato per avere un set di dati BigQuery collegato. I set di dati collegati consentono a BigQuery di leggere i dati nel bucket dei log e ti consentono di eseguire funzioni BigQuery sui dati restituiti dalla query SQL.

Prima di iniziare

  1. Per ottenere le autorizzazioni necessarie per utilizzare Log Analytics, chiedi all'amministratore di concederti i seguenti ruoli IAM per i tuoi bucket di log o le visualizzazioni log:

    • Per eseguire query sui bucket di log _Required e _Default: Visualizzatore log (roles/logging.viewer).
    • Per eseguire query su tutte le visualizzazioni dei log in un progetto: Logs View Accessor (roles/logging.viewAccessor).
    • Per eseguire query sui log in una visualizzazione di log specifica: Crea un criterio IAM per la visualizzazione di log o limita il ruolo Accesso alla visualizzazione di log (roles/logging.viewAccessor) a una determinata visualizzazione di log. Per ulteriori informazioni, vedi Controllare l'accesso a una visualizzazione dei log.

    Per informazioni su altri ruoli, consulta Ruoli di logging.
  2. Per le viste di log su cui vuoi eseguire query, vai alla pagina Archiviazione dei log e verifica che sia stato eseguito l'upgrade dei bucket di log che le archiviano in modo da utilizzare Analisi dei log. Se necessario, esegui l'upgrade del bucket di log.
  3. Nella console Google Cloud, vai alla pagina Archiviazione dei log:

    Vai ad Archiviazione dei log

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Logging.

  4. Per consentire l'esecuzione di query sugli slot BigQuery riservati, svolgi i seguenti passaggi:
    1. Se il bucket di log su cui vuoi eseguire query non ha un set di dati collegato, creane uno.
    2. Configura gli slot BigQuery riservati e assegnali al tuo progetto Google Cloud.

  5. Per ottenere le autorizzazioni necessarie per creare e gestire i criteri di avviso basati su SQL, chiedi all'amministratore di concederti i seguenti ruoli IAM:

    Per informazioni su come concedere l'accesso a un set di dati, vedi Concedere l'accesso a un set di dati.

  6. Assicurati che l'account di servizio di monitoraggio esista e che abbia i seguenti ruoli:

    1. Ruolo Agente di servizio Monitoring (monitoring.notificationServiceAgent) nel progetto.
    2. Ruolo Visualizzatore dati BigQuery (roles/bigquery.dataViewer) nel set di dati collegato.

    Se l'account di servizio di monitoraggio non esiste, consulta Risoluzione dei problemi: nessun account di servizio di monitoraggio.

  7. Configura i canali di notifica che vuoi utilizzare per ricevere eventuali notifiche relative agli incidenti. Per motivi di ridondanza, ti consigliamo di creare più tipi di canali di notifica. Per saperne di più, consulta la pagina Creare e gestire i canali di notifica.

Creare un criterio di avviso basato su SQL

Per creare un criterio di avviso basato su SQL, segui questi passaggi:

Console Google Cloud

  1. Nella console Google Cloud, vai alla pagina Log Analytics:

    Vai ad Analisi dei log

    Se utilizzi la barra di ricerca per trovare questa pagina, seleziona il risultato con il sottotitolo Logging.

  2. Nella pagina Log Analytics, nell'editor delle query, inserisci una query SQL per una vista dei log.

    Per ulteriori informazioni su come scrivere query SQL per le visualizzazioni dei log, consulta Eseguire query su una visualizzazione dei log.

  3. Nella barra degli strumenti, fai clic su Esegui su BigQuery.

    Log Analytics esegue la query sul motore BigQuery e visualizza i risultati nella tabella Risultati.

    Se l'opzione Esegui su BigQuery non viene visualizzata, fai clic su Seleziona il motore di query e poi su BigQuery. Il pulsante Esegui query diventa Esegui su BigQuery.

  4. Nella tabella Risultati della pagina Log Analytics, fai clic su  Crea avviso.

    Nella pagina Log Analytics viene visualizzata la finestra Crea criterio di avviso SQL, che mostra la query nella sezione Query SQL.

  5. Nella sezione Condizione di avviso, configura la condizione e la pianificazione del criterio di avviso.

  6. Configura i dettagli dell'avviso del criterio di avviso.

    1. (Facoltativo) Aggiungi le etichette dei criteri di avviso e la documentazione.

    2. Aggiungi i canali di notifica e poi fai clic su Avanti.

  7. Rivedi il criterio di avviso e poi creane uno facendo clic su Salva.

API Cloud Monitoring

Utilizza il metodo alertPolicies.create per creare programmatically i criteri di avviso. Il tipo Condition del criterio di avviso deve essere conditionSql, che è un'istanza di SqlCondition. Questo tipo di condizione consente di definire le condizioni del criterio di avviso con SQL.

Per definire la pianificazione, imposta un valore periodicity per uno dei campi minutes, hours o days. Ad esempio, se vuoi che la query venga eseguita ogni 12 ore, imposta la periodicità del campo hours su 12.

Per definire la condizione, utilizza i seguenti campi:

  • boolean_test: configura il criterio di avviso in modo che la relativa condizione sia soddisfatta quando una riga di una colonna booleana nella tabella dei risultati della query contiene un valore true.
  • row_count_test: configura il criterio di avviso in modo che la relativa condizione sia soddisfatta quando il numero di righe nella tabella dei risultati della query raggiunge una determinata soglia.

Per un elenco completo dei campi e delle definizioni, consulta SqlCondition nella documentazione dell'API Cloud Monitoring.

Per saperne di più sull'API Monitoring per i criteri di avviso, consulta la pagina Gestire i criteri di avviso tramite API.

Limitazioni

Quando un criterio di avviso esegue una query SQL pianificata, introduce un ritardo di 15 minuti per consentire la propagazione delle voci di log al bucket dei log. Se l'arrivo delle voci di log richiede più di 15 minuti, la criterio di avviso non le valuta.

L'introduzione di un ritardo di 15 minuti influisce sul tempo che intercorre tra la generazione di una voce di log e il rilevamento da parte del monitoraggio del verificarsi di una condizione. Ad esempio, supponiamo che tu abbia una query SQL pianificata per essere eseguita ogni 30 minuti. Quando il criterio di avviso valuta periodicamente la condizione, esegue query sulle voci di log con timestamp compresi tra 15 e 45 minuti fa.

Per i limiti associati ai criteri di avviso, consulta Limiti di monitoraggio.

Prezzi

Per informazioni sui prezzi, consulta i seguenti documenti:

Passaggi successivi

Per informazioni sulla creazione di grafici dai dati di Analisi dei log, consulta Graficare i risultati delle query con Analisi dei log.