Compatibilité PromQL

Les requêtes PromQL dans Google Cloud Managed Service pour Prometheus sont partiellement évaluées au niveau du backend Monarch, et il existe des différences connues dans les résultats de la requête. Ce document décrit les différences.

À l'exception des différences mentionnées dans ce document, PromQL dans Managed Service pour Prometheus est identique à celui de PromQL disponible dans la version Prometheus 2.44.

Les fonctions PromQL ajoutées après la version 2.44 de Prometheus peuvent ne pas être compatibles.

Prise en charge d'UTF-8

PromQL pour Cloud Monitoring est compatible avec les requêtes UTF-8.

Si le nom de votre métrique Prometheus ne contient que des caractères alphanumériques, ainsi que les caractères _ ou :, et si vos clés de libellé ne contiennent que des caractères alphanumériques, ainsi que le caractère _, vous pouvez effectuer des requêtes à l'aide de la syntaxe PromQL traditionnelle. Par exemple, une requête valide peut ressembler à job:my_metric:sum{label_key="label_value"}.

Toutefois, si le nom de votre métrique Prometheus utilise des caractères spéciaux autres que _ ou :, ou si vos clés de libellé utilisent des caractères spéciaux autres que _, vous devez construire votre requête en suivant les spécifications UTF-8 pour PromQL.

Les noms de métriques UTF-8 doivent être placés entre guillemets et entre accolades. Les noms de libellés doivent également être mis entre guillemets s'ils contiennent des caractères incompatibles avec l'ancienne version. Les exemples de requêtes valides suivants sont tous équivalents :

  • {"my.domain.com/metric/name_bucket", "label.key"="label.value"}
  • {__name__="my.domain.com/metric/name_bucket", "label.key"="label.value"}
  • {"__name__"="my.domain.com/metric/name_bucket", "label.key"="label.value"}

Correspondance des noms de métriques

Seule une correspondance exacte avec les noms de métriques est acceptée. Vous devez inclure une correspondance exacte du nom de la métrique dans votre requête.

Nous vous recommandons les solutions de contournement suivantes pour les scénarios courants qui utilisent un outil de correspondance d'expressions régulières sur le libellé __name__ :

  • Les configurations de l'adaptateur Prometheus utilisent souvent l'opérateur =~ pour faire correspondre plusieurs noms de métriques. Pour corriger cette utilisation, développez la configuration afin d'utiliser une règle distincte pour chaque métrique et nommez chaque métrique de manière explicite. Cela vous empêche également d'autoscaler accidentellement sur des métriques inattendues.
  • Les expressions régulières sont souvent utilisées pour représenter graphiquement plusieurs métriques non dimensionnelles sur le même graphique. Par exemple, si vous disposez d'une métrique telle que cpu_servicename_usage, vous pouvez utiliser un caractère générique pour représenter graphiquement tous vos services ensemble. L'utilisation de métriques non dimensionnelles comme celle-ci est une mauvaise pratique explicite dans Cloud Monitoring, qui entraîne des performances de requête extrêmement médiocres. Pour corriger cette utilisation, déplacez toute la dimensionnalité dans les libellés de métriques au lieu d'intégrer les dimensions dans le nom de la métrique.
  • L'interrogation de plusieurs métriques est souvent utilisée pour voir quelles métriques sont disponibles pour l'interrogation. Nous vous recommandons d'utiliser plutôt l'appel /labels/__name__/values pour découvrir les métriques. Vous pouvez également découvrir des métriques à l'aide de l'interface utilisateur Cloud Monitoring.
  • La mise en correspondance de plusieurs métriques est utile pour voir le nombre d'échantillons extraits, ingérés et facturés pour chaque métrique. Cloud Monitoring fournit ces informations sur la page Gestion des métriques. Vous pouvez également accéder à ces informations sous forme de données de métrique à l'aide de la métrique "Échantillons ingérés" ou "Échantillons écrits par ID d'attribution".

Obsolescence

L'obsolescence n'est pas disponible dans le backend Monarch.

Calcul de irate

Lorsque la période d'analyse de la fonction irate est inférieure à la taille de l'étape, nous augmentons cette période à la taille de l'étape. Cette modification est nécessaire dans Monarch afin de s'assurer qu'aucune des données d'entrée n'est complètement ignorée dans le résultat. Cette différence s'applique également aux calculs de rate.

Calcul de rate et increase

Lorsque la période d'analyse de la fonction rate est inférieure à la taille de l'étape, nous augmentons cette période à la taille de l'étape. Cette modification est nécessaire dans Monarch afin de s'assurer qu'aucune des données d'entrée n'est complètement ignorée dans le résultat. Cette différence s'applique également aux calculs de irate.

Il existe des différences dans les calculs d'interpolation et d'extrapolation. Monarch utilise un algorithme d'interpolation différent de celui de Prometheus, et cette différence peut produire des résultats légèrement différents. Par exemple, les échantillons de compteur Monarch sont stockés avec une période, alors que Prometheus utilise un seul horodatage. Par conséquent, les échantillons de compteur Monarch peuvent être inclus dans un calcul de taux, même si l'horodatage Prometheus l'exclut. Cela permet généralement d'obtenir des résultats plus précis, en particulier lorsque vous interrogez le début ou la fin de la série temporelle sous-jacente.

Calcul de histogram_quantile

Un calcul PromQL de histogram_quantile sur un histogramme sans échantillon génère une valeur NaN. Le calcul du langage de requête interne ne produit aucune valeur. Le point à l'horodatage est supprimé à la place.

Les différences de calcul de taux peuvent également affecter l'entrée des requêtes histogram_quantile.

Fonctions spécifiques au type sur les métriques de différents types

Bien que Prometheus en amont soit faiblement typé, Monarch est fortement typé. Cela signifie que l'exécution de fonctions spécifiques à un seul type sur une métrique de type différent (par exemple, l'exécution de rate() sur une métrique GAUGE ou de histogram_quantile() sur une métrique COUNTER ou une métrique non typée) ne fonctionne pas dans Managed Service for Prometheus, même si ces fonctions sont compatibles avec Prometheus en amont.