Risolvere i problemi relativi ai criteri di avviso MQL

Questa pagina spiega perché alcuni criteri di avviso con condizioni basate su Monitoring Query Language (MQL) potrebbero comportarsi in modo diverso da quanto previsto e offre possibili rimedi in queste situazioni.

Lacune nei dati

Hai creato un criterio di avviso con una condizione basata su MQL e i risultati della query MQL mostrano un divario imprevisto nei dati segnalati.

Gli intervalli vuoti vengono visualizzati nei dati allineati quando un calcolo genera un valore null in un determinato timestamp. Ad esempio, la seguente tabella di dati è correlata a una query con un periodo di 30 secondi:

Tabella A1

Timestamp Valore
00:00:00 1
00:00:30 2
00:01:30 3
00:02:00 4

Poiché hai un periodo di 30 secondi, dovresti vedere un timestamp a 00:01:00. Lacune come questa possono verificarsi per molti motivi.

Intervalli vuoti dovuti all'allineamento

Finestre di allineamento troppo strette possono causare lacune nei dati. Ad esempio, la seguente tabella di dati non elaborati delle metriche non allineate viene scritta ogni 30 secondi circa.

Tabella B1

Timestamp Valore
00:00:01 1
00:00:28 2
00:01:01 3
00:01:32 4

Se alle 00:02:00 esegui una query che allinea i dati utilizzando un'operazione next_older(30s), riceverai il seguente output, con un divario di dati a 00:01:00:

Tabella B2

Timestamp Valore
00:00:30 2
00:00:28 3
00:01:01 4

Questo divario nei dati si verifica perché nessun punto nei dati non elaborati rientra nella finestra di 30 secondi che termina a 00:01:00. Per evitare uno spazio vuoto come questo, utilizza una finestra più grande. Ad esempio, un'operazione next_older(1m) produce una tabella senza lacune nei dati:

Tabella B3

Timestamp Valore
00:00:01 1
00:00:28 2
00:01:01 3
00:01:32 4

In generale, se i dati vengono scritti ogni S secondi, utilizza una finestra di allineamento più grande di S. In questo modo, puoi tenere conto di una distribuzione non uniforme dei punti dati nel tempo.

Lacune dovute alle operazioni delle tabelle

Alcune operazioni sulle tabelle possono generare lacune impreviste. Ad esempio, l'operazione join produce output solo in corrispondenza dei timestamp che hanno un valore in tutte le tabelle di input.

Operazioni tabella come join possono generare lacune. Ad esempio, unisci le seguenti due tabelle allineate:

Tabella C1

Timestamp Valore
00:00:30 2
00:01:30 3
00:02:00 4

Tabella C2

Timestamp Valore
00:00:30 4
00:01:00 3
00:01:30 2
00:02:00 1

Riceverai quindi l'output seguente:

Tabella C3

Timestamp Valore A Valore B
00:00:30 1 4
00:01:30 2 2
00:02:00 3 1

Questa tabella non ha un valore in 00:01:00 a causa dell'assenza di un valore in 00:01:00 nella tabella C1.

Intervalli dovuti a valori mancanti

Alcune funzioni producono lacune quando l'output non può essere convertito o è indefinito. Ad esempio, applichi value.string_to_int64 alla seguente tabella di valori stringa:

Tabella D1

Timestamp Valore
00:00:30 "4"
00:01:00 "3"
00:01:30 'init'
00:02:00 "1"

La tabella risultante contiene un gap al minuto 00:01:30 perché MQL non può convertire 'init' in un numero intero:

Tabella D2

Timestamp Valore
00:00:30 4
00:01:00 3
00:01:30 null
00:02:00 1

Per evitare lacune nei dati a causa di valori errati o mancanti, utilizza le funzioni has_value o or_else per gestire questi valori.

has_value restituisce false se il relativo argomento ha un valore nullo. In caso contrario, restituisce true. Ad esempio, se applichi value has_value(1 / val()) alla tabella D2, i risultati non avranno lacune:

Tabella D3

Timestamp Valore
00:00:30 true
00:01:00 true
00:01:30 false
00:02:00 true

L'avviso di soglia si attiva quando il grafico MQL mostra che la soglia non è stata superata

Vuoi ricevere una notifica se una macchina virtuale (VM) presenta grandi fluttuazioni nell'utilizzo della CPU, quindi crei un criterio di avviso che monitori la metrica compute.googleapis.com/instance/cpu/utilization. Crea e configura la condizione per generare un incidente quando l'utilizzo della CPU ogni sei ore supera una soglia del 50%. La tua condizione utilizza la seguente query:

fetch gce_instance
| metric 'compute.googleapis.com/instance/cpu/utilization'
| group_by 5m, [value_utilization_mean: mean(value.utilization)]
| align delta_gauge(6h)
| condition val() > 0.5

Ricevi un avviso dopo 30 secondi. Tuttavia, il grafico MQL mostra che il delta di utilizzo non è superiore alla soglia.

I criteri di avviso hanno una finestra di output di 30 secondi. Questo periodo non può essere sovrascritto lasciando il periodo non definito o definendo un periodo diverso nella query. Ad esempio, le seguenti query utilizzano ancora una finestra di output di 30 secondi:

fetch gce_instance
| metric 'compute.googleapis.com/instance/cpu/utilization'
| group_by 5m, [value_utilization_mean: mean(value.utilization)]
| align delta_gauge(6h) # period not 30 seconds
| condition val() > 0.5
fetch gce_instance
| metric 'compute.googleapis.com/instance/cpu/utilization'
| group_by 5m, [value_utilization_mean: mean(value.utilization)]
| align delta_gauge() # undefined period
| condition val() > 0.5

La soglia della metrica è stata superata nei primi 30 secondi della valutazione, quindi Cloud Monitoring ha inviato un avviso. Per evitare questo problema, aggiungi | every 30s alla fine della query per verificare che la finestra di output produca i risultati previsti. Ad esempio:

fetch gce_instance
| metric 'compute.googleapis.com/instance/cpu/utilization'
| group_by 5m, [value_utilization_mean: mean(value.utilization)]
| align delta_gauge()
| every 30s # explicit 30 second output window
| condition val() > 0.5

Errore: impossibile salvare il criterio di avviso. La richiesta contiene un argomento non valido.

Hai creato un criterio di avviso con una condizione basata su MQL. Quando salvi il criterio di avviso, viene visualizzato il seguente messaggio di errore:

Error: Unable to save alerting policy. Request contains an invalid argument.

Alcune operazioni sulle tabelle MQL, come group_by, richiedono l'allineamento degli input. Se la query non allinea gli input, MQL allinea automaticamente i dati. Tuttavia, questo allineamento automatico a volte genera argomenti non validi.

Per evitare questo problema, se la query utilizza un'operazione di tabella, assicurati che la query includa l'allineamento dei dati. Per un elenco delle funzioni di allineamento dei dati, consulta la sezione relativa all'allineamento nella documentazione di riferimento di MQL.

La linea della soglia non viene visualizzata nel grafico MQL

Hai creato un criterio di avviso per soglia di metriche con una condizione basata su MQL. Tuttavia, la linea della soglia non viene visualizzata nel grafico MQL.

Cloud Monitoring traccia la linea di soglia solo quando la query contiene un'espressione booleana che confronta due valori, dove un valore è una colonna e un valore è un valore letterale. Ad esempio, la seguente espressione traccia una linea di soglia:

val() > 5'GBy'

Tuttavia, le seguenti espressioni non tracciano una linea di soglia in un grafico:

val(0) > val(1) #one of the values must be a literal
5 > 4 #one of the values must be a column
val() #the expression must be a comparison