Référence de Monitoring Query Language (MQL)
Comprenez la syntaxe des expressions MQL (Monitoring Query Language) et consultez les valeurs valides pour les opérateurs d'intervalle, de statistique et de prédicat dans les expressions MQL.
Pour obtenir des informations sur la modification des expressions MQL , reportez-vous à Modification de l'expression MQL pour une requête. Pour extraire une période spécifique, telle que la dernière heure, reportez-vous à Sélection d'une période autre que celle par défaut pour une requête.
Syntaxe MQL
La syntaxe MQL gouverne les expressions d'interrogation des mesures publiées sur le service Monitoring. Les expressions MQL définissent des requêtes (y compris des requêtes d'alarme). MQL agit sur les données agrégées.
Le diagramme suivant décrit les composants requis et les composants facultatifs communs.
Certains composants peuvent apparaître plusieurs fois dans une expression MQL. Par exemple, vous pouvez utiliser deux fonctions de regroupement (comme dans groupBy()
suivie d'une statistique, puis de grouping()
). Vous pouvez également imbriquer des requêtes.
Vous pouvez également joindre plusieurs requêtes en une seule.
Pour l'alarme dans la console, la statistique absent()
est répertoriée sous Opérateur. Reportez-vous à Création d'une alarme d'absence.
Pour sélectionner la statistique absent()
dans la console, reportez- vous aux instructions dédiées à une page spécifiques ci-après.
- Page Créer une alarm ou Modifier une alarme : en mode de base, sélectionnez absent dans Opérateur sous Règle de déclencheur. En mode avancé (sélectionnez Passer en mode Avancé), mettez à jour l'expression MQL.
- Page Explorateur de mesure : sélectionnez le mode avancé pour utiliser MQL.
- Page Mesures de service : ouvrez la requête dans l'explorateur de mesures, puis sélectionnez Mode avancé pour utiliser MQL.
Pour obtenir des informations sur la lecture de diagrammes syntaxiques, reportez-vous à Lecture de diagrammes syntaxiques.
Valeurs valides pour les expressions MQL
Passez en revue les valeurs valides pour l'intervalle, la statistique et les opérateurs de prédicat dans les expressions MQL.
Intervalle
Pour l'intervalle, tenez compte de la résolution et de la période.
Les valeurs prises en charge pour l'intervalle dépendent de la période indiquée dans la requête de mesure (non applicable aux requêtes d'alarme). Plus de valeurs d'intervalle sont prises en charge pour les périodes plus petites. Par exemple, si vous sélectionnez une heure pour la période, toutes les valeurs d'intervalle sont prises en charge. Si vous sélectionnez 90 jours pour la période, seules les valeurs d'intervalle comprises entre 1 heure et 1 jour sont prises en charge.
Sélectionnez un intervalle d'alarme en fonction de la fréquence d'émission de la mesure. Par exemple, une mesure émise toutes les cinq minutes nécessite un intervalle d'alarme de 5 minutes ou plus La plupart des mesures sont émises chaque minute, ce qui signifie que la plupart des mesures prennent en charge tout intervalle d'alarme. Pour déterminer des intervalles d'alarme valides pour une mesure particulière, consultez la référence de mesure du service concernée.
- Exemple : intervalle d'une minute (
1m
) -
CpuUtilization[1m].mean()
Les intervalles suivants sont valides pour les expressions MQL : 1m
-60m
, 1h
-24h
et 1d
Pour obtenir des instructions, reportez-vous à Sélection de l'intervalle pour une requête.
Pour les requêtes d'indicateur, l'intervalle que vous sélectionnez définit la résolution par défaut de la demande, qui détermine la période maximale de données renvoyées.
Pour les requêtes d'alarme, l'intervalle indiqué n'a aucun effet sur la résolution de la demande. La seule valeur valide de résolution pour une demande de requête d'alarme est 1m
. Pour plus d'informations sur le paramètre de résolution utilisé dans les requêtes d'alarme, reportez-vous à Alarme.
La période maximale renvoyée pour une requête de mesure dépend de la résolution. Par défaut, pour les requêtes de mesure, la résolution est identique à l'intervalle de requête.
La période maximale est calculée selon l'heure en cours, quelle que soit l'heure de fin indiquée. Vous trouverez ci-dessous les périodes maximales renvoyées pour chaque sélection d'intervalle disponible dans la console (mode de base)
Intervalle | Résolution par défaut (requêtes de mesure) | Période maximale renvoyée |
---|---|---|
1 minute Auto (page Mesures de service)*, lorsque la période sélectionnée est inférieure ou inférieure à 6 heures |
1 minute | 7 jours |
5 minutes Auto (page Mesures de service)*, lorsque la période sélectionnée est supérieure à 6 heures et inférieure à 36 heures |
5 minutes | 30 jours |
1 heure Auto (page Mesures de service)*, lorsque la période sélectionnée est supérieure à 36 heures |
1 heure | 90 jours |
1 jour |
1 jour | 90 jours |
* La période maximale renvoyée lorsque vous sélectionnez Auto pour Intervalle (page Mesures de service uniquement) est déterminée par la sélection automatique de l'intervalle. La sélection automatique de l'intervalle repose sur la période sélectionnée.
Pour indiquer une résolution autre que celle par défaut qui diffère de l'intervalle, reportez-vous à la section Sélection d'une résolution autre que celle par défaut pour une requête.
- Exemple 1 pour les données renvoyées
- Intervalle d'une minute et résolution jusqu'à l'heure actuelle, envoyé à 10h00 le 8 janvier. Aucune résolution ou heure de fin n'est indiquée. Par conséquent, la résolution prend la valeur d'intervalle
1m
et l'heure de fin est définie sur l'heure en cours (2023-01-08T10:00:00.789Z
) par défaut. Cette demande renvoie 7 jours de points de données de mesure au maximum. Le point de données le plus ancien possible sur cette période de sept jours correspond à 10:00 le 1er janvier (2023-01-01T10:00:00.789Z
). - Exemple 2 pour les données renvoyées
- Intervalle de cinq minutes avec résolution d'une minute jusqu'à il y a deux jours, envoyé à 10h00 le 8 janvier. Etant donné que la résolution détermine la période maximale, 7 jours de points de données de mesure au maximum sont renvoyés. Bien que l'heure de fin spécifiée soit 10:00 le 6 janvier (
2023-01-06T10:00:00.789Z
), le point de données le plus ancien possible sur cette période de sept jours correspond à 10:00 le 1er janvier (2023-01-01T10:00:00.789Z
). Par conséquent, dans cet exemple, seuls 5 jours des points de données de mesure peuvent être renvoyés.
Statistique
La statistique est la fonction d'agrégation appliquée à l'ensemble spécifique des point de données bruts à l'intervalle indiqué.
- Exemple : statistique de moyenne
-
CpuUtilization[1m].mean()
Pour obtenir des instructions, reportez-vous à Sélection de la statistique pour une requête.
Les statistiques suivantes sont valides.
Statistique (expression MQL) | Option de statistique (mode de base dans la console) | Description |
---|---|---|
absent()
|
(reportez-vous à l'opérateur absent) |
Prédicat d'absence. Renvoie True (1) si la mesure est absente dans l'intégralité de l'intervalle. Renvoie False (0) si la mesure est présente au cours de l'intervalle. Est ignoré après la période de détection des absences, sans générer de valeurs. La période de détection des absences par défaut est de deux heures. Vous pouvez personnaliser cette période lors de la création ou de la mise à jour d'une alarme d'absence. Reportez-vous à Personnalisation de la période de détection des absences pour une requête d'alarme. Les valeurs valides sont comprises entre une minute ( Utilisez cette statistique dans les requêtes de base ainsi que dans les alarmes d'absence. Reportez-vous à Spécification d'un prédicat dans une requête. |
avg()
|
(non disponible) | Renvoie la valeur de Somme divisée par Nombre pendant l'intervalle spécifié. Identique à mean() . |
count()
|
Nombre | Renvoie le nombre d'observations reçues dans l'intervalle spécifié. |
first() |
(non disponible) | Pour chaque intervalle, renvoie la valeur dont l'horodatage est le plus ancien dans l'intervalle indiqué. |
increment()
|
(non disponible) | Renvoie la modification par intervalle. |
last() |
(non disponible) | Pour chaque intervalle, renvoie la valeur dont l'horodatage est le plus récent dans l'intervalle indiqué. |
max()
|
Max. | Renvoie la valeur la plus élevée observée au cours de l'intervalle spécifié. |
mean()
|
Moyenne | Renvoie la valeur de Somme divisée par Nombre pendant l'intervalle spécifié. |
min()
|
Min. | Renvoie la valeur la plus faible observée au cours de l'intervalle spécifié. |
percentile(p)
|
P50 P90 P95 P99 P99.9 (page Mesures de service uniquement) |
Renvoie la valeur estimée du centile indiqué ( Par exemple, |
rate()
|
Taux | Renvoie le taux moyen de modification par intervalle. Il s'exprime par seconde. |
sum()
|
Somme | Renvoie la somme de toutes les valeurs, par intervalle. |
Opérateurs de prédicat
Le composant de prédicat ne conserve que les valeurs indiquées des flux de données de mesure. Utilisez un opérateur de prédicat pour définir un seuil ou une absence.
- Exemple 1 : consommation moyenne de l'UC supérieure à 80 %
-
CpuUtilization[1m].mean() > 80
- Exemple 2 : utilisation moyenne de l'UC compris entre 60 et 80 %
-
CpuUtilization[1m].mean() in (60, 80)
- Exemple 3 : supérieur à 1 pour les erreurs
-
ServiceConnectorHubErrors[1m].count() > 1
- Exemple 4 : supérieur à 85 pour l'utilisation de l'UC supérieure à 90e centile (prédicat de seuil, sélection d'un domaines de disponibilité et regroupement par pool)
-
CpuUtilization[1m]{availabilityDomain = "VeBZ:PHX-AD-1"}.groupBy(poolId).percentile(0.9) > 85
- Exemple 5 : au moins 20 pour une utilisation minimale de l'UC (sélection de "ol8" ou "ol7")
-
CpuUtilization[1m]{resourceDisplayName =~ "ol8|ol7"}.min() >= 20
- Exemple 6 : au moins 30 pour une utilisation minimale de l'UC (sélection des noms d'instance commençant par "instance-2023-")
-
CpuUtilization[1m]{resourceDisplayName =~ "instance-2023-*"}.min() >= 30
- Exemple 7 : Absence de mesures d'utilisation de l'UC pour la ressource indiquée, définie sur 20 heures pour la période de détection d'absence
-
CpuUtilization[1m]{resourceId = "<resource_identifier>"}.groupBy(resourceId).absent(20)
Pour obtenir des instructions, reportez-vous à Spécification d'un prédicat dans une requête.
Les opérateurs suivants sont valides.
Opérateur (expression MQL) | Option d'opérateur (mode de référence dans la console) | Commentaires |
---|---|---|
> |
supérieur à | |
>= |
supérieur ou égal à | |
== |
égal à | |
=~ |
(non disponible) | Correspondance partielle. |
!= |
(non disponible) | Différent de. |
<
|
inférieur à | |
<=
|
inférieur ou égal à | |
in |
entre (valeurs indiquées incluses) | Les deux valeurs indiquées sont incluses. |
not in |
en dehors de (valeurs indiquées incluses) | Les deux valeurs indiquées sont incluses. |
(reportez-vous à la statistique absent()) | absent |
Prédicat d'absence. Renvoie True (1) si la mesure est absente dans l'intégralité de l'intervalle. Renvoie False (0) si la mesure est présente au cours de l'intervalle. Est ignoré après la période de détection des absences, sans générer de valeurs. La période de détection des absences par défaut est de deux heures. Vous pouvez personnaliser cette période lors de la création ou de la mise à jour d'une alarme d'absence. Reportez-vous à Personnalisation de la période de détection des absences pour une requête d'alarme. Les valeurs valides sont comprises entre une minute ( Utilisez cette statistique dans les requêtes de base ainsi que dans les alarmes d'absence. Reportez-vous à Spécification d'un prédicat dans une requête. |
Pour obtenir des instructions relatives aux alarmes, reportez-vous à Création d'une alarme de seuil et à Création d'une alarme d'absence.
Opérateurs arithmétiques
Les opérateurs arithmétiques suivants sont pris en charge dans les expressions MQL.
Opérateur | Description |
---|---|
+ |
Ajouter |
- |
Soustraire |
* |
Multiplier |
/ |
Diviser |
% |
Modulo (diviser et renvoyer le reste) |
Exemple 1 : calculez le pourcentage disponible d'utilisation de l'UC (mesure CPUUtilization
dans l'espace de noms oci_computeagent
).
100 - CpuUtilization[1m].mean()
Exemple 2 : calcul de la valeur en secondes, au lieu de l'unité par défaut de la mesure en millisecondes (mesure TotalRequestLatency
dans l'espace de noms oci_objectstorage
)
TotalRequestLatency[1m].mean() / 1000
Rejoindre des requêtes
Utilisez les opérateurs &&
(AND) et ||
(OR) pour joindre des requêtes. Plusieurs requêtes jointes agissent comme une seule requête.
Les opérateurs
&&
(AND) et ||
(OR) ne peuvent être utilisés qu'entre des requêtes. Ne les utilisez pas entre les jeux de dimensions. Par exemple, la requête suivante est incorrecte : CpuUtilization[1m]{faultDomain =~ "FAULT-DOMAIN-1|FAULT-DOMAIN-2" || resourceDisplayName = "test"}.mean()
Opérateur d'association | Description |
---|---|
&& |
AND : requêtes de jointure. Renvoie true si les deux opérandes sont True. Renvoie false sinon. |
|| |
OR : requêtes de jointure. Renvoie True si l'un des opérandes est défini sur True ou si les deux opérandes sont définis sur True. Renvoie false sinon. |
Exemple 1 : joindre des requêtes avec OR. Renvoie true si le point de données d'utilisation de la CPU se trouve dans le domaine de pannes 1 ou 2 OU si le point de données d'utilisation de la mémoire se trouve dans le domaine de pannes 1 ou 2.
CpuUtilization[1m]{faultDomain =~ "FAULT-DOMAIN-1|FAULT-DOMAIN-2"}.mean() || MemoryUtilization[1m]{faultDomain =~ "FAULT-DOMAIN-1|FAULT-DOMAIN-2"}.mean()
Exemple 2 : jointure de requêtes d'alarme avec AND. Déclenchez l'alarme (passage à l'état de déclenchement) uniquement lorsque les deux requêtes sont vraies : au moins une erreur existe ET l'erreur moyenne est supérieure à la moitié.
ServiceConnectorHubErrors[1m].count() > 1 && ServiceConnectorHubErrors[1m].mean() > 0.5
Exemple 3 : jointure de requêtes d'alarme avec AND. Déclenchez l'alarme (passage à l'état de déclenchement) uniquement lorsque les deux requêtes sont vraies : pour les lectures plus petites (0 à 8 kilo-octets), le 50e centile des requêtes dépasse 100 ET la latence moyenne est inférieure à 0,01.
FileSystemReadRequestsBySize[5m]{resourceType = "filesystem", size = "0B_to_8KiB"}.percentile(.50) > 100 && FileSystemReadAverageLatencybySize[5m]{resourceType = "filesystem", size = "0B_to_8KiB"}.mean() > 0.01
Correspondance partielle
Indiquez des correspondances approximatives ("partielles") avec des valeurs de dimension dans une expression MQL.
Utilisez la correspondance partielle lorsque vous indiquez plusieurs valeurs pour un nom de dimension.
La place du signe égal (=
) avant l'ensemble de valeurs, utilisez l'opérateur de comparaison suivant.
Opérateur de comparaison | Description |
---|---|
=~ (signe égal suivi du tilde) |
Approximativement égal à. A utiliser pour les correspondances partielles |
Pour une correspondance partielle, placez l'ensemble de valeurs entre guillemets : name = "val*"
ou name = "value1|value2"
Mettez à jour l'ensemble de valeurs en utilisant les caractères suivants.
Caractère de correspondance partielle de valeur | Description |
---|---|
* (astérisque) |
Caractère générique, indiquant zéro à plusieurs caractères. |
| (barre verticale) |
Opérande OR pour les valeurs de dimension. |
Exemple de correspondance partielle pour deux noms de ressource possibles ("ol8" ou "ol7") :
CpuUtilization[1m]{resourceDisplayName =~ "ol8|ol7"}.min() >= 20
Exemple montrant une correspondance partielle pour les noms de ressource contenant l'expression "instance-2023-" :
CpuUtilization[1m]{resourceDisplayName =~ "instance-2023-*"}.min() >= 30
Exemple de correspondance partielle pour les jeux de valeurs de trois dimensions (correspondance partielle pour trois ensembles de valeurs de dimension dans le domaine de pannes 1 qui utilisent la forme myshape
) :
CpuUtilization [1m]{faultDomain =~ "FAULT-DOMAIN-1", resourceDisplayName =~ "test*", shape =~ "myshape"}.mean()