PromQL-Kompatibilität

PromQL-Abfragen in Google Cloud Managed Service for Prometheus werden teilweise im Monarch-Backend ausgewertet und es gibt einige bekannte Unterschiede bei den Abfrageergebnissen. In diesem Dokument werden die Unterschiede beschrieben.

Abgesehen von den in diesem Dokument aufgeführten Unterschieden ist die PromQL in Managed Service for Prometheus mit der in Prometheus-Version 2.44 verfügbaren PromQL identisch.

PromQL-Funktionen, die nach Prometheus-Version 2.44 hinzugefügt wurden, werden möglicherweise nicht unterstützt.

UTF-8-Unterstützung

PromQL für Cloud Monitoring unterstützt UTF-8-Abfragen.

Wenn Ihr Prometheus-Messwertname nur aus alphanumerischen Zeichen sowie den Zeichen _ oder : besteht und Ihre Labelschlüssel nur aus alphanumerischen Zeichen sowie dem Zeichen _ bestehen, können Sie die Abfrage mit der herkömmlichen PromQL-Syntax durchführen. Eine gültige Anfrage könnte beispielsweise so aussehen: job:my_metric:sum{label_key="label_value"}.

Wenn in Ihrem Prometheus-Messwertnamen jedoch Sonderzeichen außer _ oder : verwendet werden oder in Ihren Labelschlüsseln Sonderzeichen außer _, müssen Sie Ihre Abfrage gemäß der UTF-8-Spezifikation für PromQL erstellen.

UTF-8-Messwertnamen müssen in Anführungszeichen gesetzt und in die geschweiften Klammern verschoben werden. Labelnamen müssen auch in Anführungszeichen gesetzt werden, wenn sie Zeichen enthalten, die mit der alten Version nicht kompatibel sind. Die folgenden Beispiele für gültige Anfragen sind alle gleichwertig:

  • {"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"}

Abgleich mit Messwertnamen

Es wird nur der exakte Abgleich mit Messwertnamen unterstützt. Ihre Abfrage muss eine genaue Übereinstimmung mit dem Messwertnamen enthalten.

Wir empfehlen die folgenden Problemumgehungen für häufige Szenarien, in denen ein regulärer Ausdrucksabgleich für das Label __name__ verwendet wird:

  • In Prometheus-Adapterkonfigurationen wird häufig der Operator =~ verwendet, um mehrere Messwertnamen abzugleichen. Um dieses Problem zu beheben, erweitern Sie die Konfiguration so, dass für jeden Messwert eine separate Richtlinie verwendet wird, und geben Sie jeden Messwert explizit an. So wird auch verhindert, dass Sie versehentlich Autoscaling für unerwartete Messwerte verwenden.
  • Reguläre Ausdrücke werden häufig verwendet, um mehrere nicht dimensionale Messwerte im selben Diagramm darzustellen. Wenn Sie beispielsweise einen Messwert wie cpu_servicename_usage haben, können Sie einen Platzhalter verwenden, um alle Ihre Dienste zusammen darzustellen. Die Verwendung nicht dimensionaler Messwerte wie dieser ist in Cloud Monitoring ausdrücklich nicht empfehlenswert und führt zu einer extrem schlechten Abfrageleistung. Um dieses Problem zu beheben, müssen Sie alle Dimensionen in Messwertlabels verschieben, anstatt sie in den Messwertnamen einzubetten.
  • Das Abfragen mehrerer Messwerte wird häufig verwendet, um zu sehen, welche Messwerte für Abfragen verfügbar sind. Wir empfehlen stattdessen, die /labels/__name__/values-Funktion zu verwenden, um Messwerte zu ermitteln. Sie können Messwerte auch über die Cloud Monitoring-Benutzeroberfläche ermitteln.
  • Wenn Sie mehrere Messwerte abgleichen, können Sie sehen, wie viele Stichproben pro Messwert erfasst, aufgenommen und abgerechnet wurden. Cloud Monitoring stellt Ihnen diese Informationen auf der Seite Messwertverwaltung zur Verfügung. Sie können auch als Messwertdaten auf diese Informationen zugreifen, indem Sie den Messwert „Erfasste Stichproben“ oder den Messwert „Von Attributions-ID geschriebene Stichproben“ verwenden.

Veraltung

Veralterung wird im Monarch-Backend nicht unterstützt.

Berechnung von irate

Wenn das Lookback-Window für die Funktion irate kleiner als die Schrittgröße ist, wird das Fenster auf die Schrittgröße erhöht. Monarch erfordert diese Änderung, um sicherzustellen, dass keine der Eingabedaten in der Ausgabe vollständig ignoriert werden. Dieser Unterschied gilt auch für rate-Berechnungen.

Berechnung von rate und increase

Wenn das Lookback-Window für die Funktion rate kleiner als die Schrittgröße ist, wird das Fenster auf die Schrittgröße erhöht. Monarch erfordert diese Änderung, um sicherzustellen, dass keine der Eingabedaten in der Ausgabe vollständig ignoriert werden. Dieser Unterschied gilt auch für irate-Berechnungen.

Es gibt Unterschiede bei Interpolations- und Extrapolationsberechnungen. Monarch verwendet einen anderen Interpolationsalgorithmus als Prometheus. Dieser Unterschied kann zu leicht unterschiedlichen Ergebnissen führen. Beispielsweise werden Monarch-Zählerstichproben mit einem Zeitraum gespeichert, nicht mit dem einzelnen Zeitstempel, den Prometheus verwendet. Daher können Zählerstichproben in Monarch in eine Ratenberechnung einbezogen werden, obwohl sie vom Prometheus-Zeitstempel ausgeschlossen werden würden. Das führt in der Regel zu genaueren Raten, insbesondere bei Abfragen am Anfang oder Ende der zugrunde liegenden Zeitachse.

Berechnung von histogram_quantile

Eine PromQL-histogram_quantile-Berechnung in einem Histogramm ohne Stichproben erzeugt einen NaN-Wert. Die Berechnung der internen Abfragesprache erzeugt keinen Wert. Der Punkt am Zeitstempel wird stattdessen ignoriert.

Die Unterschiede bei der Ratenberechnung können sich auch auf die Eingabe für histogram_quantile-Abfragen auswirken.

Typspezifische Funktionen für unterschiedlich typisierte Messwerte

Obwohl das vorgelagerte Prometheus schwach typisiert ist, ist Monarch streng typisiert. Das bedeutet, dass die Ausführung von Funktionen mit spezifischer Typisierung auf einem Messwert mit anderer Typisierung (z. B. rate() auf einem GAUGE-Messwert oder histogram_quantile() auf einem COUNTER- oder nicht typisierten Messwert) in Managed Service for Prometheus nicht funktioniert, obwohl diese Funktionen im vorgelagerten Prometheus funktionieren.