PromQL 相容性

Google Cloud Managed Service for Prometheus 中的 PromQL 查詢會在 Monarch 後端使用 Monitoring Query Language (MQL) 進行部分評估,因此查詢結果會有些許差異。本文將說明兩者的差異。

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

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

依據指標名稱比對

系統只支援指標名稱的完全比對。您必須在查詢中加入與指標名稱完全相符的值。

針對在 __name__ 標籤上使用規則運算式比對工具的常見情境,建議您採用下列因應措施:

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

過時程度

Monarch 後端不支援Staleness

irate 的計算

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

計算 rateincrease

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

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

histogram_quantile 的計算

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

費率計算方式的差異也會影響 histogram_quantile 查詢的輸入內容。

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

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