Monitoring
Promethius、group_left 和“on”與“ignoring”
在Issue #2204中,Prometheus 開發人員之一說:
…原則上,您應該傾向於
ignoring
生成on
通用的可共享規則…我很困惑如何使用
ignoring
會導致更通用的規則。例如,考慮一種情況,我們有一個設備的“資訊”指標和幾個統計資訊,如下所示:device_info{id="1", owner="coyote", project="acme"} device_rx_bytes{id="1"} device_tx_bytes{id="1"} device_rx_errors{id="1"} device_tx_errors{id="1"}
如果我想按項目獲得接收率,我需要將
device_rx_bytes
指標與相應的device_info
指標相關聯。對我來說,這聞起來像一個 SQL 連接,我會寫:rate(device_rx_bytes[5m]) * on(id) group_left(project) device_info
這似乎是“通用的”,因為它只對用於分組
id
的標籤 ( ) 和我們想要傳播到結果的標籤( ) 做出假設project
。如果我正確理解了ignoring
運算符,則相應的表達式會更複雜,因為我需要從右側列出左側不存在的所有標籤。就像是:rate(device_rx_bytes[5m]) * ignoring(owner, project) group_left(project) device_info
那是對的嗎?如果是,為什麼
ignoring
優先於on
(不僅在上面的引用中,而且在各種文件和範例中)?
我認為該評論中的關鍵字是
shareable
或換句話說可重用規則。這意味著您(通常)在使用時保留更多標籤,結果ignoring
將on
(通常)成為一個規則,其中更多的原始標籤保持不變,因此可以在更多場景中重複使用。想像一下這些時間序列:
instance_cpu_time_ns{app="lion", proc="web", rev="34d0f99", env="prod", job="cluster-manager"} instance_cpu_time_ns{app="elephant", proc="worker", rev="34d0f99", env="prod", job="cluster-manager"} instance_cpu_time_ns{app="turtle", proc="api", rev="4d3a513", env="prod", job="cluster-manager"} instance_cpu_time_ns{app="fox", proc="widget", rev="4d3a513", env="prod", job="cluster-manager"} ...
ignoring(rev)
與具有 的相同查詢相比,具有 的查詢在結果中省略了所有其他標籤on(app)
。但是,如果您將它們與互斥的標籤集一起使用,則
on
and的結果將是相同的,就像您提到的範例一樣。ignoring