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
計算。
計算 rate
和 increase
如果 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 上游運作也一樣。