Monitora i risultati delle query SQL con un criterio di avviso

Questo documento spiega come creare una 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 visualizzazione log. Il criterio di avviso ti informa quando il risultato della query soddisfa le condizioni specificate. Ad esempio, potresti 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 Analisi dei log vengono eseguiti su un motore BigQuery. Pertanto, i dati su cui viene eseguita la 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 Analytics.

Per informazioni generali su Analisi dei log, vedi 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 relativa a un incidente. Esistono tre approcci diversi che puoi utilizzare per ricevere una notifica quando nei dati di log vengono visualizzati contenuti o pattern:

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

  • Per monitorare gli eventi nei dati voce di log, puoi creare una metrica basata sui log e poi creare una criterio di avviso per monitorare la metrica. Questi tipi di criteri di avviso sono efficaci quando vuoi monitorare le tendenze nei dativoce di logg nel tempo. Tuttavia, non sono 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 creare un set di dati BigQuery collegato per quel bucket di log. Successivamente, utilizzi Analisi dei log, che supporta le query SQL, per eseguire query su una visualizzazione dei log nel bucket di log. Infine, crei la criterio di avviso per monitorare i risultati della query SQL. Questo tipo di criterio di avviso è chiamato policy di avviso basata su SQL.

I criteri di avviso basati su SQL sono più efficaci per valutare valori esatti in più voci di log. Se vuoi valutare singole voci di log, crea un criterio di avviso basato su log.

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

Componenti dei criteri di avviso

Una criterio di avviso basata su SQL contiene una condizione e una pianificazione:

  • La condizione contiene la query, ovvero una query SQL che esegue query su una visualizzazione log. La condizione definisce anche le circostanze in cui il risultato della query fa sì che Monitoring crei un incidente.

  • La pianificazione definisce la frequenza con cui la query viene eseguita dal criterio di avviso. La pianificazione definisce anche la dimensione della finestra di analisi, ovvero un filtro che seleziona solo le voci di log ricevute dall'ultima valutazione della query. Ad esempio, se imposti la pianificazione su 60 minuti, la query viene eseguita ogni 60 minuti utilizzando una finestra di ricerca che seleziona le voci di log più recenti di 60 minuti.

I criteri di avviso contengono anche un elenco di canali di notifica. Quando la condizione del criterio di avviso viene soddisfatta, Cloud Monitoring crea un incidente e poi invia notifiche sull'incidente tramite questi canali. Un incidente è un record dei dati che hanno soddisfatto la 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 le policy di avviso basate 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 inferiore a 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à superiore a 200. Crea una query che generi report sulle voci di log la cui gravità è superiore a 200. Quindi, configura una condizione, seleziona la Soglia conteggio righe e imposta la soglia su 50.

  • Booleano: la condizione viene 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. Crea 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 questa percentuale supera il 25%. Successivamente, crea una condizione, imposta il tipo su Booleano 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 progetto Google Cloud in cui è definita la criterio di avviso. Per saperne di più, vedi Utilizzare le prenotazioni di slot.

Affinché un criterio di avviso utilizzi gli slot BigQuery riservati per eseguire query su una visualizzazione log, il bucket di log che ospita la visualizzazione log 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 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 il momento in cui la voce di log è stata ricevuta da Cloud Logging, deve rientrare nella finestra di analisi retrospettiva della criterio di avviso.
  • Il timestamp della voce di log, che registra il momento in cui è stata generata, deve rientrare nella finestra di analisi retrospettiva di 15 minuti.

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 corrispondere a entrambi i seguenti criteri:

  • Il timestamp di ricezione 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 una criterio di avviso è pianificata per valutare la sua condizione, 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 di ricerca. Ad esempio, se il criterio di avviso utilizza una finestra di analisi a ritroso 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 delle query

Le query emesse dai criteri di avviso basati su SQL possono non riuscire 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 di log sottoposti a 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 policy di avviso e lo stato di 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, presuppone che tu abbia già creato un set di dati BigQuery collegato per il tuo bucket di log.

Prima di creare una criterio di avviso basata su SQL, completa i seguenti passaggi:

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

  2. Verifica che l'account di servizio Monitoring esista e che disponga dei seguenti ruoli:

    1. Agente del servizio di monitoraggio (roles/monitoring.notificationServiceAgent) sul tuo progetto.
    2. Visualizzatore dati BigQuery (roles/bigquery.dataViewer) sul set di dati collegato.

    Se il service account Monitoring non esiste, consulta Risoluzione dei problemi: nessun service account Monitoring.

  3. Per consentire l'esecuzione delle policy di avviso basate su SQL negli slot BigQuery riservati, esegui le seguenti operazioni:
    1. Configura gli slot BigQuery riservati.
    2. Assegna gli slot riservati al tuo progetto Google Cloud .
  4. Configura i canali di notifica che vuoi utilizzare per ricevere le 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 Crea e gestisci canali di notifica.

Crea un criterio di avviso basato su SQL

Per creare un criterio di avviso basato su SQL:

ConsoleGoogle 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 visualizzazione log.

    Per ulteriori informazioni sulla scrittura di 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 mostra i risultati nella tabella Risultati.

    Se Esegui su BigQuery non viene visualizzato, fai clic su Seleziona motore di query e poi su BigQuery. Il pulsante Esegui query cambia in Esegui su BigQuery.

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

    La pagina Analisi dei log mostra 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 etichette dei criteri di avviso e documentazione.

    3. Fai clic su Avanti.

  7. Rivedi il criterio di avviso e crealo facendo clic su Salva.

API Cloud Monitoring

Utilizza il metodo alertPolicies.create per creare programmaticamente criteri di avviso. Il tipo di Condition della tua criterio di avviso deve essere conditionSql, che è un'istanza di SqlCondition. Questo tipo di condizione consente di definire le condizioni della tua criterio di avvisoo 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 sua 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 sua condizione venga soddisfatta quando il numero di righe nella tabella dei risultati della query raggiunge una determinata soglia.

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

Per saperne di più sull'API Monitoring per le policy di avviso, consulta Gestione delle policy 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 app.

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

  3. Nella configurazione 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 riapplica la configurazione Terraform. Per maggiori informazioni, consulta Gestire le policy 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 basata su SQL.

  • Le policy di avviso basate su SQL non possono eseguire query su una vista Analytics.

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

  • Tra la pianificazione di una query e la creazione di un incidente intercorre un ritardo di un massimo di sette minuti, più il tempo di esecuzione della query.

Per un elenco completo dei limiti associati alle norme di avviso, consulta Limiti di Monitoring.

Prezzi

Per informazioni sui prezzi, consulta i seguenti documenti:

Passaggi successivi