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 eseguita in Log Analytics. Queste query sono scritte in SQL e devono eseguire query su una vista log. Il criterio di avviso ti informa quando il risultato della query soddisfa 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.

I criteri di avviso che crei dalla pagina Log Analytics vengono eseguiti su un motore BigQuery. Pertanto, i dati oggetto della query devono essere accessibili tramite un set di dati BigQuery collegato. Per questo motivo, queste query SQL possono eseguire query solo sulle visualizzazioni dei log. Non possono eseguire query sulle viste di analisi.

Per informazioni generali su Analisi dei log, consulta Eseguire query e analizzare i log con Analisi 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. Esistono tre diversi approcci che puoi utilizzare per ricevere una notifica quando vengono visualizzati contenuti o pattern nei dati dei log:

  • Per cercare una frase specifica nelle singole voci di log, 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 monitorare l'analisi aggregata dei dati voce di log, combina Analisi dei log con i criteri di avviso. In questo scenario, esegui l'upgrade di un bucket di log per utilizzare Log Analytics e crei un set di dati BigQuery collegato per quel bucket di log. Successivamente, utilizza Analisi dei log, che supporta le query SQL, per eseguire query su una visualizzazione dei log nel bucket di log. Infine, crea la criterio di avviso per monitorare i risultati delle query SQL. 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, crea un criterio di avviso basato su log.

La parte rimanente di questo documento descrive come utilizzare 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 comporta la creazione di un incidente da parte di Monitoraggio.

  • 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 i 60 minuti più recenti delle voci di log.

I criteri di avviso contengono anche un elenco di canali di notifica. Quando la condizione del criterio di avviso è soddisfatta, Cloud Monitoring crea un incidente e poi invia notifiche relative all'incidente tramite questi canali. 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 Google Cloud console.

Tipi di valutazione per i criteri di avviso basati su SQL

Le condizioni che monitorano il risultato di una query 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. Crei 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 una criterio di avviso esegue una query SQL, questa viene eseguita utilizzando gli slot BigQuery riservati nel Google Cloud progetto in cui è definita la 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 in modo da 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.

Voci di log valutate

Affinché una voce di log venga valutata dalla query SQL di un criterio di avviso, devono verificarsi entrambe le seguenti condizioni:

  • Il timestamp di ricezione della voce di log, che registra quando la voce di log è stata ricevuta da Cloud Logging, deve rientrare nel periodo di tempo del criterio di avviso.
  • Il timestamp della voce di log, che registra la data e l'ora di generazione della voce di log, deve rientrare nel periodo di 15 minuti successivo alla finestra temporale.

Ad esempio, la tua criterio di avviso basata su SQL ha una finestra temporale di 60 minuti. Analisi dei log esegue la query SQL della criterio di avviso alle 13:30. Per essere inclusa nella query, una voce di log deve soddisfare entrambi i seguenti criteri:

  • Il timestamp ricevuto deve essere compreso tra le 12:30 e le 13:30.
  • Il timestamp deve essere compreso tra le 12:15 e le 13:45.

Quando esegui una query dall'interfaccia di Log Analytics, tutte le voci di log nell'intervallo di tempo selezionato vengono valutate in base al timestamp della voce di log.

Finestra temporale e tempo di propagazione dell'incidente

Quando è pianificata la valutazione della condizione di un criterio di avviso, Log Analytics ritarda l'esecuzione della query SQL di cinque minuti per consentire a Cloud Logging di indicizzare le voci di log ricevute durante la finestra temporale. Ad esempio, se il criterio di avviso utilizza una finestra temporale che termina alle 14:00, Log Analytics non esegue la query SQL fino alle 14:05.

Se la condizione di avviso viene soddisfatta dopo l'esecuzione della query, possono essere necessari fino a due minuti aggiuntivi per la propagazione dell'incidente nel sistema.

Errori di query

Le query emesse dai criteri di avviso basati su SQL possono non andare a buon fine per vari motivi, tra cui:

  • L'account di servizio di monitoraggio non esiste più o non dispone più delle autorizzazioni necessarie per leggere i dati dei log su cui viene eseguita la query.

  • Il tempo di esecuzione della query supera i cinque minuti.

  • Si verifica un errore interno.

Una query non riuscita genera una voce di log contenente l'ID della norma di avviso e lo stato dell'errore. Puoi utilizzare un criterio di avviso basato su log per creare un avviso quando viene registrato un errore.

Prima di iniziare

Questa sezione presuppone che tu abbia eseguito l'upgrade del bucket di log per utilizzare Analisi dei log e che tu possa eseguire query e visualizzare i dati dei log utilizzando la pagina Analisi dei log. Inoltre, assume che tu abbia già creato un set di dati BigQuery collegato per il tuo bucket di log.

Prima di creare un criterio di avviso basato su SQL, completa i seguenti passaggi:

  1. 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:

  2. Assicurati che il service account di monitoraggio esista e che abbia i seguenti ruoli:

    1. Agente di servizio Monitoring (roles/monitoring.notificationServiceAgent) nel tuo progetto.
    2. 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.

  3. Per consentire l'esecuzione dei criteri di avviso basati su SQL negli slot BigQuery riservati, svolgi i seguenti passaggi:
    1. Configura gli slot BigQuery riservati.
    2. Assegna gli slot riservati al tuo Google Cloud progetto.
  4. 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:

Google Cloud console

  1. Nella Google Cloud console, 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 di query, inserisci una query SQL per una vista 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 policy 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. Aggiungi canali di notifica e configura i contenuti delle notifiche, ad esempio una riga dell'oggetto personalizzata.

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

    3. Fai clic su Avanti.

  7. Esamina 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 Gestire i criteri di avviso tramite API.

Terraform

  1. Installa e configura Terraform per il tuo progetto. Per le configurazioni di App Hub, seleziona il progetto host di App Hub o il progetto di gestione della cartella abilitata per le app.

  2. In Cloud Shell, vai alla directory contenente la configurazione Terraform.

  3. Nella configurazione di Terraform, configura un'istanza della risorsa google_monitoring_alert_policy, inclusa condition_sql.

  4. In Cloud Shell, inserisci terraform apply.

Per modificare il criterio di avviso, apporta le modifiche e poi applica di nuovo la configurazione Terraform. Per ulteriori informazioni, consulta Gestire i criteri di avviso con Terraform.

Per informazioni generali sull'utilizzo di Google Cloud con Terraform, consulta Terraform con Google Cloud.

Limitazioni

  • Puoi avere una condizione per ogni criterio di avviso basato su SQL.

  • I criteri di avviso basati su SQL non possono eseguire query su una visualizzazione di analisi.

  • Le query emesse dalle policy di avviso basate su SQL non vanno a buon fine se il tempo di esecuzione supera i cinque minuti.

  • Tra il momento in cui una query viene pianificata e quello in cui viene creato un incidente, trascorre un ritardo di fino a sette minuti, oltre al tempo di esecuzione della query.

Per un elenco completo dei limiti associati ai criteri di avviso, consulta Limiti di monitoraggio.

Prezzi

Per informazioni sui prezzi, consulta i seguenti documenti:

Passaggi successivi