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.
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.
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.
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. 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.
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.
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 ( 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é ( 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 : 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)
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 ( 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.
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()