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