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 se vuoi ricevere notifiche su eventi correlati alla sicurezza.

  • Per monitorare gli eventi nei dati delle voci 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 delle voci di log nel tempo. Tuttavia, non sono altrettanto efficaci se prevedi solo pochi eventi.

  • Per monitorare l'analisi aggregata dei dati delle voci 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 policy 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 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.

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 console Google Cloud.

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 policy di avviso esegue una query SQL, questa viene eseguita utilizzando gli slot BigQuery riservati nel progetto Google Cloud in cui è definita la policy 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.

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, il criterio di avviso basato su SQL ha una finestra temporale di 60 minuti. Analisi dei log esegue la query SQL della regola 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.

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 tue 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 dei log specifica: Crea un criterio IAM per la visualizzazione dei log o limita il ruolo Accesso alla visualizzazione dei log (roles/logging.viewAccessor) a una determinata visualizzazione dei 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 memorizzano queste viste di log per 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 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.

  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 Analisi dei log:

    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. (Facoltativo) Aggiungi le etichette dei criteri di avviso e la documentazione.

    2. Aggiungi i canali di notifica e poi 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 la pagina 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.

  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

Quando è pianificata la valutazione della condizione di un criterio di avviso, l'esecuzione della query SQL viene ritardata di cinque minuti per dare tempo a Cloud Logging di indicizzare le voci di log ricevute durante la finestra di consultazione. Ad esempio, se il criterio di avviso utilizza un periodo di tempo che termina alle 14:00, la query SQL non viene eseguita fino alle 14:05.

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

Prezzi

Per informazioni sui prezzi, consulta i seguenti documenti:

Passaggi successivi