Riferimento del linguaggio MQL (Monitoring Query Language)
Comprendere la sintassi delle espressioni MQL (Monitoring Query Language) ed esaminare i valori validi per gli operatori di intervallo, statistica e predicato nelle espressioni MQL.
Per informazioni sulla modifica di MQL , vedere Modifica dell'espressione MQL per una query. Per recuperare un intervallo di tempo specifico, ad esempio l'ultima ora, vedere Selezione di un intervallo di tempo Nondefault per una query.
Sintassi MQL
La sintassi MQL regola le espressioni per l'esecuzione di query sulle metriche pubblicate nel servizio di monitoraggio. Le espressioni MQL definiscono query (incluse query di allarme). MQL agisce su dati aggregati.
Nel diagramma seguente sono illustrati i componenti necessari e i componenti facoltativi comuni.
Alcuni componenti possono essere visualizzati in un'espressione MQL più volte. Ad esempio, è possibile utilizzare due funzioni di raggruppamento (come in groupBy()
, seguite da una statistica, seguita da grouping()
). È inoltre possibile interrogazioni nest.
È inoltre possibile partecipare a più query in un'unica query.
Per gli allarmi nella Console, la statistica absent()
è elencata in Operatore. Vedere Creazione di un allarme assenza.
Per selezionare la statistica absent()
nella console, vedere le istruzioni specifiche della pagina riportate di seguito.
- Pagina Crea allarme o Modifica allarme: in modalità Base, selezionare Inviato da Operatore in Regola trigger. In modalità avanzata (selezionare Passa alla modalità avanzata), aggiornare l'espressione MQL.
- Pagina Esplorazione metriche: selezionare Modalità avanzata per utilizzare MQL.
- Pagina Metriche servizio: Aprire la query in Metrics Explorer, quindi selezionare Modalità avanzata per utilizzare MQL.
Per informazioni sulla lettura dei diagrammi ferroviari, vedere Reading Railroad Diagrams.
Valori validi per espressioni MQL
Rivedere i valori validi per gli operatori intervallo, statistica e predicato nelle espressioni MQL.
Intervallo
Insieme all'intervallo, considerare la risoluzione e l'intervallo di tempo.
I valori supportati per l'intervallo dipendono dall'intervallo di tempo specificato nella query della metrica (non applicabile alle query di allarme). Sono supportati più valori di intervallo per intervalli di tempo più piccoli. Ad esempio, se si seleziona un'ora per l'intervallo di tempo, sono supportati tutti i valori di intervallo. Se si selezionano 90 giorni per l'intervallo di tempo, sono supportati solo i valori di intervallo compresi tra 1 ora e 1 giorno.
Selezionare un intervallo di allarme basato sulla frequenza alla quale la metrica viene emessa. Ad esempio, una metrica emessa ogni cinque minuti richiede un intervallo di allarme di 5 minuti o superiore. La maggior parte delle metriche viene emessa ogni minuto, il che significa che la maggior parte delle metriche supporta qualsiasi intervallo di allarme. Per determinare intervalli di allarme validi per una metrica specifica, controllare il riferimento alla metrica del servizio pertinente.
- Esempio: intervallo di un minuto (
1m
) -
CpuUtilization[1m].mean()
Di seguito sono riportati intervalli validi per le espressioni MQL: 1m
-60m
, 1h
-24h
, 1d
Per istruzioni, vedere Selezione dell'intervallo per una query.
Per le query sulle metriche, l'intervallo selezionato determina l'risoluzione predefinita della richiesta, che determina l'intervallo di tempo massimo di dati restituiti.
Per le query di allarme, l'intervallo specificato non ha effetto sulla risoluzione della richiesta. L'unico valore valido della risoluzione per una richiesta di query di allarme è 1m
. Per ulteriori informazioni sul parametro di risoluzione utilizzato nelle query di allarme, vedere Allarme.
L'intervallo di tempo massimo restituito per una query metrica dipende dalla risoluzione. Per impostazione predefinita, per le query di metrica, la risoluzione è uguale all'intervallo di query.
L'intervallo di tempo massimo viene calcolato utilizzando l'ora corrente, indipendentemente dall'ora di fine specificata. Di seguito sono riportati gli intervalli di tempo massimi restituiti per ogni selezione di intervalli disponibile nella console (modalità di base).
Intervallo | Risoluzione predefinita (query metriche) | Intervallo di tempo massimo restituito |
---|---|---|
1 minuto Automatico (pagina Metriche servizio)*, quando il periodo di tempo selezionato è minore o uguale a 6 ore |
1 minuto | 7 giorni |
5 minuti Automatico (pagina Metriche servizio)*, quando il periodo di tempo selezionato è superiore a 6 ore e inferiore a 36 ore |
5 minuti | 30 giorni |
1 ora Automatico (pagina Metriche servizio)*, quando il periodo di tempo selezionato è superiore a 36 ore |
1 ora | 90 giorni |
1 giorno |
1 giorno | 90 giorni |
* L'intervallo di tempo massimo restituito quando si seleziona Automatico solo per la pagina Intervallo (Metriche servizio) è determinato dalla selezione automatica dell'intervallo. La selezione automatica dell'intervallo si basa sul periodo di tempo selezionato.
Per specificare una risoluzione non predefinita diversa dall'intervallo, vedere Selezione di una risoluzione non predefinita per una query.
- Esempio 1 per dati restituiti
- Intervallo di un minuto e risoluzione fino all'ora corrente, inviato alle 10:00 dell'8 gennaio. Non è stata specificata alcuna risoluzione o ora di fine, pertanto per impostazione predefinita la risoluzione è il valore dell'intervallo
1m
e per impostazione predefinita l'ora di fine è l'ora corrente (2023-01-08T10:00:00.789Z
). Questa richiesta restituisce un massimo di 7 giorni di datapoint della metrica. Il primo punto dati possibile entro questo periodo di sette giorni sarebbe 10:00 il 1° gennaio (2023-01-01T10:00:00.789Z
). - Esempio 2 per dati restituiti
- Intervallo di cinque minuti con risoluzione di un minuto fino a due giorni fa, inviato alle 10:00 l'8 gennaio. Poiché la risoluzione determina l'intervallo di tempo massimo, vengono restituiti un massimo di 7 giorni di datapoint della metrica. Mentre l'ora di fine specificata era 10:00 il 6 gennaio (
2023-01-06T10:00:00.789Z
), il primo datapoint possibile entro questo periodo di sette giorni sarebbe 10:00 il 1 ° gennaio (2023-01-01T10:00:00.789Z
). Pertanto, in questo esempio è possibile restituire solo 5 giorni di datapoint della metrica.
Statistica
La statistica è la funzione di aggregazione applicata al set di datapoint raw all'intervallo specificato.
- Esempio: statistica media
-
CpuUtilization[1m].mean()
Per istruzioni, vedere Selezione della statistica per una query.
Di seguito sono riportate statistiche valide.
Statistica (espressione MQL) | Opzione statistica (modalità di base nella console) | Descrizione |
---|---|---|
absent()
|
(vedere l'operatore assente) |
Predicato assenza. Restituisce true (1) se la metrica è assente per l'intero intervallo. Restituisce false (0) se la metrica è presente durante l'intervallo. Viene ignorato dopo il periodo di rilevamento dell'assenza, senza generare alcun valore. Il periodo di rilevamento delle assenze predefinito è di due ore. È possibile personalizzare questo periodo durante la creazione o l'aggiornamento di un allarme assenza. Vedere Personalizzazione del periodo di rilevamento delle assenze per una query di allarme. I valori validi vanno da un minuto ( Utilizzare questa statistica nelle query di base e negli allarmi di assenza. Vedere Specifica di un predicato in una query. |
avg()
|
(non disponibile) | Restituisce il valore Somma diviso per Conteggio durante l'intervallo specificato. Identico a mean() . |
count()
|
Conteggio | Restituisce il numero di osservazioni ricevute nell'intervallo specificato. |
first() |
(non disponibile) | Per ogni intervallo, restituisce il valore con l'indicatore orario meno recente nell'intervallo specificato. |
increment()
|
(non disponibile) | Restituisce la modifica per intervallo. |
last() |
(non disponibile) | Per ogni intervallo, restituisce il valore con l'indicatore orario più recente nell'intervallo specificato. |
max()
|
Max | Restituisce il valore più alto osservato durante l'intervallo specificato. |
mean()
|
Media | Restituisce il valore Somma diviso per Conteggio durante l'intervallo specificato. |
min()
|
Min | Restituisce il valore più basso osservato durante l'intervallo specificato. |
percentile(p)
|
P50 P90 P95 P99 P99.9 (solo pagina Metriche servizio) |
Restituisce il valore stimato del percentile specificato ( Ad esempio, |
rate()
|
Tariffa | Restituisce il tasso medio di modifica per intervallo. L'unità è al secondo. |
sum()
|
Somma | Restituisce tutti i valori aggiunti insieme, per intervallo. |
Operatori predicato
Il componente predicato conserva solo i valori specificati dai flussi di metriche. Utilizzare un operatore predicato per definire una soglia o un'assenza.
- Esempio 1: maggiore dell'80% per l'utilizzo medio della CPU
-
CpuUtilization[1m].mean() > 80
- Esempio 2: tra il 60 e l'80% per l'utilizzo medio della CPU
-
CpuUtilization[1m].mean() in (60, 80)
- Esempio 3: maggiore di 1 per gli errori
-
ServiceConnectorHubErrors[1m].count() > 1
- Esempio 4: maggiore di 85 per l'utilizzo della CPU al 90° percentile (selezione di un dominio di disponibilità e raggruppamento per pool)
-
CpuUtilization[1m]{availabilityDomain = "VeBZ:PHX-AD-1"}.groupBy(poolId).percentile(0.9) > 85
- Esempio 5: almeno 20 per l'utilizzo minimo della CPU (selezionando "ol8" o "ol7")
-
CpuUtilization[1m]{resourceDisplayName =~ "ol8|ol7"}.min() >= 20
- Esempio 6: almeno 30 per l'utilizzo minimo della CPU (selezione dei nomi delle istanze che iniziano con "instance-2023-")
-
CpuUtilization[1m]{resourceDisplayName =~ "instance-2023-*"}.min() >= 30
- Esempio 7: assenza di metriche di utilizzo della CPU per la risorsa specificata, impostata su 20 ore per il periodo di rilevamento delle assenze
-
CpuUtilization[1m]{resourceId = "<resource_identifier>"}.groupBy(resourceId).absent(20)
Per istruzioni, vedere Specifica di un predicato in una query.
Di seguito sono riportati gli operatori validi.
Operator (espressione MQL) | Opzione operatore (modalità di base nella Console) | commenti |
---|---|---|
> |
maggiore di | |
>= |
maggiore o uguale a | |
== |
uguale a | |
=~ |
(non disponibile) | Corrispondenza non esatta. |
!= |
(non disponibile) | Diverso da. |
<
|
minore di | |
<=
|
minore o uguale a | |
in |
tra (inclusi i valori specificati) | Include i due valori specificati. |
not in |
esterno (inclusi i valori specificati) | Include i due valori specificati. |
(vedere la statistica absent()) | assente |
Predicato assenza. Restituisce true (1) se la metrica è assente per l'intero intervallo. Restituisce false (0) se la metrica è presente durante l'intervallo. Viene ignorato dopo il periodo di rilevamento dell'assenza, senza generare alcun valore. Il periodo di rilevamento delle assenze predefinito è di due ore. È possibile personalizzare questo periodo durante la creazione o l'aggiornamento di un allarme assenza. Vedere Personalizzazione del periodo di rilevamento delle assenze per una query di allarme. I valori validi vanno da un minuto ( Utilizzare questa statistica nelle query di base e negli allarmi di assenza. Vedere Specifica di un predicato in una query. |
Per istruzioni sull'allarme, vedere Creazione di un allarme soglia e Creazione di un allarme assenza.
Operatori Arithmetic
Gli operatori aritmetici seguenti sono supportati nelle espressioni MQL.
Operatore | Descrizione |
---|---|
+ |
Aggiungi |
- |
Sottrai |
* |
Moltiplica |
/ |
Dividi |
% |
Modulo (dividi e restituisci resto) |
Esempio 1: calcolare la percentuale disponibile di utilizzo della CPU (metrica CPUUtilization
nello spazio di nomi oci_computeagent
).
100 - CpuUtilization[1m].mean()
Esempio 2: calcolare il valore in secondi anziché l'unità predefinita di millisecondi della metrica (metrica TotalRequestLatency
nello oci_objectstorage
namespace)
TotalRequestLatency[1m].mean() / 1000
Unisci query
Utilizzare gli operatori &&
(AND) e ||
(OR) per unire le query. Più query con join fungono da singola query.
Gli operatori
&&
(AND) e ||
(OR) possono essere utilizzati solo tra le query. Non utilizzarli tra i set di dimensioni. Ad esempio, la seguente query non è valida: CpuUtilization[1m]{faultDomain =~ "FAULT-DOMAIN-1|FAULT-DOMAIN-2" || resourceDisplayName = "test"}.mean()
Operatore join | Descrizione |
---|---|
&& |
AND: Esegui join delle query. Restituisce true se entrambi i operandi sono true. Restituisce false altrimenti. |
|| |
OR: unire le query. Restituisce true se uno dei due operandi è true o se entrambi gli operandi sono true. Restituisce false altrimenti. |
Esempio 1: join di query con OR. Restituisce true se il datapoint di utilizzo della CPU si trova nel dominio di errore 1 o 2 OPPURE il datapoint di utilizzo della memoria si trova nel dominio di errore 1 o 2.
CpuUtilization[1m]{faultDomain =~ "FAULT-DOMAIN-1|FAULT-DOMAIN-2"}.mean() || MemoryUtilization[1m]{faultDomain =~ "FAULT-DOMAIN-1|FAULT-DOMAIN-2"}.mean()
Esempio 2: unire le query di allarme con AND. Attivare l'allarme (passaggio allo stato di attivazione) solo quando entrambe le query sono vere: esiste almeno un errore E l'errore medio è maggiore della metà.
ServiceConnectorHubErrors[1m].count() > 1 && ServiceConnectorHubErrors[1m].mean() > 0.5
Esempio 3: unire le query di allarme con AND. Attivare l'allarme (passaggio allo stato di attivazione) solo quando entrambe le query sono vere: per letture più piccole (da 0 a 8 Kilobyte), il 50° percentile di richieste supera 100 E la latenza media è inferiore a 0,01.
FileSystemReadRequestsBySize[5m]{resourceType = "filesystem", size = "0B_to_8KiB"}.percentile(.50) > 100 && FileSystemReadAverageLatencybySize[5m]{resourceType = "filesystem", size = "0B_to_8KiB"}.mean() > 0.01
Corrispondenza non esatta
Specificare corrispondenze approssimative ("fuzzy") ai valori di dimensione in un'espressione MQL.
Utilizzare la corrispondenza non esatta quando si specificano più valori per un nome di dimensione.
Al posto del segno di uguale (=
) prima dell'insieme di valori, utilizzare l'operatore di confronto seguente.
Operatore di confronto | Descrizione |
---|---|
=~ (segno di uguale seguito da tilde) |
Indicativamente uguale a. Usa per corrispondenze non esatta |
Per la corrispondenza non esatta, racchiudere il set di valori tra virgolette: name = "val*"
o name = "value1|value2"
Aggiornare il set di valori utilizzando uno o più dei caratteri seguenti.
Carattere corrispondenza non esatta valore | Descrizione |
---|---|
* (asterisco) |
Carattere jolly, che indica da zero a molti caratteri. |
| (pipe) |
Operando OR per i valori dimensione. |
Esempio che mostra la corrispondenza non esatta per due possibili nomi di risorsa ("ol8" o "ol7"):
CpuUtilization[1m]{resourceDisplayName =~ "ol8|ol7"}.min() >= 20
Esempio che mostra la corrispondenza non esatta per i nomi delle risorse contenenti la frase "instance-2023-":
CpuUtilization[1m]{resourceDisplayName =~ "instance-2023-*"}.min() >= 30
Esempio che mostra la corrispondenza non esatta per i set di valori a tre dimensioni (test delle istanze di computazione nel dominio di errore 1 che utilizzano la forma myshape
):
CpuUtilization [1m]{faultDomain =~ "FAULT-DOMAIN-1", resourceDisplayName =~ "test*", shape =~ "myshape"}.mean()