PromQL 相容性

Google Cloud Managed Service for Prometheus 中的 PromQL 查詢會在 Monarch 後端進行部分評估,因此查詢結果會出現一些已知差異。本文將說明這些差異。

除了本文列出的差異之外,Managed Service for Prometheus 中的 PromQL 與 Prometheus 2.44 版的 PromQL 相同。

系統可能不支援 Prometheus 2.44 版之後新增的 PromQL 函式。

支援 UTF-8

Cloud Monitoring 的 PromQL 支援 UTF-8 查詢

如果 Prometheus 指標名稱只包含英數字元和 _: 字元,且標籤鍵只包含英數字元和 _ 字元,您就可以使用傳統的 PromQL 語法查詢。舉例來說,有效的查詢可能如下所示: job:my_metric:sum{label_key="label_value"}

不過,如果 Prometheus 指標名稱使用 _: 以外的任何特殊字元,或是標籤鍵使用 _ 以外的任何特殊字元,則必須根據 PromQL 的 UTF-8 規格建構查詢。

UTF-8 指標名稱必須加上引號,並移至大括號內。如果標籤名稱含有不相容的舊版字元,也必須加上引號。以下有效查詢範例皆相等:

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

依指標名稱比對

系統只支援完全比對指標名稱。查詢中必須包含完全相符的指標名稱。

如果常見情境在 __name__ 標籤上使用規則運算式比對器,建議您採取下列因應措施:

  • Prometheus 介面卡設定通常會使用 =~ 運算子,比對多個指標名稱。如要修正這項用法,請展開設定,為每項指標使用個別政策,並明確命名每項指標。這也能避免您根據非預期的指標,意外自動調度資源。
  • 您通常會使用規則運算式,在同一張圖表上繪製多個非維度指標的圖表。舉例來說,如果您有 cpu_servicename_usage 這類指標,可以使用萬用字元將所有服務繪製在同一張圖表上。在 Cloud Monitoring 中,使用這類非維度指標是明顯的錯誤做法,而且會導致查詢效能極差。如要修正這項用量,請將所有維度移至指標標籤,而非將維度嵌入指標名稱。
  • 查詢多個指標通常是用來查看可查詢的指標。建議您改用 /labels/__name__/values 呼叫來探索指標。您也可以使用 Cloud Monitoring UI 探索指標。
  • 比對多個指標有助於瞭解每個指標的擷取、擷取和計費樣本數。Cloud Monitoring 會在「指標管理」頁面提供這項資訊。您也可以使用擷取的樣本指標或依歸因 ID 寫入的樣本指標,以指標資料的形式存取這項資訊。

過時程度

Monarch 後端不支援過時

計算 irate

如果 irate 函式的回溯期小於步長,我們會將回溯期增加至步長。Monarch 需要這項變更,確保輸出內容不會完全忽略任何輸入資料。這項差異也適用於 rate 計算。

rateincrease 的計算方式

如果 rate 函式的回溯期小於步長,我們會將回溯期增加至步長。Monarch 需要這項變更,確保輸出內容不會完全忽略任何輸入資料。這項差異也適用於 irate 計算。

內插法和外插法的計算方式不同。 Monarch 使用的插補演算法與 Prometheus 不同,因此結果可能略有差異。舉例來說,Monarch 計數器樣本會連同時間範圍一併儲存,而非 Prometheus 使用的單一時間戳記。因此,即使 Prometheus 時間戳記會排除這些樣本,Monarch 仍可將計數器樣本納入速率計算。這通常會產生更準確的費率結果,尤其是在查詢基礎時間序列的開頭或結尾時。

計算 histogram_quantile

如果直方圖沒有樣本,PromQL histogram_quantile 計算會產生 NaN 值。內部查詢語言的計算不會產生任何值,而是會捨棄時間戳記的點。

費率計算差異也可能影響 histogram_quantile 查詢的輸入內容。

不同類型指標的類型專屬函式

雖然上游 Prometheus 是弱型別,但 Monarch 是強型別。也就是說,在 Managed Service for Prometheus 中,您無法對不同類型的指標執行特定類型的函式 (例如對 GAUGE 指標執行 rate(),或對 COUNTER 或未輸入類型的指標執行 histogram_quantile()),即使這些函式可在上游 Prometheus 中運作也一樣。