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 plage horaire spécifique, telle que la dernière heure, reportez-vous à Sélection d'une plage horaire autre que celle par défaut pour une requête.

Syntaxe MQL

La syntaxe MQL  régit les expressions d'interrogation des mesures publiées vers 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 schéma suivant représente les composants requis et les composants courants facultatifs.

Remarque

Certains composants peuvent apparaître plusieurs fois dans une expression MQL. Par exemple, vous pouvez utiliser deux fonctions de regroupement (comme dans groupBy(), suivi d'une statistique, puis de grouping()). Vous pouvez également imbriquer des requêtes.

Vous pouvez également rejoindre plusieurs requêtes en une seule.

Pour les alarmes dans la console, la statistique absent() est répertoriée sous Opérateur. Reportez-vous à Création d'une alarme d'absence.

Plus d'informations sur absent() dans la console

Pour sélectionner la statistique absent() dans la console, reportez-vous aux instructions dédiées à une page spécifique ci-après.

  • Page Créer une alarme ou Modifier une alarme : en mode de base, sélectionnez absent dans Opérateur sous Règle de déclencheur. En mode avancé (cliquez sur Passer en mode Avancé), mettez à jour l'expression MQL.
  • Page explorateur de mesures : cliquez sur mode avancé pour utiliser MQL.
  • Page Mesures de service : ouvrez la requête dans explorateur de mesures, puis cliquez sur mode avancé pour utiliser MQL.
Expression 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

Remarque

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. Afin de déterminer des intervalles d'alarme valides pour une mesure spécifique, reportez-vous à la référence de mesure du service approprié.

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.

Remarque

Pour les requêtes de mesure, l'intervalle que vous sélectionnez détermine 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.

Période maximale renvoyée pour une requête

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 égale à 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 à 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 en cours, envoyé à 10:00 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 une résolution d'une minute jusqu'à il y a deux jours, envoyé à 10:00 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 de points de données bruts à l'intervalle spécifié.

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 (1m) et trois jours (3d ou 72h). Indiquez la durée de la période de détection des absences à l'aide d'un nombre et d'une unité (m, h ou d pour les minutes, les heures ou le jour).

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() Inventaire 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

Page P99.9 (Mesures de service uniquement)

Renvoie la valeur estimée du centile indiqué (p lors de l'utilisation du kit SDK, de l'interface de ligne de commande ou de l'API) au cours de l'intervalle indiqué. Les valeurs valides sont supérieures à 0,0 et inférieures à 1,0.

Par exemple, percentile(0.8) renvoie la valeur du 80e centile.

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 : supérieur à 80 % pour l'utilisation moyenne de l'UC
CpuUtilization[1m].mean() > 80
Exemple 2 : entre 60 et 80 % pour l'utilisation moyenne de l'UC
CpuUtilization[1m].mean() in (60, 80)
Exemple 3 : nombre d'erreurs supérieur à 1
ServiceConnectorHubErrors[1m].count() > 1
Exemple 4 : supérieur à 85 pour le 90e centile de l'utilisation de l'UC (sélection d'un domaine 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 l'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 des mesures d'utilisation de l'UC pour la ressource indiquée, définie sur 20 heures pour la période de détection des absences
CpuUtilization[1m]{resourceId = "<resource_identifier>"}.groupBy(resourceId).absent(20)
Description de la statistique absent() : renvoie la valeur 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.

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 base dans la console) Commentaires
> supérieur à
>= supérieur ou égal à
== égal à
=~ (non disponible) Mise en 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 (1m) et trois jours (3d ou 72h). Indiquez la durée de la période de détection des absences à l'aide d'un nombre et d'une unité (m, h ou d pour les minutes, les heures ou le jour).

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
/ Division
% Modulo (diviser et renvoyer le reste)

Rejoindre les requêtes

Utilisez les opérateurs && (AND) et || (OR) pour joindre des requêtes. Plusieurs requêtes jointes agissent comme une seule requête.

Remarque

Les opérateurs && (AND) et || (OR) peuvent uniquement être utilisés entre les requêtes. Ne les utilisez pas entre des jeux de dimensions. Par exemple, la requête suivante n'est pas valide : CpuUtilization[1m]{faultDomain =~ "FAULT-DOMAIN-1|FAULT-DOMAIN-2" || resourceDisplayName = "test"}.mean()
Opérateur de jointure Description
&& AND : Rejoindre les requêtes. Renvoie True si les deux opérateurs ont la valeur True. Renvoie False dans le cas contraire.
|| OR : joindre des requêtes. Renvoie True si l'une des opérandes a la valeur True ou si les deux opérandes ont la valeur True. Renvoie False dans le cas contraire.

Exemple 1 : jointure de 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 des 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 : joindre des requêtes d'alarme à 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 demandes 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.

A 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) Presque égal à. Utiliser pour les correspondances partielles

Pour une correspondance partielle, entourez l'ensemble de valeurs de guillemets : name = "val*" ou name = "value1|value2"

Mettez à jour l'ensemble de valeurs à l'aide des 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 de correspondance partielle pour les noms de ressource contenant l'expression "instance-2023-" :

CpuUtilization[1m]{resourceDisplayName =~ "instance-2023-*"}.min() >= 30

Exemple de mise en correspondance partielle pour trois ensembles de valeurs de dimension (instances de calcul de test dans le domaine de pannes 1 qui utilisent la forme myshape) :

CpuUtilization [1m]{faultDomain =~ "FAULT-DOMAIN-1", resourceDisplayName =~ "test*", shape =~ "myshape"}.mean()